“Amazon is on record as making changes to production every 11.6 seconds on average in May of 2011.” — ThoughtWorks.
“Facebook releases to production twice a day. Many Google services see releases multiple times a week.” — ThoughtWorks.
“Almost everything in Google is developed on mainline.” — ThoughtWorks.
How is this possible?
Astonishing data, isn’t it? This is the power of continuous delivery. Let us try to demystify the concept.
So what is continuous delivery?
A widely used layman’s definition: Continuous delivery is a software development discipline where you build software in such a way that the software can be released to production at any time. Now let us see what this means and explore how it works.
When we are talking about continuous delivery, we need to give thought to the following:
- Continuous build and integration — How frequently are your code changes merged to the source code and build?
- Continuous testing — Do we have an automated testing mechanism to test the integrated code?
- Continuous deployment — Do we have an automated deployment mechanism to deploy the code from one environment to the next environment and finally to production?
- Auto-provisioning — Do we have any auto-provisioning mechanism to capture the entire process through some dashboards?
- Agility — Are we Agile? Do we understand and follow Agile values and principles?
Next question: How is Agile related to continuous delivery, or why do you need to be Agile to achieve continuous delivery?
Agile is the backbone of a continuous delivery practice. Not only does the team need to adopt Agile values and principles but also its frameworks, such as Scrum, Kanban, Lean, Scrumban, and so on. But here the key focus is on XP practices. To achieve continuous delivery, you ensure that you are following XP practices such as test-driven development, clean code, refactoring, pair programming, continuous integration, etc.
Another way to say it is that being Agile is the most important step toward achieving continuous delivery. If you have achieved continuous delivery, you are
So what else do you need to move to continuous delivery?
- DevOps collaboration: Certainly your business (sponsor, product owners), IT team (dev, business analyst, testers), and your production team (integrator, functional support, infrastructure support, technical support, etc.) need to work together in a collaborative manner.
- Source code management
- Agile life cycle management
- Development interface
- Continuous integration
- Performance management
- Infrastructure as code
- Unit testing framework
- Comprehensive testing
- Automated deployment
- Library repository
- Automation: The focus should be on automation of manual efforts. For example, automation of regression test cases, functional test cases, etc.
All these will help to build a continuous delivery pipeline.
- Cost optimization of software development by focusing on building the right thing at the right time in the right way
- Faster time to market, giving your organization a competitive advantage and thus increasing IT efficiency
This is the power of continuous delivery. It is the future.