Ep 3: Continuous Delivery - Make any commit deployable within one hour
We recently read “Modern Software Engineering“ by David Farley and the most important key takeaway we got was this:
… As a target, I generally recommend aiming to have something that you could deploy into production in less than one hour from the commit of any change.
By just applying this simple principal, your development process is encouraged to optimize for various aspects and gain lots of benefits, especially better quality of software release. Let’s quickly look around the benefits first. We’ll talk about how to guide in the following newsletter.
Measurements of the performance of software development
According to “Modern Software Engineering“, and we totally agree with it, there are two key measurements of the performance of software development and each is associated with two key indicators:
Stability
Change Failure Rate
Recovery Failure Time
Throughput
Lead Time
Frequency
These are amazingly simple but tangible enough to visualize such a vague measurement i.e. the performance of software development. If your development process marks high scores on just these two key measurements, your performance is high.
For example, the better stability you have, the better quality of software you deploy, meaning less negative values provided by deployments. Then, you don’t have to be scared about deployments too much and you can focus on more creative tasks.
Also, better throughput means adding more positive values provided by deployments. You release more features with faster pipeline, therefore your customers can receive more values than lower throughput processes.
However, both are interconnected, not orthogonal nor trade-off. The better stability you have, the more confident you feel to deploy faster and more frequently. Better throughput allows you to deploy improvements of stability faster e.g. quick rollback.
One-hour deployable affects every measurements
Obviously, the “Lead Time“ indicator is directly connected to the “One-hour deployable“ principal. And as we mentioned above, it affects more than “Lead Time“. To make one-hour deployable happen, you also need better monitoring system after deployments to keep better stability and give more confidence to high frequent deployments because the monitoring system can quickly detect any failure related to the new code and trigger rollback automatically, for example.
Summary
The performance of software development can be measured by two simple measurements: Stability and Throughput. Both are correlated each other and high performance teams have high score on both measurements. “One-hour deployable“ principal is stupidly simple but affects both measurements positively in various ways.