2016-09-26

DevOps? Let me tell you a story.

(This is a slight edit of a comment I made on Reddit.)

In the beginning, there was no ops, only Dev. Developers were responsible for everything, from building the hardware -- sometimes literally -- through programming the system, through making sure it kept running in production.

Now there are two problems with this state of affairs. Firstly, the more things you have in production, the less time you have for solving interesting new problems. This is exasperated by the second problem: keeping existing systems running is boring. Developers don't like boring. So keeping things running started to bog down the process of making new things.

At this point, a new position was created, that of the Operator. The Operator relieved the Developer of the tedious, boring business of keeping things going. This meant the Developer could go back to the fun of developing.

The Ops people start coming to grips with their responsibilities and start worrying about standardisation, reproducibility, predictability, processes and the like.

Now a curious thing happens when you separate a developer from the consequences of their choices -- they stop caring about them. So suddenly dev is "releasing" stuff that isn't fully baked, trying to dump the responsibility for running this crap on the ops. This leads to the well known trope of "works in dev, production's problem now". QA was invented somewhere around here in an effort to make sure that what dev was throwing over the wall wasn't total crap, but we all know how well that actually works.

So now you have two impediments between a dev and production. You have to get your stuff passed by QA, who are inevitably sticklers for stuff that isn't -- in your opinion -- really that important, and then you have to jump through the hoops that the Ops people put in your way, causing delays while hardware is orderd, built, and provisioned, all the time complaining that the standard Ops environment is ancient and not up to date with the cutting edge tools you are using to build this stuff.

So what did Dev do? They solved the first problem with "Agile". Now a dev is responsible for his own QA, with unit tests and pair programming and user stories. So a dev can say when things are done.

And "DevOps" is about solving the other problem -- instead of having an Ops group, now the developer is responsible for production as well. It is full circle back to the beginning, when Dev did everything.

And already it is breaking. Now instead of DevOps, people are talking about "serverless", where the entire production platform is an outsourced service -- which is just the latest attempt by Dev to avoid both the hindrance of Ops and the consequences of their own decisions.

Now you may be saying, "but it sound stupid when you say it that way." To that I say: A) OK, say it so it doesn't sound stupid, and B) the reason for this is the very nature of development.

By that I mean the vast majority of software developers are self-taught. Most of what they know is stuff they learned banging on their own projects. The corollary of this is that they generally don't accept anything they have not learned themselves. And since most of them are teenagers or early-20's kids, they have not learned anything about large systems and systems with long life spans. So they think nothing of choosing the latest hotness for a development language instead of something more mature -- because re-inventing wheels is more fun than fixing existing ones. These kids land in the real world thinking that there isn't any problem they can't fix with open source and a weekend of hard work. So of course anything that gets in their way is bad.

Ten years later they've learned otherwise, but at that point most of them are out of the business, and those who are left are having their lunch eaten by the next generation of new-hotness-weilding, lessons-from-the-past-ignoring, wheel-reinventing 18 year olds.

And the cycle continues.

TL/DR: DevOps is the latest attempt by developers to hide from both reality and the consequences of their own choices.

Edit: just to give some perspective, I'm a 20-year sysadmin, so I've seen this cycle happen twice.