Microsoft believes that “Continuous Delivery (CD) is the process to build, test, configure and deploy from a build to a production environment. Multiple testing or staging environments create a Release Pipeline to automate the creation of infrastructure and deployment of a new. Successive environments support progressively longer-running activities of integration, load, and user acceptance testing.” Amazon otherwise defines continuous delivery as “Continuous delivery is a DevOps software development practice where code changes are automatically built, tested, and prepared for a release to production”.
The goal of continuous delivery is to keep production fresh by achieving the shortest path from the availability of new code in version control or new components in package management to deployment. By automation, CD minimises the time to deploy and time to mitigate or time to remediate production incidents (TTM and TTR). In lean terms, this optimises process time and eliminates idle time.
With continuous delivery, every code change is built, tested, and then pushed to a non-production testing or staging environment. There can be multiple, parallel test stages before a production deployment. In the last step, the developer approves the update to production when they are ready. This is different from continuous deployment, where the push to production happens automatically without explicit approval.
CIO.com recommends the following for a successful migration to continuous delivery;
Automation is fundamental to continuous delivery
IT automation lets you make successful processes repeatable. When you decide to introduce a new feature, make a change to a service or system or an adjustment to your infrastructure, automation lets you make the change quickly and safely, without introducing the human errors inherent in manual processes.
Frequent releases are enabled by continuous delivery
Continuous delivery means you’re releasing code frequently, rather than shipping big releases once or twice a year. So you’re testing your new code more often against existing code and systems. There’s less change in each release, so it’s easier to isolate and fix problems. It’s also easier to roll back when needed.
Automated testing is also fundamental to continuous delivery
Automated testing lets you catch errors early and stops you from inadvertently passing bad code to the next stage of development.
Continuous delivery is built on agile practices
Continuous delivery is an outgrowth of the Agile movement. Agile seeks to correct the problem of late, large, buggy software releases by promoting iterative, incremental changes to code and collaboration between teams.
A cultural shift
Continuous delivery requires (and creates) a shift in how people think about work culture. Instead of delivering software every six months to a year, and spending long periods of time fixing things, teams deliver smaller changes more frequently. Problems can be fixed quickly. IT and dev teams agree that creating, testing and deploying quality code is a shared responsibility. Everyone is on the same team.
Shared responsibility
Continuous delivery works because teams share responsibility for the process, putting an end to siloed teams handing work off to each other. Instead, you’re working together as a single team of people with different skills and responsibilities. Errors and issues become an opportunity to collaborate on improving the process — not an excuse to blame someone else.
Accelerated innovation
Continuous delivery decreases lead times, meaning new features can be delivered faster since teams don’t have to wait for a semi-annual, big batch release. This has a profound effect on how the product is managed. Product learning is vastly increased since features are delivered sooner. As the pace of learning increases, product experimentation becomes more reasonable. With rapid learning and safe product experimentation, new innovations are developed faster with a more rapid cadence, leading to greater market competitiveness.
Don’t pursue continuous delivery just so you can deliver faster. Do it because it will make your product better.