What is Platform Engineering anyway?
Platform Engineering in general focuses on building and maintaining Internal Development Platforms (also called 'Digital Platforms') to streamline software development and deployment for developers. It's about creating self-service tools and environments that reduce cognitive load for Developers and improve their overall developer experience.
Not too long ago, the DevOps movement advocated for the motto "you build it, you run it", combining the previously separate areas of Development and Operations. It meant these fully autonomous DevOps teams were not only responsible for developing code, but also where and how it runs in production. They became owners of the entire process. As a consequence, you heard a lot about Developers having to become "T-shaped", meaning they had to develop skills beyond their Development specialty. They needed to know about Server Platforms their software needed to run on, how to build dashboards for monitoring their code in production, provision their own databases, and a whole lot of other responsibilities they didn't have before. Their technological landscape broadened dramatically.
All the while, all kinds of other concerns kept mounting as well. Not only the choices in variation of their own Tech Stacks kept increasing, the number of Legal, Compliance and Risk factors to keep into account became almost impossible to keep track of.
On top of all of that, all of these newly acquired DevOps tools and technologies kept evolving at a dramatic pace as well. This is what we refer to as the "Cognitive Load" developers have to deal with in their daily work.
To address this, organizations have been making the move towards Platform Thinking: take away the complexity that Developers these days have to deal with, by building a self-service product -a Platform- for internal Developers that abstracts away all of the underlying complexity, with built-in Compliance and Security - always up to date.
A very good definition of an Internal Development Platform comes from Evan Bottcher:
[...] a foundation of self-service APIs, tools, services, knowledge and support which are arranged as a compelling internal product. Autonomous delivery teams can make use of the platform to deliver product features at a higher pace, with reduced co-ordination.
- Evan Bottcher
It's good to emphasize that the goal is still to have autonomous teams. They still own the full process: to build and to run the product. A Platform just makes it easier to live up to all of the responsibilities, because developers don't need to know all of the intricacies of the underlying infrastructure, and whatever Platform Components or Services they consume, they can be sure it adheres to all Compliance and Risk measures the company needs.
In order to build a great Internal Development Platform, you meticulously analyse the bottlenecks your developers deal with. Typically, you'll find that Infrastructure is the first thing to address. You want your developers to be able to say 'provide me a machine to run my new application in' and not having to think about compute size, scaling, redundancy, how and where it fits into the network and how to protect access to it. As you build out your Platform, you'll discover more and more areas where friction can be removed, where you can improve the Developer Experience, or add new and innovative ways to speed up development.