Automated Production Deployments are Not the Key to DevOps Performance

There’s a myth about DevOps which is hard to shake free of: that “success” means fully automating your deployments from code check-in to production.

This is not at all the case.

Automated deployment itself is not difficult – even for databases

We’ve had the ability to automate the delivery of code to applications and databases for the entirety of my 20+ years in technology. The mission of one of the very first tech teams I was on was to “automate ourselves out of a job.”

The difficulty here is quality. While removing manual work from the process of deployments is not hard, if the result is very quickly deploying low quality code to production which impacts our customers, we are immediately forced to stop and fix the problem. This is particularly a risk for databases because there is often no simple way to undo a change quickly without risk of data loss, incorrect data, or performance problems.

In other words, the problem is not simply “how do we remove manual steps in delivery to production,” but rather, “how do we reduce the pain in delivering changes to production?”

For many systems, notably databases, the pain in delivering changes to production is not the time it takes to perform deployment actions, but rather the risk and time it takes to handle defects introduced by deployments.

Research: what automation is used by the highest DevOps performers?

The 2019 Accelerate State of DevOps Report from Google (previously DORA) is full of interesting research on DevOps performance. Here is one excerpt which I find particularly illustrative:

 

We know from other parts of the report that the “Elite” performers group has the ability to deploy very frequently, has a very short lead time for changes, is able to restore service very quickly when things go wrong, and has very low change failure rates.

Yet only 69% of this group reports having fully automated their production deployments. Instead, they have invested heavily in automation for:

  • Validating code in multiple ways
  • Creating and deploying to non-production environments

These types of automation are part of processes by which teams are ensuring quality and reliability for their deployments, thereby lowering the risk and reducing the pain of production deployments.

What are the keys to DevOps performance, especially for databases?

Databases are an interesting case when it comes to DevOps. We find in our research at Redgate that databases still lag far behind applications in terms of modern coding practices: in our 2020 State of Database DevOps Report, we found that from our pool of more than 2,000 respondents:

  • Only 56% use version control for database code
  • Only 27% use automated builds for database code
  • Only 21% use automated database provisioning for non-production environments

This suggests that we have quite a lot of work to do in key practices which help ensure quality for database changes.

The key to DevOps performance is not simply technology, however. It is more than that:

DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.

Donovan Brown, “What is DevOps?”

The key to DevOps is to focus on the word, “value”, and to drive the changes for our people, process, and tools around that goal of increasing the value we continuously deliver to customers.

Tools in this post