It’s hard to be in the IT industry today and not hear about DevOps. People love to talk about it, but it has become a sort of buzzword. Not everyone knows exactly what it is. Most people seem to have a sense that it is a good thing and that we all should be doing it, but comparatively few organizations seem to be doing it well. To add to this confusing mixture, DevOps is associated with a lot of other terms that have achieved their own buzzword status, including a host of tools with short and memorable but ultimately non-descriptive names. Conversations about DevOps can quickly become filled with terms like continuous delivery, Ansible, infrastructure as code, Kubernetes, Platform as a Service, Jenkins, Docker, Salt; the list seems almost infinite.
In this post, I don’t want to focus on defining DevOps; that has already been written about plenty of times. I’ll talk about the definition of DevOps because it is essential to what I do want to discuss, but the question I really want to focus on is this: How can I navigate the world of DevOps when there are so many concepts and tools and terms? If you do any cursory googling, you will find plenty of valuable material walking you through how to use certain tools and practices to solve certain problems. What I want to do here is provide a framework of understanding into which you can fit all of this in an organized way. I want to help you navigate this complex and wonderful world because as complex as the world of DevOps is, it is indeed wonderful. It has fueled the last decade of innovation in the IT industry, and it’s still going. The world needs more people understanding and doing DevOps, and I hope you’ll be one of them.
What I’m writing about here is essentially the underlying philosophy which I used to build the new DevOps Essentials course at Linux Academy. If you are interested in a deeper (but still relatively brief) dive into this topic than what a simple blog post can offer, I hope that you will have a look at the course!
DevOps is a Culture (of Course)
I said I would talk briefly about the definition of DevOps, so here it is: DevOps is a culture, specifically a culture of collaboration between development and operations. Most people who write about DevOps agree on this. People often get confused and think that DevOps is a certain set of tools or practices, but they’re wrong. DevOps is the culture behind those tools and practices. It is the culture that produced them. When we’re navigating the world of DevOps, this idea of DevOps culture can serve as our North Star. It is the fixed point that everything else exists in relation to. The tools and practices will change. They certainly have changed in the past, but as long as DevOps is a thing, DevOps culture will be at the center.
Closely related to the culture of DevOps are the practices associated with it. These are things that we do because they make sense within the context of DevOps culture, and they include things like continuous integration, infrastructure-as-code, and monitoring. If DevOps is a culture of collaboration between Dev and Ops, you can think of these practices as the result of developers and operations engineers sitting down at a table together and saying “How can we solve problems and meet goals?” Importantly, those problems and goals are problems and goals shared by Dev and Ops. The fundamental insight of DevOps culture is that when Dev and Ops only care about their own, separate goals, their goals end up being in opposition to one another and nobody succeeds (at least not anywhere near as well as they could succeed). In a DevOps culture, Dev and Ops see themselves as one team, and the whole team owns all of the problems and goals that would otherwise have been separated between Dev and Ops. The team cares about deploying new features quickly. The team cares about stability.
When the team sits down and works to find ways to solve problems and meet goals, DevOps practices are the result. Practices, like orchestration, for example, exist to create resiliency without compromising the ability to make changes quickly. If there weren’t teams that could sit down and prioritize both speed and stability, Ops teams would be maintaining stability for content simply by slowing down Dev’s ability to make changes, and Dev teams would try and push through their content changes as quickly as possible and let Ops worry about stability. Orchestration may never have become a widely used practice if it weren’t for DevOps culture. The powerful array of orchestration tools like Kubernetes and Terraform that exist today probably wouldn’t exist.
So, DevOps practices are created by DevOps culture, but what about tools? Well, most of the practices associated with DevOps are not practical without specialized tools. You can’t just sit down at your desk and “do” continuous integration, for example. It would be too much work! This is why DevOps is so heavily focused on automation, but this is usually automation of fairly complex tasks. This is where tools come in. If DevOps practices came out of Dev and Ops sitting down at the table and asking “How do we solve problems and meet goals?”, then the next logical question is “How do we implement these practices and… you know… actually do this stuff?” Because DevOps culture prioritizes actually doing DevOps practices, IT people have poured a lot of time (and sometimes money) over the past decade into developing tools designed to support these practices. As if that wasn’t good enough, many of these tools are even free and open source. Engineers today can benefit from the hard work of those that have gone before us, and it is easier than ever before to implement DevOps practices in ways which provide real benefit.
A great question to ask when you run across an unfamiliar term associated with DevOps is this: “Is this thing a practice, or it is a tool?” If it is a practice, a great way to understand it is to ask “What problems is this practice intended to solve?” If it’s a tool, ask “What practice is this tool designed to help me implement?” This will go a long way toward helping you to navigate the world of often confusing terms and ideas that are associated with DevOps. DevOps remains an exciting and vibrant part of the IT industry today. It is still growing and developing. I hope that you will join me at the table of DevOps culture. The world needs your ideas!