What is the Difference Between Continuous Delivery and Continuous Deployment?
DevOps has changed the way we manage software development for the better. Software is released faster, code is more reliable, and new features can be released continuously. There are three practices at the core of DevOps: continuous integration, continuous delivery, and continuous deployment. These practices work together to deliver advanced software products and features to market, sometimes in a matter of minutes.
This infographic below from Amazon Web Services depicts the collaboration between the three practices:
Notice that continuous integration is at the front-end of the DevOps process between the Source Control and Build phases. Continuous delivery and Continuous deployment, on the other hand, appear to work in parallel, with the only difference at the point of deployment.
Are they the same thing? No. Do you need both of them? It depends. Let's dive in.
What is Continuous Integration?
Let's start from the beginning. Continuous integration is a practice where “developers regularly merge their code changes into a central repository, after which automated builds and tests are run."
Continuous integration eliminates isolated development. Traditionally, developers would work on a portion of code for extended periods and then merge their work into a central branch only after their part was completed. This segmented approach is time-consuming and often results in several bugs.
With continuous integration, developers submit their code changes to a central version control system such as Git. Automation tools allow them to run unit tests on new code changes to expose errors immediately. Instead of dealing with a mass of bugs after work is complete, developers can address errors as they appear, in smaller doses, allowing them to make adjustments and get new features to release faster.
Continuous integration is essential if you want to increase the reliability of your code as well as the agility and speed of your team.
What Is Continuous Delivery?
The next phase of the DevOps process is continuous delivery. Continuous delivery is a "software development practice where code changes are automatically prepared for a release to production." It expands upon continuous integration by deploying all code changes to a testing environment and/or a production environment after the build stage.
What Is The Difference Between Continuous Delivery and Continuous Deployment?
Where does Continuous Deployment fit into this cycle? Continuous Deployment is an extension of continuous delivery, where every change that passes the automated tests is deployed to production automatically. Ideally, continuous deployment should be the goal of software companies because it provides numerous advantages. However, there are always exceptions.
Should You Use Continuous Deployment or Continuous Delivery?
Everyone's favorite answer: It depends. There are many benefits to automating the last step in the DevOps cycle, but, there are also some situations that are not optimal for continuous deployment.
Reasons for Continuous Deployment (Automated Release):
No More “Release Days” Continuous Deployment eliminates the need for release days which can manifest as many features changes released at one time. Manual release days cause development to come to a halt as developers await approval for features to be released, defeating the continuous principle that drives good DevOps.
Separate Development from Slower Moving Departments Eliminating the "release day" separates the development team from other departments that operate at a different pace. For example, if developers need to wait for marketing to approve all features and prepare materials for every "release day," then developers will be constrained to their pace. This is especially painful when developers need to test, release, and gain feedback on a small feature quickly.
Decrease Time to Market Automating release decreases time to market, which means companies can get new features, updates, and versions to customers faster. Users don't have to wait months for a bug fix, and companies can gain a competitive advantage by releasing new features every week instead of every month.
Increase Agility Continuous deployment allows developers to put new features in front of users faster, which means they can receive feedback sooner and adapt their product to meet users needs. In conjunction with CI/CD, automating the last step allows development teams to be more agile than their competitors.
Reasons for Continuous Delivery (Manual Release):
Big Feature Changes Big changes that impact other features, products, or departments are an ideal scenario for a manual release. Significant changes require much coordination between teams to ensure that actions are aligned with goals. The impact of a big release could make or break your product so you'll want to ensure it gets done right, the first time.
Big Backend Changes Changes that require extensive reworking of backend systems should also be released manually. Even if the face of the product from a user's perspective, isn't changing, an error in the backend could be costly. Again, continuous delivery gives developers a chance to ensure their product is getting done right the first time.
Continuous Integration, Continuous Delivery, and Continuous Deployment are all designed to make software development faster and more reliable. When applying these core practices to your development process, make sure you consider the scope of the change when deciding whether to automate or release manually.
Sign up to receive updates and announcements from DynAgility.