It's tough to explain DevOps, that nebulous IT concept
DevOps is more about goals and aspirations than any set of practices or tools. Right? Or is it just about collaboration and culture? Either way, it's tough to define DevOps.
What is DevOps, really? By most conventional definitions, it's all about collaboration. Yet, there are a litany of "DevOps tools" that don't actually facilitate collaboration. To me, this suggests it's tough to explain DevOps. In fact, the definition of DevOps is ultimately very broad. Here's why.
Traditional DevOps definitions
DevOps has traditionally been defined as an approach to software delivery in which developers and IT admins collaborate constantly.
Atlassian defines DevOps as "a set of practices that automates the processes between software development and IT teams." For another example, consider New Relic, which explains DevOps as "a combination of software development and operations."
To be sure, some definitions of DevOps are a bit broader than these. In recent years, descriptions of DevOps have tended to mention the importance of collaboration between other groups, such as quality assurance and security engineers, rather than just development and IT ops.
Still, the core idea that virtually all definitions of DevOps share in common is that DevOps is characterized by collaboration between different teams within an organization. That collaboration ideally leads to faster software delivery, which is the goal (but not the definition) of DevOps.
Although definitions of DevOps focus on collaboration, most of the so-called "DevOps tools" aren't actually about collaboration.
Take Docker containers, for instance. Docker is a great tool for helping to deliver software faster, but it doesn't do much to improve collaboration. (I suppose containers do help developers and IT ops work somewhat better together by providing environment parity among development, staging and production, but that's about it.)
Other common types of DevOps tools, like infrastructure-as-code platforms, serverless computing services, monitoring and log analysis tools, and continuous integration servers, also do little to facilitate collaboration. They solve other types of problems.
Probably the only category of DevOps software that does improve collaboration is communication tools, like Slack and HipChat. These platforms represent only a fraction of the tools in the software stack of a typical DevOps shop, however.
Broader attempts to explain DevOps
My point is not that most DevOps tools are oversold or that they don't actually help you achieve the goals associated with DevOps. All of the tools discussed above do help you to deliver software faster and more efficiently.
But again, delivering software better is usually presented as a goal of DevOps, not the practice that defines it.
That's why I think that the way we practice DevOps is different than the way we officially define it. In practice, DevOps is not really about collaboration in particular as much as it is about finding ways to make software production and management faster and more efficient.
Better collaboration between different teams within an organization is one way to help achieve that efficiency. But it's only one of many means to that end.
So, if we want to be honest in our definitions of DevOps, we should define it more broadly. Definitions like Amazon Web Services' (AWS) are a good place to start. What is DevOps to AWS? It explains DevOps as "the combination of cultural philosophies, practices and tools that increases an organization's ability to deliver applications and services at high velocity."
I'd add that, to explain DevOps, one must think about increasing efficiency in software delivery, not just velocity. Otherwise, however, I think this type of definition describes what DevOps really is more accurately than traditional definitions do.