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.
The old website presented many issues with:
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.
Key technologies and tools we used:
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.
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.
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” 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:
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.
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:
Assessment Training personnel, test managers and translators use the management application in their day-to-day operations.
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.
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: