In Accelerate, Nicole Forsgren, Jez Humble, and Gene Kim present the methods and results of their four-year research program. They have identified 24 key capabilities that drive improvement in software delivery performance and, in turn, organizational performance.
They’ve classified these capabilities into five categories:
Today, we will highlight the capabilities that allow us to achieve continuous delivery.
Using version control is already a common practice for software teams. Everything that’s needed to create a production build (application code, configurations, build scripts, etc.) should be checked in under version control.
Trunk-based devlopment refers to the practice where the teams keep the number of active branches low and the lifetime of these branches short before merging into master. Adopting trunk-based development allows changes to be integrated with master as early as possible, which enables the team to better achieve continuous integration and continuous delivery.
Automate the deployment process as much as possible so that deployment becomes a trivial task.
Developers should implement unit and UI tests that are run automatically throughout the development process. The tests should be reliable in that they should find real failures and only pass releasable code.
A proper continous integration should regularly integrate code changes into the main branch and run automated test suites to check for new bugs or regressions that developer can quickly fix.
Adopting continuous devliery enables the team to deploy all the latest changes at any time with little manual work. An example of this would be to deploy a build for every change on master, or to release a daily build. The team should try to keep software in a deployable state, and if it becomes undeployable, fixes are made quickly.
Ensure that there is enough test data to run automated tests and that it is easy to acquire more test data.
Move software security earlier in the delivery process so that any issues are avoided or resolved sooner. Integrate security practices into the software delivery lifecycle in a way that does not slow down the developemtn process.
Unlocking these capabilities for your team allows them deploy faster, more frequently, and more reliably, which, according to the research presented in the book, will improve the overall performance of your team. How many of these capabilities has you team implemented?