Once upon a time, people just wrote code and then ran it to find how well it worked. Working individually, the developer was able to iterate quickly until the software was useful to solve a real problem.
As software became more complex, it was broken into separate and independent sub-modules developed more or less in isolation by individual developers. Each sub-module was tested, the system was integrated back together, then tested, staged, released, deployed. Software development cycles stretched over several months (or several years).
The pendulum is swinging back. Software engineering is now evolving towards shortening the feedback loops and minimizing the time it takes from code being written to being in production. This time, we want to do it with more quality and predictability. The tools to achieve that are processes, automation, and collaboration.
Moving across the levels depicted on the picture above (Source Code Control, Build Automation, Test Automation, Continuous Integration, Release Automation, Continuous Delivery) is not simple. It involves not only changing processes and automating them, but also changes in culture and organization.
- Source Code Control – Single source code repository with version control.
- Build Automation – Compile and Build applications without human intervention.
- Test Automation – Execute unit, integration and service tests without human intervention.
- Continuous Integration – Developers integrate code into a shared repository (which triggers automated build/test) often.
- Release Automation – Packaging, deploying and post-deployment testing without human intervention.
- Continuous Delivery – Every change to the system is releasable. Release can be done by the push of a button.
Continuous Integration (CI) is the practice of accelerating the daily commits of code by software developers. If in the past developers would work for weeks before trying to integrate their work to the main tree, in a CI environment you want developers to check-in their work several times a day.
A CI server monitors code check-ins by developers and, as often as practical, it builds the system and runs unit and integration tests. If there is any failure in the process, the CI server alerts the developers. A broken build gets the attention and top priority from the team.
CI requires test-driven development and automation.
- CI does not eliminate software bugs, but it accelerates their discovery and keeps people from going in the wrong direction for too long.
- The system is always in a state that can be released to users. That provides more flexibility to the business and enables the automation of the release process and delivery to users.
Once you are doing Continuous Integration and is able to automate the deployment process, you can consider extending the process and automation all the way to the end-user. Continuous Delivery (CD) is the practice and ability to rapidly, reliably and repeatedly push out enhancements and bug fixes to customers at low risk and with minimal manual overhead.
The automation system let changes to the system be released on a granular basis. Releasing features just to a subset of users and being able to seamless roll back to a previous version becomes possible.
The result is that there is no delay between enhancements and bug fixes being implemented and available to users.
Software Continuous Integration & Delivery White Paper
At Daitan, we work with organizations at different stages of agility. In more conservative and regulated markets (e.g. core telecom), companies operate in a fully structured waterfall model where software goes through discrete and serial phases of development, unit testing, integration and system testing. Companies producing software that is deployed in the Cloud and offered as a service are the ones most aggressively pursuing agility in software development.
The majority is somewhere around the middle of the diagram, trying to move towards more agile software engineering processes. Most of our customers have implemented significant test automation and continuous integration capabilities and are starting to move towards extending that towards release and delivery to end users.
Download the White Paper “Software Continuous Integration and Delivery.”