I recently read a great blog post by Scott Wilson that was talking about the definitions of Agile Operations, DevOps, and related terms. (Read the comments too, there’s some good discussion.) From what I’ve heard so far, there are a bunch of semi-related terms people are using around this whole “new thing of ours.”
The first is DevOps, which has two totally different frequently used definitions.
1. Developers and Ops working closely together – the “hugs and collaboration” definition
2. Operations folks uptaking development best practices and writing code for system automation
The second is Agile Operations, which also has different meanings.
1. Same as DevOps, whichever definition of that I’m using
2. Using agile principles to run operations – process techniques, like iterative development or even kanban/TPS kinds of process stuff. Often with a goal of “faster!”
3. Using automation – version control, automatic provisioning/control/monitoring. Sometimes called “Infrastructure Automation” or similar.
This leads to some confusion, as most of these specific elements can be implemented in isolation. For example, I think the discussion at OpsCamp about “Is DevOps an antipattern” was predicated on an assumption that DevOps meant only DevOps definition #2, “ops guys trying to be developers,” and made the discussion somewhat odd to people with other assumed definitions.
I have a proposed set of definitions. To explain it, let’s look at Agile Development and see how it’s defined.
- Agile Principles – like “business/users and developers working together.” These are the core values that inform agile, like collaboration, people over process, software over documentation, and responding to change over planning.
- Agile Methods – specific process types. Iterations, Lean, XP, Scrum. “As opposed to waterfall.”
- Agile Practices – techniques often found in conjunction with agile development, not linked to a given method flavor, like test driven development, continuous integration, etc.
I believe the different parts of Agile Operations that people are talking about map directly to these three levels.
- Agile Operations Principles includes things like dev/ops collaboration (DevOps definition 1 above); things like James Turnbull’s 4-part model seem to be spot on examples of trying to define this arena.
- Agile Operations Methods includes process you use to conduct operations – iterations, kanban, stuff you’d read in Visible Ops; Agile Operations definition #2 above.
- Agile Operations Practices includes specific techniques like automated build/provisioning, monitoring, anything you’d have a “toolchain” for. This contains DevOps definition #2 and Agile Operations definition #3 above.
I think it’s helpful to break them up along the same lines as agile development, however, because in the end some of those levels should merge once developers understand ops is part of system development too… There shouldn’t be a separate “user/dev collaboration” and “dev/ops collaboration,” in a properly mature model it should become a “user/dev/ops collaboration,” for example.
I think the dev2ops guys’ “People over Process over Tools” diagram mirrors this about exactly – the people being one of the important agile principles, process being a large part of the methods, and tools being used to empower the practices.
What I like about that diagram, and why I want to bring this all back to the Agile Manifesto discussion, is that the risk of having various sub-definitions increases the risk that people will implement the processes or tools without the principles in mind, which is definitely an antipattern. The Agile guys would tell you that iterations without collaboration is likely to not work out real well.
And it happens in agile development too – there are some teams here at my company that have adopted the methods and/or tools of agile but not its principles, and the results are suboptimal.
Therefore I propose that “Agile Operations” is an umbrella term for all these things, and we keep in mind the principles/methods/practices differentiation.
If we want to call the principles “devops” for short and some of the practices “infrastructure automation” for short I think that would be fine… Although dev/ops collaboration is ONE of the important principles – but probably not the entirety; and infrastructure automation is one of the important practices, but there are probably others.