Terminology Pollution in DevOps
As I write this post I am sitting in a café in Tel Aviv, enjoying a cup of cappuccino and reflecting upon the fact that in the last half hour I have heard people speaking in Russian, Amharic (from Ethiopia), Hebrew, and German. I am working remotely from the Middle East for a few weeks to attend two family weddings and a ceremony for my youngest son, David.
The ceremony was conducted entirely in Hebrew except for one very special moment when the same sentence was called out in many different languages, including Russian, Arabic, Amharic, and Yiddish, and my son was given the honor of standing up and calling out the sentence in English. The point of this part of the ceremony was to show both unity and diversity.
Communication is an amazing thing—but when it goes bad, confusion can wreak havoc.
Many folks are embracing DevOps best practices, which enable organizations to achieve business goals by providing fast and reliable application deployments. We are making great progress in spreading DevOps principles and practices, and each day I am learning of groups who are raising the bar for excellence in application build, package, and deployment.
But there is also a dark side in the way that some teams are using terms like continuous integration, delivery, and deployment in vague and confusing ways. If you were in court on a felony charge, would you want your attorney to play fast and loose with the words he used defending you before a federal judge and jury?
Terminology is important. I am seeing teams referring to continuous integration when they really just mean build automation. In practice, we use continuous integration to frequently merge changes from one or more developers because it is much easier to fix problems when you discover them right away, as opposed to a week after the developer made the change.
Continuous delivery and continuous deployment have been used interchangeably in many blog posts by DevOps thought leaders. Generally, continuous delivery refers to delivering a change to production but hiding it until it is the right time to show the user the new feature. Continuous deployment means that you actually deploy and expose the change to the user immediately.
Some folks refer to continuous delivery as meaning that your baseline is always kept in a state that is ready to deploy. Deploying code in smaller chunks helps avoid many common sources of errors. In a DevOps environment, you want to use the same approach to deploying to all environments, from development to production. Your focus should be on optimizing the deployment to the production environments so that we have completely reliable deployments as often as desired to deliver features that delight our customers.
Communication skills are a core competency in DevOps. Using terminology in a clear and consistent way is essential if you are going to effectively communicate and implement DevOps best practices.