I get it. Keeping up with the lexicon of software engineering is often overwhelming. So many new terms, expressions, and initialisms! So little time to spend on Reddit or Hacker News to learn about them all! This post is our way of helping you out by clarifying one such term: platform engineering.
For the last 20 years, we've been living through a very clear trend in software engineering. One is that organizations are relying on automation more and more. There's no other way to be fast to market while keeping the quality of output as high as customers expect. Also, traditional lines between roles are becoming thinner and thinner.
We can consider the platform engineering role the most recent development in this trend. Since it's a relatively new title, people still have many questions about it. What is it? Why does it matter? Isn't it the same as a site reliability engineering role? This post will answer these questions and more. We'll start with some fundamentals: we'll define platform engineering, explain why it's important, and discuss its responsibilities. Then, we'll compare it with other approaches. Before wrapping up, we'll share some final thoughts on the state of software in 2021 and the role automation plays in it.
Let's get started.
What Is Platform Engineering?
Platform engineering is a process organizations can use to leverage their cloud platform as efficiently as possible so that engineers can deliver value to production quickly and reliably.
In other words, we can say the platform engineering team serves the organization by planning, designing, and managing its cloud platforms. Such platforms can then be leveraged by software engineers and other IT professionals in the organization, allowing them to deploy and operate software in production in a safe, efficient, and reliable way.
In many organizations, software engineers struggle with several manual procedures to get their code to production.
This includes manually creating and configuring repositories, managing infrastructure components, and even creating and managing CI/CD pipelines, from unit testing to production. Needless to say, such procedures are often prone to error, which slows down the path to production.
It's also common for many of those procedures to not be properly—or at all—documented, living entirely in the heads of key employees. That makes for terrible communication as the organization grows, besides contributing to an awful bus factor.
Platform engineering reduces those costs, removing the obstacles that slow developers down.
Why Is Platform Engineering Important?
To understand why platform engineering matters, let's take a step back to understand the types of challenges a tech organization faces when it comes to software deployment and operation.
In a nutshell, older, more established organizations are starting to realize the immense potential benefits of cloud computing. But in order to leverage those benefits, they need the necessary expertise with the cloud, infrastructure as code, containers and container orchestration, and more.
So, many of these organizations are starting to create platform engineering teams. The main responsibility of such teams is to ensure rapid delivery of software to production. Through the platforms they design and maintain, platform engineers ensure the software development process is as efficient, stable, and consistent as it can be.
But, in practice, what do these teams do?
What Does a Platform Engineering Team Do?
Another great name for platform engineering teams would be "developer enablers" or “enablement teams.” In a nutshell, they create and maintain a set of tools and workflows to allow engineers to ship code to production in an efficient and reliable manner.
We could also say that platform engineering teams work as an abstraction layer between the engineers and the IT infrastructure. That way, developers can mostly ignore the inner workings of the infrastructure and focus on writing and shipping valuable features.
In more practical terms, platform engineers use automation to put their knowledge and expertise at the organization's disposal. This typically takes the form of APIs or web portals.
Through the platforms they design and maintain, platform engineers ensure the software development process is as efficient, stable, and consistent as it can be.
Platform Engineering: Differences and Similarities
We'll now explore the differences and similarities between platform engineering and other processes.
Platform Engineering vs. SRE
What are the differences between platform engineering and SRE (site reliability engineering)? The two concepts are related, and there is certainly some overlap. But at the end of the day, they refer to different things.
Site reliability engineering—a concept that originated at Google—is almost like the fusion of software engineering and operations. It results in applying software engineering principles to building and maintaining system infrastructures. SRE professionals ensure systems run smoothly, efficiently, and with high performance.
Platform engineering, as you've just seen, is all about enabling developers to ship code quicker by creating and maintaining automation platforms that can be leveraged consistently throughout the organization. We could sum it up by saying SRE is a "lower-level" or foundational process, while platform engineering is a higher-level process that provides a kind of service for the development team.
Platform Engineering vs. DevOps
The situation is similar when it comes to platform engineering vs. DevOps. While they're related concepts, and there's some degree of overlap, they're still different concepts.
For starters, DevOps is older than platform engineering. The DevOps movement brought a change in culture, demolishing the silos that used to exist between development and operations.
However, DevOps still tends to require "interaction" between the DevOps team and the engineering team. As you've seen, platform engineering is about provisioning a self-service platform that engineers can use without explicit coordination.
Platform Engineering: Enabling Fast Development in the Cloud
Modern software development is complex. The cultural shift that started at the change of the century—courtesy of agile—coupled with significant technological breakthroughs ushered a new era for software engineering. The rise of CI/CD, pipeline automation, DevOps, containerization, and distributed services—to name just a few concepts—means that there is simply more stuff one must be concerned with while being a tech professional in 2021.
On the other hand, all this complexity brought us a lot of nice things. For starters, having a fully automated pipeline that has test automation as a foundation means that you can deliver value to your customer at a quicker pace while keeping quality high. Also, the fact that lines between roles have been blurred is a great sign. No more conflict of interest between developers and testers, or developers and ops people. We're all on the same boat now.
By leveraging Infrastructure as Code and other techniques and tools, platform engineers can reduce the toil of software development, allowing engineers to get their code to production quicker than ever before.
Platform engineering can be considered the new kid on the block when it comes to modern software development concepts. As you've seen, platform engineers can act as a shield between developers and the infrastructure. By leveraging Infrastructure as Code and other techniques and tools, platform engineers can reduce the toil of software development, allowing engineers to get their code to production quicker than ever before.
Keep in mind that, since platform engineering is a relatively new term, there's still some leeway when it comes to its definition. The industry is still figuring out what platform engineering really means. One thing is for sure: the role that automation plays in the software development process will only become more important and prominent. There's simply no way to remain competitive in this industry without leveraging all the tools at your disposal to have a software delivery pipeline that is as efficient and quick as it can possibly be.
This post was written by Carlos Schults. Carlos is a consultant and software engineer with experience in desktop, web, and mobile development. Though his primary language is C#, he has experience with a number of languages and platforms. His main interests include automated testing, version control, and code quality.