In this previous post, I chronicled my evolving understanding of PaaS and how it has taught me the virtues of treating your Platform as an Application (PaaA). Here I documented what I believe a self-respecting platform application should do. In this post I’m going to describe how I’ve seen PaaA help solve the Dev and Ops “problem” in large organisations (“Traditional Enterprises” if you prefer).
DevOps is a highly used/abused term and here I’d like to define it as:
An organisational structure optimised for the fastest release of changes possible within a pre-defined level of acceptable risk associated with making changes. Or simply: the organisational structure that lets you release as fast as possible without losing control and messing up too badly.
This isn’t my first attempt at tackling DevOps teams, also see a blog here and an Ignite here. Of course lots of other good things have been written about it as well, e.g. here from Matt Skelton. I believe PaaA provides a good path.
So this is the traditional diagram for siloed Dev and Ops:
*Skull and crossbones denote issues which I won’t describe again here. If you aren’t familiar with the standard story, I suggest viewing this excellent video by RackSpace.
For any organisation with more than one major application component (aka Product), when we add these to the diagram above it starts looking something like this:
Each application component (or Product) e.g. the website (Site) or the Content Management System (CMS) is affected by both silos. Obviously traditionally the Development (Dev) silo write the code, whilst the Operations (Ops) silo use part-automated processes to release, host, operate, and do whatever necessary to keep the application in service. Whilst each “Business Application” exists in both silo, only the Ops team have the pleasure of implementing and supporting “the Platform” i.e. the infrastructure and middleware.
So if silos are bad, perhaps the solution is the following. One giant converged team:
The problem with this is scale. There is a high likelihood that attempting to adopt this in practice actually fails and sub teams quickly form within it to re-enforce the original silos.
So we can look to subdivide this and make smaller combined Development and Operations teams per application component or small group of them. If that works for you, then fantastic! This also is effectively the model you are already using when connecting your in-house application to any external or 3rd party web-services (for example Experian).
In my experience though, it is impractical and inappropriate to have so many different teams within one organisation each looking after their own Platform. Logically (as per the experience of public cloud) and physically (as per traditional data centres and private cloud) major elements of the platform are best to be shared e.g. for economies of scale, or perhaps for application performance.
So what about when you treat your Platform as an Application? Where could Dev and Ops reside?
The optimum solution in my experience is a follows:
The Platform Application (highlighted above by a glowing yellow halo) has a dedicated and independent, fully-combined Development and Operations team and it is treated just like any other Business Application.
Hang on a minute, haven’t I just re-branded what would traditionally be just know as the Operations team as a Platform Application team?
Well no. Firstly the traditional Development team usually has no Operations duties such as following their code all the way to production and then being on call to support it once it is in there. They may not feel accountable for instrumentation and monitoring and operability, perhaps not even performance. Now they must consider all of these and implement them within the constraints of the capabilities provided by the Platform Application upon which they depend. By default nothing will be provided for them, it is for them to consume from the Platform Application. So the Platform Application team are already alleviated of a lot of accountability compared to a traditional Operations team. So long as they can prove the Platform Application is available and meeting service levels, their pagers will not bother them.
Secondly, the platform team are no longer a quite so different from other end-to-end Business Application teams. They manage scope, they develop code, they manage dependencies, they measure quality, they can do Continuous Delivery and they must release they application just like anyone else. Sure their application is extremely critical in that everyone else (all the products using the platform instance) depends on them, but managing dependencies is very important between Business Applications as well, so isn’t a new problem.
The Platform Application delivery team (which we could also call the Platform Product team) hey have to constantly recognise that their application has to provide a consistent experience to consuming Business Applications. One great technique for this (borrowing from “normal” applications is Semantic Versioning (SemVer) where every change made has to be labelled to provide a meaningful depiction of the compatibility the new version relative to the previous. In Platform Application terms we can update the SemVer description as:
- MAJOR version when you expect consuming Business Applications to need changes e.g. you change the RDMS
- MINOR version when you don’t expect consuming Business Applications to break, but need full regression testing, e.g. configuration tuning or a security update
- PATCH version when you make backwards-compatible changes expected to have no or a very low change of external impact. For example if the IaaS API has a change which the Platform Application fully abstracts Business Applications from.
Hopefully it is becoming clear how the powerful and effective the mentality of treating your Platform as an Application (or Product) can be. Everything that has been invented to help deliver normal applications can be re-used and/or adapted for Platform Applications. The pattern is also extremely conducive to switching to a public PaaS, in fact, it is exactly how you operate when using on one.
Full disclosure: I run an organisation that develop and manage multiple different Platform Applications for different enterprises. I am most enthusiastic about this approach because I feel it reconciles a lot of the conventional wisdom around DevOps that I’ve heard about, with what I’ve seen first-hand to be extremely successful in my job working in “traditional Enterprises”.