Deployment Process

One of the things that work particularly well with TaskBeat is the deployment process. The whole process revolves around the concept of staging complete change sets over the test servers, called UAT (User Acceptance Testing). These generally a mix of servers used for internal testing and the beta testing that are configured “as closely to production” as possible, albeit running on different metal.

The whole process is managed by a Continous Integration tool that merges all the changes and produces builds followed by the automatic testing procedure upon each check-in made by developers. We build both the development versions and production versions independently:

2013-03-08_013349

Each version is a complete application that includes all the changes merged. Complete application can be deployed using commodity installer, just like any other desktop application. The installer configures web server, places the files in their respective directories as well as performs the database merge using the change scripts included:

2013-03-08_013236

Each installation can result only in success or failure, meaning either all changes have passed automatic tests and have been successfully deployed or the installation failed. Each installation is platform agnostic, meaning it can be deployed to either test or production server and always results in a complete instance of the application running on the target platform:

2013-03-08_013457

This represents extremely simple and powerful way of deploying changes that allows us to test not only the changes, but also the result of code merging as well as the deployment process. If there’s a failure at any of the steps we know it will occur in the test environment or won’t occur at all during the production deployment.

Otherwise we have a guarantee that any particular installer which has succeeded in our UAT environment will also succeed in production. We know not only what is going to be installed but also find out how to install the change ahead of the installation to production. This approach generally increases the quality level of the whole solution and exposes the complete solution for testing ahead of final deployment.

Interestingly by subscribing to this process we also get know exactly how long each deployment will take, even if there are many files or database updates deployed as part of each installation. The deployment time can be measured during UAT deployment and makes it easy to predict maintenance windows during production deployment. This results in no surprises after the installation is completed.

We’ve invested into this process in order to safeguard service availability as well as integrity and confidentiality of our customer’s data. As the part of the process we have secured an environment where no one can ship a piece of code without testing and no developer needs any type of access to any of our test or production databases.