Platform Engineering vs DevOps

May 2, 2024
12
min read

More people have been using the term “platform engineering” in recent years, sparking debates about its relationship with DevOps—whether it will complement, supplant, or evolve it. In this article, we review the revolutionary role of DevOps in technology alongside the rising significance of platform engineering. We dissect their methodologies, impacts, and how they individually and collectively affect software development and delivery. By leveraging real-world examples, we aim to clarify their distinct influences, providing insights to boost your team’s efficiency and tackle the confusion arising from our industry having too many buzzwords.

Summary of key differences: platform engineering vs. DevOps

Area DevOps Platform engineering
History DevOps arose to streamline software delivery and bridge the gap between development and operations teams. Platform engineering emerged to address the challenges introduced by DevOps, specifically, the daunting array of new and complex tools that developers were expected to master.
Goals
  • Streamline software delivery and observability
  • Provide developers with a way to maintain their code in production
  • Enhance the developer experience
  • Reduce cognitive load and development toil
  • Democratize the development-to-production experience for devs
Responsibilities
  • Build and maintain CI/CD pipelines
  • Set up and maintain monitoring capabilities
  • Maintain production infrastructure
  • Build and maintain IDPs
  • Maintain infrastructure orchestration
  • Provide software deployment templates
Tools DevOps relies on tools related to categories like CI/CD, monitoring, and infrastructure automation Platform engineering leverages the five categories of IDP, software catalogs, and development portals
Skillsets and collaboration DevOps professionals focus on automation, scripting, software development, and system administration skills. Platform engineers need expertise in infrastructure management, containerization, container orchestration, and product management.

History

The evolution of DevOps and its challenges

In 2006, Amazon CTO Werner Vogels introduced a pivotal shift in software engineering, advocating for developers to manage their applications from development to production, laying the foundation for DevOps. This approach emphasized ownership and accountability, significantly influencing how organizations measure success of software delivery. The seminal work “Accelerate” also introduced four critical metrics for measuring its effectiveness, which guide organizations toward high-performance practices. This evolution enabled companies to deploy updates rapidly, vastly improving delivery speed and efficiency compared to traditional methods.

The four key DevOps metrics (source)

DevOps has significantly boosted productivity for some teams, but others struggle to fully embrace its benefits, primarily due to the overwhelming cognitive load involved. This challenge stems from underestimating the complexity of tools like Kubernetes and microservices architecture. The vast array of tools and frameworks required can hinder developers’ focus on their main task: feature delivery.

The rise of platform engineering

Platform engineering is the “discipline of designing and building toolchains and workflows that enable self-service capabilities for software engineering organizations in the cloud-native era. Platform engineers provide an integrated product most often referred to as an internal developer platform (IDP) covering the operational necessities of the entire lifecycle of an application.”

Internal developer platforms are highlighted as crucial in the book Team Topologies for helping organizations sidestep common pitfalls like fake SRE or shadow ops anti-patterns. The book, now a benchmark in platform engineering, emphasizes the value of a specialized platform team for effectively navigating these challenges.

Four team topologies, establishing the rise of platform engineering (source)

Well-designed platforms tackle the issues stemming from the ineffective implementation of DevOps and SRE practices.

Goals

DevOps streamlines software delivery

Streamline software delivery and observability: DevOps aims to expedite the entire software delivery process, ensuring rapid deployment and feedback loops. This goal emphasizes the importance of continuous integration and continuous deployment (CI/CD) practices alongside robust observability tools that provide real-time insights into application performance and user experience.

Provide developers with a way to maintain their code in production: A fundamental objective of DevOps is to empower developers to oversee their code even after deployment. This responsibility encourages a closer alignment between development activities and operational outcomes, fostering a culture where developers are integral to monitoring, troubleshooting, and optimizing application performance in the production environment.

{{banner-1="/utility-pages/banners"}}

Platform engineering goes further

Enhance the developer experience: A key goal of platform engineering is to enhance the developer experience by streamlining development processes and tools. This focus ensures that developers can concentrate on coding and innovation rather than being bogged down by complex setups or configurations.

Reduce cognitive load and development toil: By simplifying the technology stack and automating repetitive tasks, platform engineering aims to minimize the cognitive load on developers. This reduction in mental overhead allows developers to focus more on creating value through their work.

Democratize the development-to-production experience for devs: Platform engineering strives to make the journey from development to production seamless for all developers. By providing consistent and accessible tools and environments, it ensures that every developer, regardless of their expertise level, can efficiently contribute to the end product.

Approach

The service mindset of DevOps

Let’s consider a scenario deploying a novel product requiring cloud setup and Python application deployment alongside a Redis cache.

The DevOps team crafts a Terraform plan for environment provisioning, including a Kubernetes cluster. They then develop Helm charts for app deployment. Crucially, this process involves extensive collaboration with the development team, focusing on educating them about modifying the Terraform plan, adjusting Helm chart values, and utilizing kubectl effectively.

DevOps needs to collaborate closely with the developers, offering both guidance and education while providing ongoing support. The existing process would assume a high level of maturity and the involvement of developers in the infrastructure development and maintenance process.

The product mindset of platform engineering

Platform engineering adopts a product mindset, viewing the platform as a product that meets the developers’ needs. This perspective encourages the design of scalable, reliable, and efficient platforms. Platform engineers work closely with development teams to understand their needs, leading to an improved developer experience and increased productivity.

Imagine developers working on a Python application who are now overwhelmed by the complexity of managing Terraform and Helm scripts, especially as they face the daunting task of tripling their microservices. This situation highlights the need for more intuitive infrastructure management solutions to handle the scaling efficiently, ensuring that the team can focus on development rather than deployment intricacies.

