Apparently what I do is now "DevOps"
This isn't a surprise to me, I've been at this for more than twenty years and there's always a new way to describe what I do. When I first started we were Systems Administration or Systems Engineering. In between I've been in Server Operations, Server Engineering, Infrastructure, Infrastructure Operations, Infrastructure Engineering, Technical Operations, Production Operations, Tooling and Automations, and probably a bunch of others that I'm forgetting. Notably, though, the job itself hasn't changed - it's fundamentally operational in that it centers around infrastructure and automations/tools to manage that infrastructure.
With the coining of the term "DevOps" and it's rise over the past few years, however, lines have blurred. This is not a bad thing, on the contrary it's a step in the right direction. The old model with sharp, or at least a lot less blurry, lines is not fatally flawed but it does make it very easy to develop animosity or rivalry between the different groups. Bringing development and operations closer together should increase efficiency, promote understanding of the complete process, and reduce this animosity. At least that should be the goal.
The problems arise from a lack of common understanding of what DevOps is. Ask any six people in the tech industry to define it and you'll get at least seven different definitions. As many different definitions as there are, they almost always fall into two basic categories:
- DevOps is operations with a focus on automations, think Infrastructure As Code.
- DevOps is operations focused on supporting development, like continuous integration pipelines, continuous deployment tools (CI/CD), etc.
I argue that both categories are wrong, and they're wrong because they are two different categories. Proper DevOps is in fact both of those, and more, at the same time. Unfortunately as the DevOps trend has progressed the definitions have not come together, instead things have started to go off the rails so now there's a new trend in the understanding of DevOps:
- DevOps is eliminating operations altogether by "empowering" development teams to manage every aspect of their product.
Hopefully the flaws in this idea are obvious to you. For further illustration, here are some of the arguments that are used to back up this assertion:
- Infrastructure is dead, everything is in the cloud.
- Engineers are very intelligent and they can learn operational skills as easily as they can learn new coding skills.
- Operations is the past, this new idea of DevOps is the future!
- Infrastructure-As-Code is code, so developers can do it all.
- All our instances are in a load-balanced cluster, why should I care if one of them is down as long as the service is available?
I did not make those up, they have all been said in front of me. Out loud.
A recent search for DevOps in LinkedIn's jobs list returned a truly disturbing number of results that follow this new trend. These listings are looking for a developer, pure and simple. Some barely mention operations, and some don't mention it at all.
So What Is DevOps?
I have a definition of DevOps too, of course. The difference is that mine is the right definition. I don't say that to be arrogant or intentionally provocative (OK, may a little intentionally provocative). I say that because mine is correct in that it effectively describes what DevOps is, and it is right in that it is concerned with everyone's success. DevOps is not a new job, it doesn't change what we do. Like I said at the very beginning, I've been doing all things that are now called DevOps for far longer than the term has existed. What has changed is how we do it. DevOps is fundamentally about the integration of Development teams and Operations teams to improve both. Instead of developers building an application and then handing it off to operations to support, both are involved at every stage. The development teams get the benefit of the systems and operational knowledge and can build their application knowing what the underlying infrastructure is going to be and that it will be well suited to support the needs of the application. The operations teams get the benefit of deeper knowledge of the application, it's requirements, and how it works. Because everyone is working closely together and invested in each others' success, the development teams get a high level of support for their efforts, with operations to deploy and maintain their internal systems for build, integration, testing, deployment, etc.. Operations teams get the benefit of developer knowledge in their efforts to build tools and automations, improving their product and skills as well.
DevOps is Operations. This is the fundamental fact that is getting lost, to everyone's detriment. Moving to the cloud does not eliminate infrastructure, the cloud is infrastructure. There are definite benefits to a cloud infrastructure - someone else is maintaining all the hardware for you, and there are APIs and automation tools out of the box. Infrastructure-as-code is awesome, but it too is infrastructure. Security, monitoring, configuration management, deployment, and the rest are all infrastructure and operations based. All of these need strong operations knowledge and skills to manage efficiently and effectively.