In this post, we look at the four different phases of maturity in DevOps, from waterfall, through to continuous deployment.
Over the past few years, there has been a real focus on maturity in DevOps. Usually this manifests in the form of assessments to gauge where you are, almost like a benchmark exercise.
I'm a big fan of this approach, it's important to know how you are doing, where you started and what trajectory you are on. However, my one caveat to that is that if you are not careful you can have an over assessment style approach to DevOps. That is not ideal.
You should focus on the improvement opportunities that come with maturity in DevOps over simply the notion of tracking maturity, in my opinion this is where you can loose sight of what is important.
Loosly speaking, I believe you can put the phases of maturity into four categories, these are:
- Continuous integration
- Continuous delivery
- Continuous deployment
Let's take a look at these four areas in more detail.
From a software development perspective, over time, development teams will write code. Those teams merge their code to form a release. So many changes have happened over that period of time, that the actual integration could take months, because the code now looks so different to when it did at the previous release.
Continuous integration (CI) is the practice of quickly integrating newly developed code with the main body of code to be released. This saves time when the team is ready to release. The process is usually automated and produces a build artefact.
The act of CI essentially means taking the steps you usually do you produce your executable or your deployable application and automating them. The more mature you become the more you automate.
While you may just start automating some basic steps such as retrieving code from a repository, restoring your shared packages, then compiling the code. You can eventually end up with workflows which perform testing on the code, validate code for compliance and test coverage. You can even include security scans to ensure your built product is validated as secure before it goes anywhere near an environment.
Continuous delivery (CD) is an extension of CI and sits on top of it. When executing CD, you add additional automation and tests so that you don’t just merge code, you get the code ready to deploy with almost no human intervention.
Where CI is the act of automating your build steps, CD is the next natural extension of this and takes the built executable and deploys it to your execution environment.
With increased maturity, this can go from basic deployments of your code to further security tests, compliance checks and even integration testing of your application.
Continuous deployment, is the most advanced state of evolution. It is the practice of deploying all the way into production without any human intervention.
Continuous deployment fundamentally describes the method of committing code to a repository and then automating taking over, producing a build and deploying that build to the correct environment.
In the next post, we will be looking at the role communication plays in DevOps.