Diving Deeper into the Components of Platform Engineering

Diving Deeper into the Components of Platform Engineering
Photo by Jan Huber / Unsplash

Platform engineering has become a critical function enabling developer productivity within modern software organizations. Platform teams design, build and operate the internal developer platforms that engineering teams rely on to deliver business value quickly.

In this comprehensive guide, we'll dive into the key components of robust platform engineering and how dedicated platform teams create leverage across software delivery.

The Role of Platform Teams

Successful platform teams occupy a unique position - serving as internal customers to infrastructure teams while enabling self-service for other developers. Platform engineers focus on productivity and velocity for other engineers.

Platform teams aim to abstract complexity and provide cohesive self-service developer platforms. Well-designed platforms reduce the cognitive load for developers, freeing them to focus on end-user problems rather than wrestling with infrastructure.

Dedicated platform teams create leverage by building services, tooling, and automation that multiple development teams can leverage. Instead of each team reinventing foundational capabilities, platform teams codify and productize infrastructure, freeing squads to focus on their applications.

Platform engineering is essential because software delivery has become highly complex in the Cloud Native era. Monolithic applications have given way to distributed microservices and serverless functions. Deployments have shifted from physical machines to containers and orchestrators like Kubernetes. Infrastructure configuration has moved from GUI clicks to infrastructure as code.

Without a centralized platform underpinning these paradigms, chaos ensues. Engineers waste time learning and reimplementing foundational capabilities. Reliability suffers from fragmentation across teams. Onboarding new developers becomes exponentially harder.

Platform teams help organizations scale delivery by providing the self-service capabilities, tooling, and golden paths that software developers need to be maximally productive. The best platforms enhance velocity for every member of the engineering org.

Requirements for Platform Engineering

Effective platform engineering requires a combination of technical depth and empathy for internal developer customers. Successful platform teams:

Master both software engineering and ops: Platform skills sit at the intersection of application development and IT operations - requiring proficiency in programming, infrastructure management, and release orchestration.

Obsess about developer experience: Platforms live and die based on their ease of use and debuggability. Constantly gather feedback from developers and treat them like customers.

Automate early, automate often: Leverage automation across infrastructure, testing, and deployment pipelines to reduce human friction and toil for developers.

Design for self-service: Provide developers with abstractions, APIs, and CLIs that enable provisioning infrastructure and releasing applications themselves.

Architect for scale: Plan for success by architecting reusable services and infrastructure capable of massive consumption from birth.

Promote internal open source: Develop platform components as open-source software internally. This enables community contribution and transparency.

Facilitate discovery: Create a centralized developer portal for documentation, dashboards, alerts, and knowledge sharing. Remove tribal knowledge silos.

Cultivate empathy: Relentlessly advocate for what developers need rather than what is easy. View the success of other engineers as the platform’s measure of success.

Organizations that invest in dedicated and empowered platform teams create force multipliers that pay dividends across the engineering org.

Pillars of Platform Engineering

Platform capabilities typically focus on a few pillars that together enable developer self-service.

Infrastructure Provisioning

The starting point is enabling developer teams to provision the underlying infrastructure they require - like virtual machines, databases, and object storage - on demand through APIs and tooling rather than just ticketing.

For example, Terraform modules abstract infrastructure configurations into reusable templates developers can instantiate to spin up pre-configured clusters, databases, and serverless functions.

Continuous Integration and Delivery

Platform teams operationalize CI/CD pipelines that build, test and promote application changes into production quickly and safely. Jenkins, CircleCI, ArgoCD, and other tools provide these automation capabilities.

Shared libraries encapsulate best practices for testing, security scanning, rollout strategies, and release orchestration.

Runtime Platforms

Modern applications run on containers, functions, and other runtimes. Platform teams manage the provisioning of these run times and handle routing, networking, load balancing, and autoscaling.

Observability and Monitoring

Observability tooling surfaces system metrics, logs, and traces to developers. Platform teams build foundational dashboards, aggregation pipelines, and alerts.

Common Services

Databases, queues, object storage, caching, logging, SSO, and other services become easy to leverage through provisioning APIs and SDKs.

Security and Compliance

Platforms provide pre-vetted infrastructure configs, role controls, auditing capabilities, and pipelines compliant with organizational policies.

Developer Tooling

In addition to supporting applications in production, platforms provide local development environments, IDE plugins, CLI tools, automated testing sandboxes, and other productivity enhancers.

