Case story: Assessment-Training.com

Assessment-Training.com is a global platform that helps prepare candidates for job assessments. The challenge was moving from an outdated and unresponsive WordPress site to a newly designed global web platform tailored for Assessment Training customers.

Nadir Badnjevic
RUBICON Stories
Published in
7 min readOct 6, 2017

--

How we started

The old website presented many issues with:

  1. Usability — outdated and unresponsive design
  2. Security — missing SSL certificates, attacks on WordPress sites
  3. SEO issues
  4. Performance issues under high load
  5. Difficult content management (tests, translations, images, packages)
  6. Growth — Could not succeed in scaling their business

Our challenges

  1. Develop a core platform and content architecture. The new platform had to support multi-lingual solution and all content translations;
  2. Develop a modern web platform, available 24/7 from anywhere in the world. It needs to be usable from any device or screen size. The new web platform must be secure, flexible, and scalable to meet spikes in demand.
  3. Develop a centralized administrative application. Give test managers and translators more control over day-to-day operations and improve efficiency.
  4. Data migration from old WordPress installations. We needed to migrate all customer data, including login credentials, purchases and subscriptions.
  5. Centralization and unification. We had to centralize and unify assessment tests content for all languages. The old platform used independent WordPress installation with its own databases per language.

How we solved it

We unified our three main disciplines — design, development and project management. This way, we created a cross-functional unit that covered all the bases. Using the agile model, we worked in two week sprints.

To keep up with global growth and deliver the best possible online experience, RUBICON developed a new platform. We used Microsoft technologies and PaaS services in the cloud on Microsoft Azure.

We leveraged Umbraco as the marketing part of the website. The Assessment Training staff could easily and quickly make changes to website content. Umbraco was a great choice, because it was easy to integrate with the core systems the project required. They could cohabitate in the same .NET application together. With Umbraco, Assessment-Training can easily launch a new language and market specific websites.

The solution

Key technologies and tools we used:

  • ASP .NET MVC
  • Umbraco CMS
  • AngularJS
  • Azure App Service
  • Azure SQL Database
  • Azure Blob Storage
  • Azure Application Insights
  • Redis Cache
  • Visual Studio Team Services Git
  • Atlassian Jira and
  • Bitbucket

Software architecture

Emerging architecture

Today’s view of the architecture process is that teams should start developing as soon as possible. If they do, they get early feedback and improve the software based on the real code. This means moving fast. You need to accept and embrace change, deliver value early, and welcome feedback.

Emerging architecture is a process that results from the incremental building of software. After the initial startup, the project goes through a series of iterations that include design, coding, and testing. Every iteration produces a deliverable but incomplete version of the system.

Clean architecture

Current thinking on architecture assumes that your design will evolve over time. You cannot know everything you need to know up front to fully architect your system. You should architect and design software solutions with evolution in mind. This way, you will be able to adapt to requirements that are not fully known at the start of design process. Following common architectural principles leads to decisions that result in clean, maintainable applications.

To reach our goals and with maintainability in mind, after a couple of iterations, we settled on Clean Architecture. The term Clean architecture applies to applications built using Domain-Driven Design (DDD) principles. Domain-Driven Design (DDD) is a proven approach to writing software, which deals with complex business requirements.

Clean architecture puts business logic and the application model at the center of the application. Instead of having business logic depend on data access or other infrastructure concerns, this dependency inverts. Infrastructure and implementation details depend on the Application Core.

We achieve this by defining abstractions, or interfaces, in the Application Core. They are then implemented by types defined in the Infrastructure layer. A common way of visualizing this architecture is to use a series of concentric circles, like an onion.

Solution (Infrastructure) architecture: Scalable Umbraco CMS web app

This architecture represents Umbraco CMS web app. It is optimal for high-traffic sites and configured to scale. It uses two web apps: one for our front-end app and other for Umbraco back-office. They are deployed in a single region with autoscaling enabled. With scaling enabled, we easily address high-traffic periods.

