Platform Engineering: A DevOps evolution, not a replacement
Platform Engineering is not the DevOps killer. Here's what it is, its role in modern software development, and its relationship with DevOps.
Apr 18, 2023 • 3 Minute Read
Platform engineering is a hot topic in modern software development and delivery, with some claiming it is the replacement for DevOps, or even declaring"DevOps is dead." But amidst the hype, it’s important to understand platform engineering is, in fact, an evolution of infrastructure delivery, not a replacement, built upon core philosophies that underpin DevOps.
In this article, we're going to take a closer look at platform engineering. We'll explore what it actually is, and break down some of its most common components. By the end, you'll see why platform engineering is simply the next progression in delivering modern application infrastructure.
What is platform engineering?
First, let’s talk about a common scenario in modern software engineering. Many teams design, deploy, and manage their own application infrastructure, usually with the help of one of the major cloud providers so there’s ample documentation and tooling, and knowledge transfer to newbies isn’t painful. It sounds like the perfect example of DevOps – developers and operations blended together, right? Happiness and rainbows.
Unfortunately, this approach has its issues. Developers are suddenly lumped with additional responsibilities like operations, infrastructure, and security. Enter bugs and technical debt!
While it’s good for developers to know about these domains, the primary job of a software engineer is to engineer software. Getting bogged down in infrastructure management slows down the delivery of new features, and this is very much not in line with the DevOps philosophy.
Enter platform engineering! This approach introduces a central team that manages a shared infrastructure for all development teams. By doing so, developers can focus on their primary tasks, such as feature work, without worrying about the hassle of infrastructure management. The platform team takes care of any operational and security concerns, making sure the infrastructure is secure, available, and scalable, while software engineers focus on their applications.
It’s a win-win scenario that ensures faster delivery of new features and better overall software quality.
What are the components of platform engineering?
1. Automation and Infrastructure as Code (IaC)
When it comes to managing infrastructure at scale, Infrastructure as Code (IaC) is crucial for platform engineering teams. In fact, at the scale demanded by most internet-facing applications, IaC is practically a “must-have”. Sure, manually provisioning resources via console works if you’re testing a few compute nodes, but it’s just not going to cut it when you need to scale up or down thousands of nodes in response to elastic user demand.
IaC is just one element of a broader operational paradigm. One of the most popular IaC tools, Terraform, can be set up and run from a single workstation. But much like click-based provisioning, this approach won’t scale. Luckily, Terraform has plenty of automation features that can be utilized through CI/CD infrastructure. Since there are normally more software engineers than platform engineers, those on the platform team need to make the most of their resources when managing at scale Automating linting, testing, and deployment can lead to improved reliability and a better security posture.
2. Containerization and orchestration
Containers are a real game-changer when it comes to modern software development. They provide a great solution for creating platform-agnostic build artifacts.
By bundling applications and dependencies into isolated environments, containers make sure everything works consistently across different development stages. This is a big deal for ensuring stable and reliable deployments (which is one of the key elements of twelve factor app development). This uniformity also simplifies the development process and makes it easier to manage the application infrastructure. Plus, when issues do arise, it's much easier to troubleshoot because the underlying infrastructure is identical.
Containers allow engineering teams to get much closer to the ideal of reproducible builds, meaning that a Dockerfile will build the same container on any machine. For platform engineers who need to support many different teams and systems, containers are a godsend because they offer a common build artifact that can be deployed for every application.
To manage and scale containerized applications effectively, container orchestration tools such as Kubernetes have become indispensable. For a platform engineering team, it’s all about leverage; Kubernetes has emerged as the top choice for container orchestration, and if you’re going to be supporting multiple software systems built with containers, you need an orchestration platform.
3. Continuous Integration and Continuous Deployment (CI/CD)
CI/CD is the backbone of automation necessary for delivering software at scale.. It’s an essential practice for virtually any software engineering organization, but it’s particularly important for platform engineering because it helps manage infrastructure more efficiently and reliably.
In the realm of platform engineering, CI/CD is essential for keeping the shared infrastructure platform up-to-date, secure, and dependable. It allows platform engineers to swiftly implement new features, improvements, and bug fixes by automating the integration of code changes, running automated tests to validate those changes, and deploying the updated applications to the appropriate environments. This minimizes disruptions to development teams that rely on the platform while ensuring that any potential issues are identified and addressed early in the development process. Plus, platform teams can easily provide the same CI/CD processes to development teams, ensuring there isn’t a need to reinvent the wheel for deployment automation.
4. Monitoring and observability
Monitoring, and especially observability, are both of significant value for modern software applications. It enables development and platform teams to gain insights into the behavior, performance, and health of their systems. As complex, distributed architectures becoming more common, observability has become crucial for effective monitoring, troubleshooting, and optimizing software applications.
In a platform environment, robust instrumentation is important for two reasons:
For the platform itself: Every developer in the organization is a customer. Platform engineers need to maintain uptime and platform health to provide a seamless experience for these developers.
For the hosted applications: Developers need to understand the health and performance of the applications they have running on the platform. They will need to instrument their code, and platform teams need to provide the proper interfaces to accept and output this data.
In simpler, legacy architectures, basic resource usage metrics like CPU and RAM usage were enough for understanding system health and behavior.. However, with modern distributed systems like those found in a platform, these metrics won’t tell the whole story. Understanding the full lifecycle of user requests, the impact of change on the environment, and the behavior of discrete applications and services within the larger stack is critical. Platform engineers must provide this for themselves and enable development teams access to the same operational data.
What are the benefits of platform engineering?
Platform engineering offers many advantages to organizations that adopt it. These benefits extend across various aspects of software development and operations, including consistency, scalability, security, and cost control. Let's take a closer look at some of the key benefits of platform engineering:
- More consistent infrastructure: By creating a single, standard way of building and running applications, platform engineering ensures consistency across all applications. This consistency helps reduce errors, simplifies troubleshooting, and makes it easier for different development teams to collaborate.
- More scalable and reliable software: Platform engineering enables teams to build applications on a robust, shared infrastructure that is designed to scale efficiently. If you ask ten different development teams to build their application platform, you’ll end up with ten different platforms, with ten times as much operational overhead! A single platform is much easier to manage, and consequently is much easier to scale.
- Better security: Platform engineering allows security to be baked into the platform itself, ensuring that all applications built on it meet the required security standards. This approach allows developers to focus on securing their code and applications while relying on the platform for infrastructure security (akin to the security model of a cloud provider).
- Faster feature delivery: By providing developers with a standardized, pre-built infrastructure, platform engineering enables them to concentrate on developing new features and functionality. This focus leads to quicker feature delivery, helping organizations stay ahead of the competition and respond rapidly to changing market needs.
- Better cost control: Platform engineering allows organizations to manage infrastructure costs more effectively by centralizing resource management. As a result, development teams are less likely to spin up random, unnecessary infrastructure, leading to more efficient resource utilization and better overall cost control.
Conclusion: Platform engineering is progression
As stated earlier, it’s important to note that platform engineering isn’t a replacement for DevOps, but is simply an evolution of the same philosophy. The focus remains the same: empowering developers to deliver better software faster, while improving collaboration between development and operations teams.
The sign of a successful DevOps culture has always been the cadence of successful feature delivery. If a software organization built around platform engineering is achieving that, it seems ridiculous to say DevOps is dead – platform engineering is just making it better.
Steering your software engineering in the right direction
If you're looking to measure the success of your software engineering teams, we highly recommend reading the following article: "17 software engineering metrics + how to track them." In it, we discuss the various metrics you can use, elaborate on the benefits of tracking them, and how to align them with your organizational goals.
If you're looking to upskill your teams in DevOps (Or upskill yourself), we suggest checking out the Pluralsight DevOps Foundations learning path, or the many courses provided for professionals by professionals on DevOps and software development. Check out our free Skill IQ tests on everything from development, IT ops, creative, and more.