In this article, we will explore the concept of platform engineering and its importance in modern software development organizations. We will discuss the problems it aims to solve, provide a real-world example, and offer some tips on building an effective platform engineering team.
A Story Before We Start 🔗
Before diving into the topic of platform engineering, let’s consider a story that illustrates the problem it aims to solve.
The story of Namira and her struggles with creating a database
- Namira, a software engineer, joins a new company and is assigned to bootstrap a new service for the recommendation API.
- To create a database for the service, she is instructed to submit a ticket to the DB team.
- The DB team assigns the ticket to Felix, who requests additional information from Namira.
- Namira, busy with Q1 planning, takes a couple of days to respond.
- Felix creates the database and forwards the ticket to the identity and access team.
- Sophia, from the identity and access team, creates a service account and asks Namira about the database’s purpose.
- Namira informs her that the database will be used by her application in Kubernetes (k8s).
- Sophia routes the ticket to the Vault team to set up the password in Vault and enable the k8s operator to read it.
- Hassan from the Vault team completes the task and marks the ticket as “DONE!”
- Namira deploys a test application, only to encounter an error: “Cannot Resolve the Host.”
- The team realizes the database is in the wrong Availability Zone (AZ) and asks Namira to create tickets for a new database in the correct AZ and decommissioning the old one.
- Namira becomes frustrated and demotivated by the convoluted process.
The Problem 🔗
The story of Namira highlights several issues that software development teams may face:
- Fragmented processes: Each team completes their work, but the overall process is disjointed and cumbersome for Namira, who is trying to create a new service.
- Decreased productivity: Namira spends a significant amount of time and energy navigating the process, leaving her with less time and motivation to focus on her primary tasks.
- Lack of a clear, efficient workflow: The story assumes that teams correctly route tickets to the next team, but in reality, engineers like Namira might struggle to determine the next step or team involved in the process.
- Limited scope: The story only covers the creation of a database, without considering other aspects such as messaging or additional infrastructure requirements.
To address these challenges, organizations can turn to platform engineering.
What is Platform Engineering? 🔗
Platform engineering is about building products that combine one or more infrastructure systems to enable self-service capabilities for engineers. It focuses on switching from an “Ops” mindset to a “Product” mindset, delivering turn-key solutions for engineers and creating a “paved” path for them.
The goal of platform engineering is not to create fancy tools or deploy additional software in production. Instead, it aims to help the majority of engineers be more productive and deliver business value much faster, enabling the business to move quickly.
The Benefits of Platform Engineering 🔗
With a well-implemented platform engineering approach, Namira’s story could have been quite different:
- Namira fills out a form in a UI or CLI with some inputs.
- She waits for 5 minutes.
- She gets everything ready to use immediately, without tickets, queues, or the need to navigate the organization tree for multiple teams.
Building a Platform Engineering Team 🔗
Creating a successful platform engineering team involves more than just assembling a group of talented individuals. It requires cultivating a unique team culture that supports the goals and values of platform engineering. Here are some key aspects to consider when building a platform engineering team:
1. Good Communication 🔗
Effective communication is crucial for a platform engineering team. The team members, including managers, engineers, and product managers, should be able to communicate well, listen attentively, and establish connections. They need to directly engage with feature-making engineering teams and understand their pain points. A few ideas to enhance communication within the team include:
- Conducting customer interviews with engineers from various teams, both senior and junior.
- Embedding platform team members within other teams to experience their daily challenges firsthand.
- Establishing strong relationships with SRE teams and working closely with them as partners.
2. Focus on MVPs (Minimum Viable Products) 🔗
Since platform teams indirectly impact the business through feature teams, they should avoid embarking on extensive projects without testing the waters first. The platform team should be able to create MVPs to test ideas and gauge their viability. This allows them to make necessary adjustments to their plans based on the feedback gathered after each MVP. They should be open to conducting small, action-driven experiments that help them assess the feasibility of their ideas.
3. Validation and Measurement 🔗
Platform teams must validate their assumptions and measure the impact of their work. It is not enough to simply “ship” a product and move on. They need to ensure that the tools they build truly benefit the intended users. A few approaches to validate and measure the team’s work include:
- Inviting feature engineers to use new capabilities and observing their experiences firsthand.
- Using OKRs or measurable outcomes to assess the impact of a tool before and after its release.
- Relying on metrics such as DORA metrics or The golden four as mentioned in the Accelerate book to evaluate the team’s performance.
4. Strong Leadership 🔗
Leadership plays a vital role in shaping the platform engineering team’s culture. Leaders should support the team’s efforts to build a strong culture, foster a sense of psychological safety, and provide the necessary resources for success. Without strong leadership, the entire foundation of the platform engineering team may crumble.
Platform engineering can address many of the challenges faced by modern software development teams. By building a strong platform engineering team and fostering a culture that supports their goals, organizations can improve productivity and deliver business value more quickly.