Intro
We hear these terms flying around, DevOps, SRE, Platform, etc. But what is it all about? How did they come to be? How can we use them?
Note
You already know this but the topics below are relevant only after software teams reach a certain scale. If it's only one or two of you starting from scratch, don't waste time on these topics and use the fastest and most pragmatic way to get your product out of the door.
History
Development & Operations
Once upon a time in a galaxy far, far away, there was a civilization divided into two classes - development and operations. They were supposed to work on a common goal but somewhere along the way they got isolated from each other and tensions grew. Operations did not know how to troubleshoot issues with the instructions given by development and development was not aware of the challenges operations faced. Eventually, progress came to a halt and this civilization collapsed.
DevOps
Learning from the problems previous civilizations faced, a new civilization emerged - DevOps. They understood that if they want to be successful, the different trades will need to work together and cover the whole process, from idea to delivering the value to society. Instead of development and operations being separated, the DevOps civilization was structured into smaller independent groups with members from both trades, development and operations. This civilization was quite successful and continues to exist.
Site Reliability Engineering
After some time of development and operations working closely together, a new trade emerged - the site reliability engineer. This started when someone asked a simple question - "What if we treat operations as a development i.e. a software problem?". Soon we had members of society that were good at both, development and operations. These members were tasked with taking care of the critical parts of the infrastructure and services since they had good command and understanding of all the parts.
Platform Engineering
If you are a software engineer, you know that we love to build abstractions. Well, after operations and development were merged together into one, we started seeing abstractions being created everywhere. Over time, the good abstractions crystalized at the top. The DevOps and SRE teams started using those abstractions so they could move faster instead of reinventing the wheel over and over again. A new trade emerged - the platform engineer. Software engineers building products for other software engineers.
What Is A Platform?
So platform engineering teams build products for software engineering teams but what are those products? What products make up the platform? Well, you have to ask your customers these questions. But what it's usually about is the following:
- a place to run applications,
- a way to deploy applications,
- a way to deploy supporting infrastructure
- a way to monitor applications,
- a way to develop and spin up test environments,
- supporting CLI tools, API's and UI's where appropriate
Aren't we already doing this?
Yes, we are, but as you might have seen and experienced, building and maintaining these things can be somewhat complex and time consuming. If possible, I, as an engineer working on a product for the end customer, would love to spend more time on that product instead of building and maintaining the supporting platform.
Well, what if we applied software engineering principles to this problem? Welcome to the problem space of platform engineers.
Platform engineers apply software engineering principles like reusability, modularization, simplicity, security, resilience, etc. combined with product design principles in order to deliver easy to use products and services that other engineers can use to deliver value to end customers faster, easier and safer.
Is Platform Engineering A New Thing?
Other than the terminology itself, I don't think there there is much new here. I think it heavily depends on the scale of the organization. Amazon, Google, Facebook, etc. had internal teams building products for other internal teams for a long time. What is new is that the idea is going mainstream.
Note
I won't talk about it in this article, but a strong feedback and collaboration loop between product builders and customers is assumed. Otherwise the product will probably fail.
Conclusion
Is platform engineering really a thing? I think it is. Staying competitive in the market is getting ever more difficult and complex. Software development, DevOps, site reliability engineering and now, platform engineering are all adjustments triggered by us trying to deal with the complexity, stay competitive and deliver value to customers faster.
Is platform engineering a good thing? Yes, but only if the platform products stay focused on the customer, remove obstacles, make them move faster, etc.