Introduction

There are many different ways of structuring modern software delivery organisations. What pattern your particular organisation uses is probably influenced by whatever stage of life it is in.

The following groups are gross simplifications and are not intended to be exhaustive. They're here to add some flavour.

Organisation life cycles

Grossly simplified.

Startup

You have a small engineering group who do everything. They are not only coding the software that you want to deliver, but also looking after infrastructure, probably as code because it Just Makes Sense, continuous integration pipelines, continuous deployment pipelines. production service health, and everything else.

Scale up

You now have several groups of engineers. They may still be looking after all of the things mentioned for Startups, but focused on their own unique part(s) of the codebase.

You might start to see some challenges appearing at this point.

This is the stage where you might start to think about having teams that specialise in certain areas that can take on the burden of maintaining those things for everybody, and to reduce the cognitive load for developers.

Warning

Do not fall into the trap of building a team that will have the role that is some variant of "looking after things in Production". Service Reliability Engineering might work for you at some point, but it probably is not now. And it may never. In my experience the very best people, and the ones who care the most, about how software runs in Production are the people that make it.

Enterprise

Congratulations! You made it through the growing pains, have found many happy customers, and have organised subject matter experts into teams who are there to help other teams.

Whatever stage you are at, this page is all about the group of specialists often called the Platform Engineering Team. Or Cloud Engineering. Or something of that nature.

What is Platform Engineering?

I am going to use this definition from Wikipedia as I think it is a good summary.

Cite

Platform engineering is a software engineering discipline that focuses on building toolchains and self-service workflows for the use of developers. Platform engineering is about creating a shared platform for software engineers using computer code

Platform engineering uses multiple components to try to be reliable and scalable. These components can include configuration managementinfrastructure orchestration, and role-based access control, with deployment management specifically for continuous delivery or continuous deployment.

The discipline has been associated with DevOps and platform as a servicepractices.

My Platform Engineering Principles

Four things to be aware of here.

  1. This list will evolve over time.
  2. It will never be complete.
  3. You will probably disagree with some of these. Differences like whatever they are make the world go round, and keep us learning.
  4. This list is too long. Principles need to be easy to remember, and I need to whittle this down at some point to some core principles.