Some thoughts on DevOps
Posted at 09:00 on 16 July 2018
It's now six weeks since I started at my new job, and I'm really enjoying it. Returning to .NET has felt like a homecoming in many ways. Even though I've been quite critical of some of the things that go on in the Microsoft ecosystem at times, it's what has paid the bills for most of the past sixteen years, it's a platform that I enjoy working with, and I'd built up quite a lot of experience and expertise in it in that time.
My two year hiatus from .NET was spent mostly in the world of DevOps and cloud computing with AWS. While I gained some valuable experience with it, I never really settled down in it. In particular, I was especially unhappy about being pigeonholed as a "WebOps engineer" on what our delivery manager insisted was "an Ops team." I'm a developer, not an Ops guy, and besides, that kind of thinking completely flies in the face of what DevOps is supposed to be all about.
If you're calling your team an "Ops team," you're not doing DevOps.
There's a very good reason why DevOps is called DevOps and not OpsDev or Ops. It is Development first and Ops second. Or, if you want to put it a different way, it is about the Development of a software product to automate your Ops. Jez Humble, who wrote the book on Continuous Delivery, tells us that there's no such thing as a DevOps team for a good reason. In the DevOps world, Ops is a software product, not a team.
This being the case, while you may need experienced Ops specialists to give you direction on what needs to be built, you also need experienced developers to build it. They need to have a thorough grounding in concepts such as design patterns, the SOLID principles, dependency injection, separation of concerns, test-driven development, algorithmic complexity, refactoring, and the like. You need to recruit, promote, plan, prioritise, and provide training accordingly. Otherwise you'll either limit what you're able to achieve, or else you'll end up with unmaintainable code that needs to be rewritten. And when you're dealing with infrastructure as code, a rewrite is far, far harder than when you're dealing with business logic.
In any case, DevOps needs to be the responsibility of your development team as a whole. The whole point of DevOps is to break down the silos between Development and Ops, and to have a separate DevOps team (or worse, a separate Ops team) just creates another silo that you could be doing without.