Best Practices for Continuous Delivery
Continuous delivery is one of those software development buzzwords that you may have heard before but aren’t really sure what it means to you. As with many buzzwords, however, behind the term is often a great idea that can produce massive...
Liquid Metal is Here: Supported, Multi-Cluster Kubernetes on micro-VMs and Bare Metal
Level up Security Management with HashiCorp Vault and Flux
You aren't Doing GitOps without Drift Detection
Continuous delivery is one of those software development buzzwords that you may have heard before but aren’t really sure what it means to you. As with many buzzwords, however, behind the term is often a great idea that can produce massive benefits for your business.
What Is Continuous Delivery?
Simply put, continuous delivery (CD) is an approach to software development in which the software is available to be released to production at any time. As such, CD prioritizes having a stable, functioning product at all times over building new features, and usually requires close coordination between team members and automation of various steps in the software delivery process.
Continuous delivery can be seen as a natural extension of the practice of continuous integration (CI), which requires software developers to frequently merge their changes with a larger shared code base. In the effort to find bugs and errors as soon as possible, CI/CD usually involves automated testing, such as unit tests and integration tests, to see if the new code is compatible with the code base.
Another software development practice, continuous deployment, takes the idea of continuous delivery even further. With continuous deployment, all changes are added to the software’s production version once they have passed the automated tests. With continuous delivery, however, the changes are available, but not automatically required, to be added to production.
Continuous delivery is often conflated or confused with DevOps, a term for a software development trend that emphasizes tight collaboration between software development and operations teams, and automating software delivery processes to speed up delivery of new features and bug fixes.
Pros and Cons of Continuous Delivery
There are a number of benefits to practicing continuous delivery and continuous integration that have boosted their popularity among businesses.
- For one, continuous delivery allows development teams to make improvements to either their release speed or their release quality. Developers can add new features, improvements and fixes faster, or they can release a more refined finished product with fewer bugs.
- Secondly, continuous delivery can simplify the software development process and the lives of your development team. By emphasizing polished features and bug-free code that is available for anyone to examine, developers require less oversight and fewer meetings. CD also encourages developers to tackle one task at a time and to fully complete and commit to their solution before moving forward, which helps them to better focus on their work. This means that the development life cycle is less stressed and intense on the whole.
- Finally, practicing continuous delivery can make companies more competitive because it improves teamwork and streamlines the development process. Developers can receive immediate feedback from automated testing and fast feedback from users, because the end product will be released more quickly. In an era when so many companies are relying on continuous delivery, not doing so can put you at a substantial disadvantage.
Perhaps the largest drawback to continuous delivery is that it is not easy to do. Implementing CD for your development team means that you must create and administer automated tests for your production environment, which is a significant startup cost. There is also a substantial learning curve involved that will require developers to adjust to a new way of thinking and perhaps be trained in new technologies and practices.
History of Continuous Delivery
Without continuous delivery, releasing production software can be a slow, laborious process that involves long, intensive tasks like regression and integration testing (to ensure that the updated software still functions correctly) and manual code examination. Instead of getting the product out to the broader user base as soon as possible, often a small set of human testers will go over it looking for bugs and usability issues. This further delays releases and usually fails to detect all of the software’s problems.
The rise of continuous delivery can be traced back to 2010, when the continuous delivery “bible” by Jez Humble and David Farley was first published, a classic work outlining the philosophy and concepts underpinning continuous delivery. Since then, major tech companies like Netflix and Google have discussed their positive experiences bringing CD into their software development pipeline. DevOps tools like Chef and Puppet have also released their own solutions aimed at organizations that wish to implement continuous delivery.
Best Practices for Continuous Delivery
Introducing continuous delivery into your organization requires careful thought and planning. The transition is rarely something that can be done overnight, and usually involves a number of intermediate and incremental steps in order to shift away from your current development methodology. For example, using continuous delivery to build a large, monolithic application can be a challenge, and may require you to break down the application into more easily manageable modules or microservices.
The CD pipeline involves a number of stages — including coding, commits, building, unit testing, integration and production — that must each be aligned with the CD ethos through various tools and technologies. It pushes you to look for ways to automate more manual processes and eliminate any bottlenecks that may arise throughout the production pipeline.