Taken together, these pillars enable developers to be tremendously productive on their applications and features built on the platform.

Benefits of Platform Engineering

Investing in platform engineering pays dividends through:

Improved developer productivity - Developers spend less time on operations and more time building differentiating business logic. Self-service infra cuts request delays.

Increased developer velocity - Automation and reusability accelerate how quickly teams can build, test and deploy changes into production.

Lower cognitive load - Platform abstractions and services reduce the concepts developers must juggle, freeing mental focus.

Reduced fragmentation - Teams rely on shared platforms rather than siloed ad-hoc solutions or reimplementing capabilities.

Better reliability - Centralized platforms enable consistency, and best practices and prevent "works on my machine" issues.

Enhanced governance - Platforms provide guardrails and policy enforcement on access controls, auditing, data management, etc.

Scaling velocity - Modern applications have immense complexity. Platform leverage helps organizations extend their delivery capacity.

Optimizing tool usage - Platforms reduce waste and duplicate efforts across tool licenses and investments.

Onboarding acceleration - Developer onboarding only requires learning the platform once instead of digging into disparate team tools.

Improving hiring - Candidates are drawn to companies with strong platforms enabling them to focus on interesting work.

Engineering executives at leading software firms cite their developer platform and self-service infrastructure as instrumental ingredients enabling rapid growth and scale.

Designing a Platform Engineering Organization

To be effective, platform teams require organizational support and structured workflows:

Dedicated Team

Ideally, there is an engineering team dedicated 100% to building and supporting the developer platform products. Their key metric is developer productivity.

Product Management

A product manager gathers requirements from developers, prioritizes the platform roadmap, and sets the overall platform vision.

UX Design

Platform UX designers ensure tooling provides delightful experiences. Friction costs developer time.

Platform Engineering

Hands-on engineers build the platform services, tooling, and infrastructure automation using software engineering best practices.

SREs

Site reliability engineers focus on platform availability, latency, scalability, and operability.

InfoSec

Security is embedded into the platform from the start and enhanced continuously by infosec practitioners.

Platform Evangelism

Developer advocates promote platform features internally and provide training materials and technical support.

Tight Feedback Loops

Short feedback cycles from developer surveys, user testing, and production telemetry guide platform priorities.

Open Source Mindset

Developing platform components transparently as open source internally encourages contributions across the organization.

Self-Service Focus

Platform teams measure their success by developer productivity enabled through self-service.

With the right structure and workflow models, platform engineering unlocks exponential productivity for an engineering organization.

Key Components of a Developer Platform

Finally, platform capabilities ultimately manifest as services developers directly leverage. Key components include:

Infrastructure Provisioning - APIs and CLIs for provisioning fully configured infrastructure like VPCs, containers, functions, and and databases.

Build Pipeline Automation - Reusable pipelines for continuous integration, testing, security scanning, and delivery.

Deployment Automation - Self-service deployment pipeline abstractions developers push code through.

Runtime Platforms - Container platforms like Kubernetes and serverless platforms provisioned on demand.

Managed Data Services - Production-ready data stores, message queues, streaming, and caching provisioned through SDKs and APIs.

Application Services - Common capabilities like monitoring, logging, tracing, and configuration injection are provided as services.

Testing Services - On-demand environments for integration testing, load testing, and staging mirrors of production.

CI/CD Integrations - Reusable plugins and tasks for adding testing, security scans, etc into pipelines.

Internal open source - Libraries, SDKs, CLIs, and tools developed as open-source modules.

Observability Dashboards - Curated KPI dashboards for applications based on proven metrics.

Developer Sandboxes - Pre-configured local environments for new developers to start being productive.

Documentation - Examples, API references, how-tos, and training guides.

Access Controls - Role-based access management for infrastructure, tools, and secrets.

Auditing - Deployment, infrastructure, and access auditing for compliance and security.

Platform capabilities come together to form a cohesive self-service developer platform accelerating delivery.

Key Takeaways

Platform engineering sits at the intersection of software development and IT operations. Platform teams build leveraged services, tooling, and automation tailored for developer productivity and business value delivery.

Modern applications have immense complexity. Platform engineering creates leverage for organizations to deliver software quickly, safely, and at scale. Developers rely on platform capabilities so they can focus on application innovation rather than infrastructure.

Dedicated platform teams are becoming a competitive necessity within leading software firms. The best platforms orchestrate an entire technology organization to ship products faster and continuously. Platform engineering accelerates developer productivity within the Cloud Native world.