From websites to enterprise workloads, software is vital to modern businesses' productivity and revenue -- but software development faces serious growing pains.
Today's IT environments are highly complex, forcing developers to master an ever-growing number of technologies and tools. Agile and continuous development paradigms accelerate development schedules, DevOps adds ops responsibilities to developer workflows, and microservices architectures require additional metrics gathering and dynamic scalability. And all these changes come with greater reliance on complex third-party platforms, such as public clouds.
The extent of this requisite knowledge burdens developers with information overload, which can compromise productivity and product quality. Businesses are responding to these challenges by implementing abstraction layers intended to shield developers from some aspects of the underlying infrastructure of tools and services. These layers of abstraction, called platforms, are created and maintained by dedicated software engineering teams within the business. Today, platform engineering is emerging as a vital means of support for busy DevOps staff.
What is DevOps?
The DevOps methodology seeks to accelerate and improve the development lifecycle and create superior software products. The DevOps model embraces shared ownership, extensive process and tool automation, and rapid feedback to drive the development process.
DevOps environments rely on a mix of processes, cultural foundations such as collaboration, and an extensive array of development tools. There are two fundamental considerations in DevOps: agility and deployment.
The first key DevOps consideration is Agile and iterative development. In traditional Waterfall development, a project is fully defined, coded and tested, and then released all at once, which leads to long development and testing cycles.
In the DevOps model, a software project is developed, tested and released as a rapid series of small parts, with new builds sometimes released as often as daily. This enables developers to innovate and take more risks with new ideas, while ensuring better testing and superior product behavior.
The second consideration in the DevOps model is the integration of development with operations tasks.
Traditionally, software developers would rely on a separate operations team to deploy, configure and maintain a software product. DevOps, in contrast, empowers developers to deploy and manage the software release themselves. This gives developers far more insight and control over the software in production.
The risk of DevOps overload
However, the shift to DevOps, Agile development paradigms and CI/CD carries the challenge of conceptual load.
DevOps teams don't just code software. Today's DevOps teams have a wide range of responsibilities, including the following:
- Handling multiple programming languages.
- Working with the organization's IT infrastructure, including servers and storage.
- Mastering a variety of tools across the software development lifecycle, including integrated development environments (IDEs) and testing and deployment tools.
- Increasingly, participating in the business aspects of project outcomes, such as revenue targets.
What is platform engineering?
The goal of platform engineering is to create organized groups of resources and services that developers can use without needing to deeply understand or directly manage them. These organized groups, called platforms, are often built using many of the same software development skills and abilities found across DevOps teams.
Platforms are certainly not a new idea. For example, an IDE itself is a platform designed to help programmers develop quality code by eliminating the need to use a text editor to write code and a separate compiler to build it. As a more recent example, the well-established PaaS paradigm lets developers routinely take advantage of third-party cloud platforms for development tasks.
Given the escalating challenges and conceptual load associated with software development, businesses are seeking to ease the increasing burden on developers by creating teams responsible for abstracting portions of the development environment through platforms. Platform engineering is the emerging role of creating and maintaining the various software platforms that DevOps teams use.
Benefits and drawbacks of platforms
A platform accelerates software development and deployment by reducing the associated underlying work.
For example, using a platform of development, testing and deployment tools means that the DevOps team doesn't need to install, configure, update and maintain those tools. That work is done by the platform provider, letting developers focus on their core competency of creating quality code.
But platforms don't just happen, and one size never fits all. Platforms themselves are typically considered a product, and they must be created and maintained for the business and its specific software development and productivity needs. Because platforms are composed of discrete components and services, they can be changed and enhanced over time.
Ideally, platform engineering uses sets of tools and self-service capabilities that involve a high level of automation to enhance developer productivity. A well-designed platform can standardize development tasks and practices, leading to better productivity and higher-quality outcomes from DevOps users.
DevOps vs. platform engineering
In simplest terms, DevOps is a software development approach that promotes collaboration between development and operations teams, whereas platform engineering gives DevOps teams a centralized platform for their tools and workflows.
At first glance, the two ideas might seem similar or even interchangeable. DevOps principles are often involved in the creation of centralized platforms; likewise, platform engineering is typically implemented after an organization successfully adopts a DevOps environment.
Successful platform engineering teams routinely collaborate with DevOps teams. Similarly, developers often participate in some aspects of platform creation and management, whether as part of their regular responsibilities or in response to ad hoc requests from the platform team.
However, platform engineering's purpose is fundamentally to support DevOps by providing consistent, reliable tools and workflows to build software. Whereas DevOps teams can take on any business project, platform engineers focus on creating and maintaining the specific platforms that DevOps teams use.
In practice, platform engineering has become a supporting resource for DevOps establishments. Platform engineering matters because those teams specialize in providing the breadth and depth of tool knowledge that developers don't possess.
Where does site reliability engineering fit in?
The role of site reliability engineering (SRE) is often overlooked in DevOps and platform engineering discussions. Ultimately, all three groups must work together to build and deploy successful software for the business.
SRE is a specialized team dedicated to enhancing and ensuring software application reliability in the face of both hardware and software challenges. Whereas platform engineering is intended to accelerate DevOps efforts, SRE is focused on managing operational issues that affect the reliability of scalable software systems.
There's some overlap because all three groups deal largely with software development and deployment. However, each effort has a unique focus and specialization. DevOps teams create the software, with a focus on accelerating delivery and enhancing quality, whereas platform engineers implement and manage the tools and workflows that support DevOps efforts. SRE, in contrast, is responsible for application reliability, infrastructure management, incident response and troubleshooting.
The evolving relationship between platform engineering and DevOps
Development and platform teams are closely related. After all, creating a new silo for platform engineering would be counterproductive when a key benefit of DevOps adoption is collaboration.
Traditionally, a DevOps team is responsible for selecting its own tools, including IDEs as well as build, testing and deployment tools. The same team then uses configuration and automation tools to establish workflows for the development process.
These workflows might involve dozens of different tools. Supporting this environment requires significant time and attention, and developers' knowledge of diverse tools and integrations is sometimes limited. This knowledge gap can drain developer resources and delay projects.
Platform engineering teams take over the design, implementation and maintenance of these tools and workflows. The platform team uses tool experts to understand developer needs, select the best tools for the required tasks, perform integrations and automations, and troubleshoot and maintain the established platform over time. As a result, developers using the platform can enjoy benefits such as greater consistency and productivity without needing to have granular knowledge of how the platform operates.