The platform engineering team steps in to simplify the process by abstracting Terraform and Helm complexities, introducing Backstage for easy microservice boilerplating and Uffizzi ephemeral environments for quick deployment and testing of prototypes. This shift allows developers to focus on innovation without the overhead of managing deployment technologies.

Platform engineers maintain their expertise in infrastructure as code, aiming to develop a higher level of abstraction to streamline processes. This approach could significantly enhance workflow efficiency. Incorporating product management skills into the team is vital, adding a crucial layer of strategic thinking and user-centric design to platform engineering efforts.

Responsibilities

DevOps assures software delivery velocity

Build and maintain CI/CD pipelines: The DevOps team is tasked with creating and upkeeping continuous integration and continuous deployment pipelines, ensuring that software can be reliably released at any time.

Set up and maintain monitoring capabilities: DevOps is responsible for implementing monitoring tools and practices, allowing for the real-time tracking of system health and performance to quickly address issues.

Maintain production infrastructure: The DevOps team’s purview includes ensuring that the production environment is stable, scalable, and secure, which requires constant attention to operational needs and potential improvements. This function is sometimes handled by SRE teams, though the borders can be blurred.

Platform engineering makes software delivery self-sufficient and smooth for developers

Build and maintain IDPs: The platform engineering team is charged with developing and sustaining IDPs that streamline the development process, allowing for more efficient coding, testing, and deployment workflows.

Maintain infrastructure orchestration: Platform engineers ensure the seamless orchestration of infrastructure components, optimizing for scalability, reliability, and efficiency across the system’s architecture.

Provide software deployment templates: By offering standardized deployment templates, the platform engineering team aids developers in launching services and applications consistently, reducing errors and speeding up the deployment process.

Tools

DevOps automates workflows

CI/CD: Tools in this category, such as Jenkins, GitLab CI, and CircleCI, automate the software release process from code to deployment, ensuring a smooth and continuous integration and delivery pipeline.

Monitoring: These tools, including Prometheus, Grafana, and Splunk, provide insights into the application’s operational health, allowing teams to detect and respond to issues in real time.

Infrastructure automation: Terraform, Ansible, and Chef automate infrastructure provisioning and management, enabling consistent and efficient environment setups across development, testing, and production.

Platform engineering templates workflows

The five core components of an IDP

An IDP is typically composed of five key components that are essential in developing a comprehensive set of templates that cover the golden paths of various development teams.

  • Application configuration management seamlessly orchestrates resources within container platforms like Kubernetes and external resources like databases, adapting to different environments.
  • Infrastructure orchestration ensures that IDP integrates with the entire infrastructure cohesively and permits custom integrations as needed. It should include CI/CD pipelines, clusters, DNS and service discovery providers, and infrastructure as code (IaC) tools.
  • Deployment management implements a streamlined developer experience by automating the deployment process. It includes handling continuous integration after a developer pushes the code to Git, executing deployment stages, and extended debugging support with versioning.
  • Role-based access control (RBAC) provides a structured approach to managing user permissions within a system based on their roles in an organization.
  • Environment management is one of an IDP’s most interesting and challenging aspects. Traditional setups often require waiting for infrastructure teams to set up and configure new environments, a time-consuming and inefficient process. IDPs revolutionize this by automating creating and configuring environments, allowing for self-service capabilities. Developers or team members can instantly establish new environments as needed. Additionally, IDPs empower engineering organizations to decommission environments efficiently when they’re no longer necessary, a concept known as an ephemeral environment.

Developer portals and software catalogs

The developer portal is a centralized location for developers to find, use, and manage resources and tools through predefined templates. It includes a service catalog offering a selection of tools and services for easy adoption.

Backstage, an open-source tool developed by Spotify, excels at providing such a developer portal and service catalog. It offers streamlined access to an organization’s software stack for service discovery, documentation, and infrastructure management, enhancing collaboration and software management efficiency.

Backstage helps organizations bring their teams together to serve developers via a single user journey. Backstage primarily operates as a service catalog, where each team in the organization can integrate its software projects, documentation, API schema, and Git repositories in a single location. A developer can then browse through all the software components available in the organization and understand how to use and deploy them entirely via self-service. Backstage includes plugins for various monitoring tools, so developers can even monitor their applications via the Backstage interface.

Skillsets and collaboration

Reflecting on the approaches comparison from an earlier section, platform engineering and DevOps share significant skill overlaps, focusing on infrastructure maintenance and streamlining software delivery. These overlapped skills include CI/CD, infrastructure as code, containerization, Kubernetes, security, and observability expertise. However, platform engineering demands additional knowledge of tools like developer portals, software catalogs, and ephemeral environments alongside a product management mindset, which often requires dedicated product managers within teams.

The differences in skill sets depend on the team’s role. If platform engineering acts as a comprehensive support for software delivery, SRE skills such as troubleshooting, cloud architecture, and system administration are crucial. Conversely, with a separate SRE team, these skills might be de-emphasized, highlighting the organizational structure’s impact on team capabilities and focus areas.

{{banner-2="/utility-pages/banners"}}

Conclusion

Platform engineering and DevOps serve distinct yet synergistic roles in software development. DevOps bridges the gap between development and operations, fostering continuous integration and delivery. Platform engineering focuses on creating a developer platform as a product to streamline and secure development workflows. Their integration is vital for rapid deployment, enhancing teamwork, and improving software quality.

As technology evolves, merging these approaches becomes increasingly crucial for fostering innovation, efficiency, and adaptability in the face of software engineering’s evolving challenges. This strategic combination ensures resilience and agility in meeting digital demands.