DevOps workflow

“DevOps” is the integration of development and operation tasks to develop software efficiently. This workflow enables us to develop an app, deploy it, and learn from production. We change it in response to what we learned, and repeat the cycle quickly and reliably.

The three patterns that enable a successful DevOps workflow:

  1. Automate everything
  2. Source control
  3. Continuous integration and delivery

Automating development tasks is essential for cloud projects. It’s an important topic because manual process are slow and prone to error. Automating as many of them as possible helps us set up a fast, reliable, and agile workflow.

Source control is essential for almost all development project, not just team environments. How you implement branches in your repository affects your ability to develop new features and fix issues in production. The branching strategy we used derives from Gitflow Workflow.

The master branch always matches the code in production. The development branch is where we implement new features. When we need to resolve a critical bug in production, a hotfix branch branches off the master branch.

Whenever a developer checks the code in to the source repository, after the approval of a pull request, a build is automatically triggered. Continuous delivery takes this further. After the build and automated tests are successful, the application is automatically deployed to an environment where we do more in-depth testing.

For production environment, we use the Azure App Service deployment slots feature. First, we deploy the application to the staging slot. Then we validate the app changes in a staging deployment slot before swapping it with the production slot.

Deploying an app to a slot first ensures we warm up all instances of the slot before swapping them into production. This eliminates downtime when you deploy your app. The traffic redirection is seamless. No requests are dropped as a result of swap operations. We successfully deploy many times a day to a live environment and even during high-traffic periods.

This architecture shows how we configured the infrastructure for development and production environments of a standard PaaS-style system.

How it works

We built the new Assessment Training website around Umbraco v7, which is integrated with the core system and database. We followed the standard patterns and best practices to develop this Umbraco site. We choose platform-as-a-service (PaaS) model by Microsoft Azure to host our applications. To get a scalable app and good performance, we had to fine tune and optimize Umbraco website for performance. Another important task was to setup and configure a scalable solution for Azure Web Apps.

A good DevOps workflow makes life easier. Especially when we work with multiple working environments, like development and production. Now we can work and test on the development environment. Then we can deploy our changes to live without any issues or worry.

A management (administrative) application is a centralized management system for core database with all core content. Its main uses are:

  1. Tests management and translations
  2. Package (products) management
  3. Customer management

Assessment Training personnel, test managers and translators use the management application in their day-to-day operations.

What Assessment-Training gained from the new system

The previous CMS was clunky and difficult to manage. The new Umbraco website tightly integrates the core system with the rest of the website content. That makes everything both easier to manage and easier to access.

We integrated analytics tools: Google Analytics, Hotjar, Intercom. Thanks to this, Assessment Training gained key metrics related to tracking user behaviour. This way, we can find usability issues and increase our growth.

Assessment Training staff can now manage context and upload new assessment tests faster. Through these improvements, we can upload a larger volume of content with greater frequency. This led to an upturn in the volume of unique visitors and a decreased bounce rate.

The new website is much more responsive and works on all platforms. It is also much more readable and easier to understand.

“RUBICON did a fantastic job running the design sprint, and are true creative thinkers. They not only have the experience and knowledge but also bring a wealth of technical expertise to the table, making the process extremely efficient for us.”
- Ingmar van Maurik, CEO Making Moves B.V.

Results

The project was very challenging. Our agile approach, core platform architecture and Umbraco flexibility enabled us to react to changing requirements. Each market launched as planned:

  • Launched new website and core platform for global market in Phase 1 (within 7 months)
  • Launched and migrated 2 priority market sites in Phase 2 (within 2 months)
  • Migrated more than 23,000 customers with credentials and subscription data
  • Created more than 1700 assessment tests in core database
  • Launched more than 50 new products
  • SEO improvements
  • Applied SEO best practices for multilingual sites: changed domains and URL structure format

--

--