How Good Is Your Continuous Delivery?
Continuous delivery is something that many companies aim for, yet few achieve. It’s a topic that is both popular and still somewhat nebulous. I am going to share my thoughts on continuous delivery, how it offers business value, how it boosts developer morale, and how to rate your company on ability to deliver.
Here is my definition of continuous delivery:
The ability to deliver newly completed software features to your users immediately.
This doesn’t mean you have to deliver it constantly. It does mean that you have to be able to. For some projects (cutting-edge, open source, webs sites, etc.) you may want to release each feature immediately, sometimes multiple times per day. For other projects, (stable business tools, competitive multiplayer games, etc.) one release every two-four weeks is better for your users. The key is that you could deliver the new feature to your users immediately.
Completed features are ones that have been checked into source control as feature-complete. Any time spent in QA or feature review means that you are not able to deliver immediately. Pragmatically, this means that attaining continuous delivery is contingent upon automation and preemptive acceptance tests. Only by having a strong automated pipeline in place can you ensure that the software works as expected, is free of defects, and is ready for your users.
The business value of continuous delivery is that it increases product agility, decreases time to market, and keeps your users maximally engaged.
Increased Product Agility: Product agility is the speed at which business can make new directional decisions about features. Agility is low when there is a large time lapse between when a decision is made and when the results of that decision can be assessed. When agility is high, it is possible for a new feature to be created, delivered to users, and quickly changed based on the feedback of the users. This lowers the cost of bad product designs, and increases the rate at which user tastes can be identified.
Shorter Time To Market: In highly competitive markets, there is a major advantage to being to able to release new features before your competition. By minimizing the time lapse between completing a feature and releasing it to your users, your company will have a major speed advantage over competitors. This also means that additional revenue from new features will arrive sooner, which feeds into a healthy business cycle.
Maximum User Engagement: This doesn’t apply to every single product, but for some it is the most important dimension. By delivering fresh features frequently, or enhancing usability often, users will feel that you are invested in their needs. Users feel most valued when their feedback is taken seriously, and when the business evolves the product to better satisfy their needs. Presently, technology is moving at a very rapid pace. Companies and products that don’t keep pace will get left behind and forgotten.
Developers are happiest working in an environment with continuous delivery for at least two reasons.
As creators, developers take joy in creating things that people enjoy using. Every developer wants to work on products that are popular. Every developer takes pride in knowing that their designs are empowering. Developers love to hear about positive experiences that users have. When releases are slow, user feedback doesn’t reach the developers until long after the feature was built. This creates a critical disconnect. When new features are released quickly and feedback is fast, developers get excited knowing that their contributions are making a difference. Short feedback cycles energize developers!
As engineers, developers take pride in their ability to build technical solutions. Every software craftsman dreads creating bugs or building solutions with imperfections. Swift releases give craftsmen the power to fix bugs and imperfections quickly. This minimizes the duration where developers doubt the functional integrity of their creations. Continuous delivery reduces developer stress, while increasing developer confidence in the product and development process.
How good is your continuous delivery?
There are two primary metrics for continuous delivery.
Immediacy of release.
When a new feature is checked in as complete, what is the typical amount of time that your company needs to deliver it to your users?
- Less than 30 minutes
- 30 minutes - 3 hours
- Same day
- Same week
- Within 2 weeks
Effort required to release.
When a new feature is checked in as complete, how much work is required to deliver it to your users?
- One single command-line call or button press, or no effort
- Less than 10 minutes of work, single person
- Up to 30 minutes of work, single person
- Up to 3 hours, up to two people
- Up to 12 hours, up to four people
- Anything more
Your continuously delivery score is your score for each metric, added together. The best software process should result in effortless delivery immediately upon feature check-in.
For most companies, your score is going to be far below a 10. Even with some work, it might not be easy to evolve your development pipeline to perfect your continuous delivery. It may take a lot of work. By keeping in mind a clear vision of the goal, it will be possible to move in the right direction. Every step closer to the goal offers a lot of value. It is well worth the journey!
If your score is 8 or above, you probably have experienced first-hand the practical benefits of continuous delivery. You know how good it feels to get user feedback quickly, to iterate your product rapidly, and to effortlessly release your software. The development agility you have is a powerful asset. The trust you have from the business owners is high. You have experienced how easy it is to deliver bugfixes or reverse poor product design decisions. Continuous delivery is an extremely empowering practice! dice!</strong>