DevOps is one of the hot topics at the moment, and is well on its way up the hype cycle curve. Some are even saying it replaces Agile, thus spelling the end of Agile software development. That isn’t true, though if you’re interested in agile, you should start learning about DevOps. Why? Because although it doesn’t replace agile software development, it complements it very, very well. This article will explain the difference between agile and devops.
This is important: DevOps is not a tool or a product. I cannot emphasise this enough. Some vendors and snake oil salesmen will tell you that it is. They say “buy our complex deployment toolset and you can haz DEVOPS WOOO!”. Don’t listen to them and don’t believe them. You can’t tool your way out of shitty processes and bad ways of working.
DevOps is rather an attempt to rethink the value chain of software development, especially the end part of the chain (getting it out to customers), and how it fits into an organisation.
Traditionally in software development (whether Waterfall or even Agile), there were “development people” who built software. They would move software through some environments. Possibly via manual processes, or maybe via automated processes like build pipelines. Usually this involves moving software from a “dev” environment, to some kind of “test” environment, and then probably to some kind of “staging” environment. And that was all fine, but that was as far as they could go. Why? Because on the other side of staging was the legendary land of Production. It is the mysterious land where magic, opportunity, threats and risks abound. It is the part of the map with “Here Be Draggyns” written on it. And it’s a place where developers are not allowed to go.
Instead, they do a big “handover” to an Operations team. And the Operations team were responsible for doing a bunch of “deployment” activities to move the code from the Staging environment to the Production environment. This deployment was complicated, more so than all of the other deployments, because:
At this point, people stopped doing “software development” activities and instead did “software deployment” activities. And the people who did that were different to the people who had done the development activities.
So DevOps tries to fix all this. It says:
This is a major rethinking of the structure and roles in a software organisation. It basically says “you build it, you run it”. You are responsible for it working in dev, in test, in staging, AND IN PRODUCTION. And if you do all this properly, with not just automated tests like a good Agile kid, but also by turning your infrastructure into software by containerisation (is that a word? urgh unfortunately, I think it is), then doing this should be a simple process.
So what really is the difference between agile and devops? DevOps does not replace Agile or Lean. It complements Agile and Lean very well. It does this by killing waste, removing handovers, and streamlining deployments to allow faster and more continuous deployments to PRODUCTION. Many organisations do Agile, automated testing and continuous delivery but only push their pipelines as far as staging. Because the Operations people say “hey hey you can’t cross that line. That’s our territory: you stay in yours, and we look after ours”.
If you have an idea for a startup and you want to operationalise and scale it, you need to do three things:
Agile is about software development, devops is about software deployment and management. Then you also have product management, i.e. defining your product.
So we have three separate but related practices. And there are three good techniques for doing each of these things:
I hope this clarifies the difference between agile and DevOps: more specifically, how DevOps complements, but does not replace Agile.