Continuous delivery promotes the adoption of an automated deployment pipeline to release software into production reliably and quickly.
Its goal is to establish an optimized end-to-end process, enhance the development to production cycles, lower the risk of release problems and provide a quicker time to market. To that point, Jez Humble and Dave Farley define the 8 principles of continuous delivery in their Book “Continuous Delivery” as follows:
1. Repeatable Reliable Process
Use the same release process in all environments. If a feature or enhancement has to work through one process on its way into the integration environment, and another process into QA, issues find a way of popping up.
2. Automate Everything
Automate your builds, your testing, your releases, your configuration changes and everything else. Manual processes are inherently less repeatable, more prone to error and less efficient. Once you automate a process, less effort is needed to run it and monitor its progress – and it will ensure you get consistent results.
3. Version Control Everything
Code, configuration, scripts, databases, documentation. Everything! Having one source of truth – and a reliable one – gives you a stable foundation to build your processes upon.
4. Bring the Pain Forward
Deal with the hard stuff first. Time-consuming or error prone tasks should be dealt with as soon as you can. Once you get the painful issues out of the way, the rest will most likely be easier to perfect.
5. Build-in Quality
Create short feedback loops to deal with bugs as soon as they are created. By having issues looped back to developers as soon as they fail post-build test, it will enable them to produce higher quality code quicker. In addition, fewer issues will be found later on in the process, when it will be more expensive to fix.
6. "Done" Means Released
A feature is done only when it is in production. Having a clear definition of “done” right from the start will help everyone communicate better, and realize the value in each feature.
7. Everyone is Responsible
"It works on my station" is never a valid excuse. Responsibility should extend all the way to production. Cultural change can be the hardest to implement. However, having management support and an enthusiastic champion will certainly help.
8. Continuous Improvement
Out of all 8 principles of continuous delivery listed here, if you ask me, this principle is the most important for effective automation. If "practice makes perfect" then automation represents the ultimate expression of a practice-making-perfect iterative process.
Culture is a non-starter. You absolutely must have a culture that seeks out continuous improvement. Moving beyond the motivation though, more often than not, automation provides the most accessible and most effective means to that end.
Moving in the direction of ever more repeatable, reliable and efficient practices, automated iteration is the key ingredient to realizing substantial ROI on your continuous delivery efforts.