You may have heard the term “platform engineering.” In recent years, the role of platform engineer has become increasingly popular. As internet-based companies have grown, so has the desire to empower developers to own the entire development life cycle, from coding to shipping the code.
This post discusses platform engineering, how it compares to DevOps and site reliability engineering (SRE), the core tenets of platform engineering, team structure, and tools for platform engineering.
This blog post originally appeared on the loft.sh website.
You can access it here.
What Is Platform Engineering?
Platform engineering is the practice of designing, building, operating, and maintaining tools and infrastructure to help software developers build and ship software quickly. At the same time, it enables developers to manage the majority of the software development process themselves. PE came about with the rise of microservices and the need for organizations to manage an increasingly complex network of systems. Consequently, PE aims to reduce this complexity and the mental load on developers.
Platform Engineering Compared to DevOps and Site Reliability Engineering (SRE)
DevOps is a set of practices that automates and improves the collaboration between developers and operations teams. DevOps requires interactions between the two groups.
Site reliability engineering primarily focuses on IT systems’ reliability and performance. SRE teams work with developers throughout the software development life cycle to ensure the software is reliable and meets non-functional requirements and SLAs.
Compare these to platform engineering, which focuses on the software development life cycle. Instead, SRE focuses on getting software from an idea to production as fast and efficiently as possible by improving the workflow for developers. It favors developer self-service over interactions with the operations teams. While DevOps and PE have similar goals, they attempt to accomplish them differently. PE and SRE ultimately have different goals.
Core Tenets of Platform Engineering
When it comes to platform engineering, these are the core tenets to know about:
Deliver Value for Your Customers: Your Developers
The overall tenet of platform engineering is to make your developers’ lives easier and get their code to production faster. The idea is to create a paved path for them to deliver their code. Rapid and smooth development is the business value your PE teams have. So keep this front and center.
Empower Developers to Self-Serve
Build the platform to allow developers to add, maintain, and adjust it. Every project team may have a slightly different stack and paved path to production. Rather than needing them to run to the PE team, allow them to do it themselves. Set specific points in the development life cycle where they can select or add tools, steps, or other pathways.
Set Boundaries but Allow Freedom
While the developers need freedom, set some boundaries in order to not create a mess. Keeping the system consistent and manageable means there are guardrails in place. Creating a paved path for your developers should not create an unmanageable quagmire for your platform engineers. Limit languages, tech stack choices, ecosystems, and outlined paved paths while giving them reasonable choices.
Be Developers-As-People Driven
Don’t forget that your developers are people with all the baggage that comes with it. They get tired, frustrated, over-ambitious, under-ambitious, and all sorts of things. They have good days and bad days. Developers want to do their jobs well without a bazillion tedious steps. You need to design the platform with this in mind. Talk with them, get their feedback, put yourself in their shoes, and develop rapport with them.
Don’t Reinvent the Wheel
As much as delivering a custom solution for a step is satisfying, someone likely has already solved the same problem. Don’t rebuild something because of the mentality “it’s better because it was built here.” Instead, look at open-source and paid services to allow you to offload maintenance and gain capabilities from people, communities, and companies who have a broader view of the software development landscape. That said, it is perfectly reasonable to build it yourself if nothing is available to meet your specific needs.
Deliver Fast Innovation
Concentrate on delivering value to your developers quickly. If they ask for a new feature or hook-in point and you tell them it’s going to be a year or two, they will not be impressed and will probably start using solutions other than your internal developer platform. To that end, you want to eat your own dog food. Use the internal developer platform to deliver new features to the internal developer platform. In time, it will give you perspective on how well the paved path is working. Your delivery times should not be greater than the developer’s delivery times.
Treat Infrastructure As Code
PE buys into the idea of infrastructure as code (IaC). It’s a fundamental requirement for automating and easing the provisioning of IT resources. In days bygone, humans had to create and maintain infrastructure manually. As a result, humans made mistakes, which could lead to failures, some catastrophic. Therefore, treating the infrastructure settings and reproducible and trackable code by storing it in a source control system limits the human-error factor and provides troubleshooting traceability.
Platform Engineering Teams
Platform engineering teams consist of a variety of roles, possibly including but not limited to:
- Product manager
- Front-end developers
- Back-end developers
- Business analyst
- Operations/DevOps experts
- Quality assurance
These roles are very similar to a software engineering team, and for a good reason—you are delivering a software product.
Platform Engineering Tools and Infrastructure
Tools and infrastructure are required for platform engineering. Here are the main ones to be aware of:
Loft is a multi-tenancy and self-service tool for Kubernetes. Use Loft to provision remote dev environments in combination with DevSpace to solve the local environment problem for development.
DevSpace is a continuous integration developer tool for Kubernetes that lets you develop and test your applications directly in Kubernetes. Furthermore, it works with any Kubernetes cluster.
The open-source, portable, extensible Kubernetes platform for containerized workloads and services enables declarative configuration and automation. It has a robust community of developers. Services, support, and tools for Kubernetes are readily available.
A container solution like Docker allows developers to combine code and dependencies into a single package that can run across multiple platforms.
GitLab is a repository-hosting service that helps engineering teams simplify their toolchain and accelerate DevOps and platform engineering adoption. In addition, GitLab provides a web-based Git repository that offers free, open, and private repositories, issue tracking, project planning, monitoring, security, and wikis.
GitHub Actions is a way to trigger commands in reaction to events on GitHub. In effect, you can use them to automate all sorts of tasks, including creating pull requests, code reviews, and branch management.
CircleCI helps software teams rapidly release quality code through its continuous integration and delivery platform. It detects changes in Git and then launches further actions.
Terraform is a tool that can be used to safely and quickly build, change, and version infrastructure. In addition, Terraform can manage existing and popular service providers and custom in-house solutions, specifically for Kubernetes.
Vault by Hashicorp
Vault is a tool for securely storing and accessing secret and sensitive information. This information includes anything you wish to keep under tight control, such as certificates, passwords, API keys, and other items. Vault provides a single interface that works with any secret while offering strong access control and an extensive audit log. For further information on tooling, check out this blog post on platform engineering tools.
Platform engineering is a relatively new practice that has recently gained popularity. It is the discipline of designing, building, and operating tools and infrastructure to empower developers to build and ship software quickly. It is about creating a smooth path for your developers to deliver code to production. You now have the basics of platform engineering, so go out and start building tools to help your developers deliver software faster.