This is an introduction to a series of video interviews on the theme of ‘The Journey to Continuous Delivery’
What is Continuous Delivery?
Continuous delivery is a series of practices designed to ensure that changes to code whether bug fixes or new features can be rapidly and safely deployed to production. We achieve this by delivering every change to a production-like environment, making sure the applications services and functions are functioning as expected by running rigorous automated testing.
So we place a high emphasis on making sure that code is always in a deployable state. New changes or fixes are pushed to a staging environment, running the automated integration and regression tests. If these pass then we can have confidence the application can be deployed to production with a push of a button when the business is ready. A failure in the integration or regression tests would back out the code to a previous version sending a message to the relevant individuals of the failure.
The aim is to make deployments, of any flavour, predictable, routine affairs that can be performed on demand.
What are the benefits of Continuous Delivery?
Continuous Delivery helps high performing teams consistently deliver services faster, safer and better. This is true even in highly regulated domains such as financial services and government. This capability provides an incredible competitive advantage for organisations that are willing to invest the effort to pursue it.
The practices at the heart of continuous delivery help us achieve several important benefits:
Faster time to market. It’s not uncommon for the integration and test/fix phase of the traditional phased software delivery life cycle to consume weeks or even months. When teams work together to automate the build and deployment, environment provisioning, and regression testing processes, developers can incorporate integration and regression testing into their daily work and completely remove these phases. We also avoid the large amounts of re-work that plague the phased approach.
Safer. The primary goal of continuous delivery is to make software deployments painless, low-risk events that can be performed at any time, on demand. When developers have automated tools that discover regressions within minutes, teams are freed to focus their effort on user research and higher-level testing activities such as exploratory testing, usability testing, and performance and security testing. By building a deployment pipeline, these activities can be performed continuously throughout the delivery process, ensuring quality is built in to products and services from the beginning.
Continuous delivery makes releases less painful and reduces team burnout.
Better products. Continuous delivery makes it economical to work in small batches. This means we can get feedback from users throughout the delivery life-cycle based on working software. Furthermore, when we release more frequently, software delivery teams can engage more actively with users, learn which ideas work and which don’t, and see first-hand the outcomes of the work they have done. By removing the low-value painful activities associated with software delivery, they can focus on continuously delighting users.
Techniques such as A/B testing enable us to take a hypothesis-driven approach to product development whereby we can test ideas with users before building out whole features. This means we can avoid the 2/3 of features we build that deliver zero or negative value to our businesses.
Lower costs. Any successful software product or service will evolve significantly over the course of its lifetime. By investing in build, test, deployment and environment automation, we substantially reduce the cost of making and delivering incremental changes to software by eliminating many of the fixed costs associated with the release process.
How do you do continuous delivery?
By adopting this new approach – your business is able to avoid the countless painful and wasteful hand-offs in the release cycle:
A working group at Thoughtworks developed a number of characteristics that help organisations ensure they are correctly implementing continuous delivery. These characteristics include:
- Software is deployable throughout its lifecycle;
- The team prioritises keeping the software deployable over working on new features;
- Anybody can get fast, automated feedback on the production readiness of their systems any time somebody makes a change to them;
- The Team can perform push-button deployments of any version of the software to any environment on demand.
What will we cover in upcoming episodes of the continuous delivery journey?
In this series of the continuous delivery journey we will look into the following topics:
- The Agile delivery process that builds the disciplines to make this happen
- Automate the build and deployment process through DevOps integration
- Environment provisioning so that environments are scriptable
- The regression testing processes where we’ll look at automated integration and regression testing