Confused Between DevOps, Continuous Delivery and Continuous Deployment? Let’s Break It Down
DevOps best practices > continuous delivery of high-quality software > Continuous deployment of incremental versions.
You may have heard the terms – Continuous Delivery, Continuous Deployment and DevOps being used interchangeably or may have mistaken one for the other sometimes.
All of these are entirely different yet related concepts, they intersect in the pursuit of a common goal. If you are looking for a simple equation to portray this relation, here it is:
DevOps best practices > continuous delivery of high-quality software > Continuous deployment of incremental versions
Let’s break it down with an example.
Imagine you go to a fancy restaurant and order the best and most expensive, well-done dish. Your entire focus is on enjoying your meal as soon as it arrives at your table.
Let’s understand your end goal here: A good well-prepared meal and timely service.
- So, are you worried about the qualifications and skill sets of the chefs working in the kitchen?
- Are you interested in knowing if the chefs get along and collaborate to work as a team?
- Are you focused on the ingredients they use to prepare your meal?
Maybe, but not really!
What’s important to you is that you get served a meal that provides you with satisfaction and value for money.
Of course, superior quality ingredients, high-end chefs working as a team, following best cooking practices, etc. are essential, but your subconscious expects that all of these would be true. In fact, these must be true for a restaurant to earn good reputation over time.
As a consumer, your goal is good food served quickly. So, you leave the cooking and other details for the chefs to figure out. You give them feedback with your money and by recommending the eatery to others. If your end goal, i.e., the meals and service, was satiated, you become a loyal customer, or else you take your money to that other restaurant two blocks away.
So what’s the inference we can draw here?
DevOps best practices are the ingredients to the success of a software development recipe. However, clients are interested only in the meal i.e., the two end goals:
- Better quality software
- Software delivered quickly and frequently
Therefore, your client does not care whether you employ the best practices of DevOps. The client is more interested in how quick your release cycles are and how your delivery pipeline looks like.
The DevOps journey: From requirements to deployment
DevOps is a journey and as the organization takes this journey, there are several outcomes that come out of them adopting DevOps. Let’s talk a bit about these outcomes to understand what exactly the DevOps journey entails:
1. Better requirements and Agile
In the Waterfall methodology, the journey from requirements to a single developed functionality could take over two months before proceeding to the testing phase. But the Agile methodology helps shorten the development time to two weeks. In Agile, we try to deliver small incremental and manageable changes, which allow us to be dynamic while fulfilling business requirements.
This makes Agile the better way of requirement management, moving away from outdated waterfall methodologies.
2. Reviews and pull requests
Reviews and pull requests are related outcomes. Mandatory reviews are done at the end of each pull request to ensure the quality of the software product that comes out.
3. Continuous integration
Every time a code is committed after the pull request, there is an automated build that is triggered. The code undergoes a few static code and security scans to make sure static code and security issues are highlighted at the time of compiling the code itself. These gates across the development journey help prevent incorrect coding practices and subsequent security bugs. Automation and tooling integration aid in achieving continuous integration.
Integration tests evaluate the system as a whole and make sure that a single application module does not impact other modules adversely.
4. Regression, QA and continuous testing
The next environment is quality assurance. Regression tests are executed to make sure that whatever changes were introduced to the product do not break the functionality that was already working in the product.
Continuous testing is also part of the DevOps journey, because we are automating the tests and having the pipeline trigger all these automated tests. After ensuring basic functionality, we perform regression, security, performance, load and integration tests.
5. Staging and Production
Here, the configuration of the code is validated, eventually allowing the code to go to production. This movement of binaries from one environment to the other and how they trigger different tests to protect the code from defects, entails a major part of the DevOps journey.
6. Continuous delivery and deployment
Continuous deployment and continuous delivery are related concepts, with delivery preceding deployment. The main difference is that delivery includes manual approvals before every release and deployments are automated.
Continuous deployment happens when the code checked in and qualified by the developer automatically gets promoted to production after all the automated release criteria pass successfully. A certain level of post validation is done after deployment to production and if the validation fails, auto rollback is performed to any avoid production outage.
7. Continuous monitoring and improvement
In continuous monitoring, each environment is monitored. Continuous monitoring is very critical to create self-healing environments. For example, when you are in the cloud, your CPU increases automatically, and new servers are added so that your capacity goes up and down depending on your demand.
How do large organizations leverage continuous deployment?
Unicorns like Google, Amazon and Netflix are all in the continuous deployment space. This is because they are doing hundreds of deployments every day into their production environment. And the way they can do it without any outage to the production systems is because of all the automation that they’ve introduced. In other words, they can fail fast in an automated fashion when issues occur.
To understand better, let’s go back to the restaurant example. The meal served to you is delivery and you enjoying it and being satiated with it is deployment. DevOps is the supply chain, the ingredients, the kitchen, the chefs, the waiters, the customer reviews and the interactions between them. Which makes DevOps, absolutely essential to support continuous delivery.
In other words, DevOps, Continuous delivery and continuous deployment are all allies to a common cause. Each tries to achieve the same outcome – Faster delivery with quality and predictability.
Summing it up
When we work with DevOps practicing teams to help them adopt continuous delivery, our advice is consistent – measure what you are doing now, in terms of how long it takes to go from idea to useful software in the hands of your users. Apply a more scientifically rational approach to decision making and use it to reduce that cycle time you’ve identified.
DevOps enabled continuous delivery leads to continuous business assurance. And, that it is the goal worth chasing.