Platform Engineering and Site Reliability Engineering
Platform Engineering: A Complete Guide to Reliable Systems
Platform engineering is the discipline of building and operating shared capabilities that help software teams deliver and run applications safely. Its main product is often an internal developer platform: a supported collection of workflows, interfaces and infrastructure services that developers can use without becoming experts in every underlying tool. A good platform makes routine work self-service while embedding security, operational visibility and reliability controls. It does not eliminate operational responsibility or simply place a portal over existing scripts. Instead, it turns repeated organisational needs, such as provisioning environments and deploying services, into consistent experiences with clear ownership and measurable outcomes.
The relationship with site reliability engineering and DevOps becomes clearer through a concrete architecture. Consider an organisation running a customer-facing ordering application, with several teams responsible for its APIs and background workers. Developers need a straightforward route from source code to production; operators need predictable changes, actionable telemetry and a tested response when orders fail. This guide follows that route using Terraform for infrastructure, Kubernetes for workloads, observability for diagnosis and service-level objectives for reliability decisions. It explains where platform engineering, SRE and DevOps overlap, while keeping the focus on system design and operation rather than salaries, qualifications or examination preparation.
Key points
- •Build platform engineering capabilities around developer needs and explicit service ownership.
- •Combine Terraform and Kubernetes with safe change controls, not automation alone.
- •Use observability and user-centred SLOs to guide reliability decisions.
- •Turn incident findings into tested improvements to the platform.
What should an internal developer platform provide?
An internal developer platform should solve recurring problems for its users, not showcase a preferred technology stack. Start by mapping how an application moves from a repository to a supported production service. Identify delays, manual approvals, undocumented dependencies and tasks that require specialist intervention. For the ordering application, the first useful platform capability might be a service template that creates a repository, delivery pipeline, runtime configuration and monitoring defaults. Developers should understand what the template provides, which responsibilities remain theirs and how to request something different when the standard route cannot meet a legitimate requirement for their particular production workload.
Treat these standard routes as supported defaults, often called golden paths, rather than mandatory abstractions for every possible workload. The platform interface could be a portal, command-line tool, API or pull-request workflow; a graphical catalogue is optional. Behind that interface, maintain documented contracts covering deployment inputs, secrets, networking, resource requests and support boundaries. Measure whether the platform reduces delivery friction without hiding important failure modes. Useful signals include provisioning lead time, unsuccessful deployment rates, support requests and developer feedback. Adoption alone is insufficient evidence of success if teams are required to use a platform that remains difficult to operate safely.
How do platform engineering, SRE and DevOps fit together?
The platform engineering vs DevOps comparison is not a choice between competing operating models. DevOps describes practices and cultural principles that improve collaboration across software delivery and operations, including automation, feedback and shared responsibility. Platform engineering applies product thinking to shared technical capabilities, making those practices easier to adopt consistently. In the ordering example, application teams own their business logic and service behaviour, while the platform team maintains reusable delivery and runtime capabilities. This division should reduce coordination overhead without creating a new ticket queue for every change. Ownership remains explicit rather than disappearing behind a shared set of tools.
For platform engineering vs SRE, the distinction is primarily one of focus. Site reliability engineering applies software engineering to operational problems, using practices such as service-level objectives, error budgets, automation and toil reduction. Platform teams build shared capabilities; SRE practitioners help establish and sustain appropriate reliability, sometimes within those same teams. Similarly, SRE vs DevOps is not an either-or decision: SRE offers concrete approaches compatible with DevOps principles. An organisation need not create three separate departments. What matters is agreeing who operates the platform, who responds to application incidents and who can authorise reliability-related changes when delivery priorities conflict with operational risk.
How should the worked platform architecture connect its components?
Divide the architecture into a developer interface, a delivery control path and an application runtime. A developer selects the ordering API template and submits configuration through a reviewed repository change. Continuous integration tests the code, scans dependencies and builds a container image, then publishes an immutable artifact to a registry. A deployment workflow updates the desired runtime configuration. A GitOps controller can reconcile that configuration into Kubernetes, although GitOps is an implementation choice rather than a requirement for platform engineering. Separately, an infrastructure pipeline provisions cloud resources through Terraform. Keep application releases distinct from changes that could replace foundational infrastructure.
At runtime, requests enter through a load balancer or gateway and reach the ordering API, which uses a managed database and publishes work to a queue. Workers consume that queue, while telemetry flows to an observability backend outside individual application pods. Use a secrets manager and workload identity rather than distributing long-lived cloud credentials in configuration files. Define trust boundaries between development and production, between tenants and around infrastructure automation. Namespace separation helps organise Kubernetes resources, but it is not automatically sufficient isolation for hostile workloads. Document dependencies and recovery paths so responders can identify what remains available during component failures.
How should Terraform manage infrastructure safely?
Infrastructure as code makes infrastructure definitions reviewable, repeatable and suitable for automated validation. In this architecture, Terraform provisions networks, managed Kubernetes clusters, database instances, queues and identity bindings through versioned modules. Keep modules focused on stable capabilities rather than creating one enormous module with many unrelated switches. Separate state according to ownership, environment and failure boundaries, so a routine application change does not require access to the entire production estate. Store state remotely with encryption, restricted access and a locking mechanism supported by the chosen backend. State can contain sensitive values, even when command output marks those values as sensitive.
A safe workflow validates configuration, checks policy, produces a plan and requires appropriate approval before applying production changes. Review replacements and deletions carefully, especially for persistent data services. Use short-lived automation credentials where supported, and protect the pipeline itself as a privileged production system. Schedule drift detection to reveal changes made outside the managed workflow, but investigate differences before automatically overwriting them. Terraform does not make every change reversible: reverting configuration cannot necessarily recover deleted data or undo an external side effect. Database backups, restoration tests and controlled migration procedures therefore remain essential alongside version control and infrastructure automation practices.
How can Kubernetes support reliable application delivery?
Kubernetes provides scheduling, reconciliation and workload lifecycle primitives, but reliability depends on how applications and clusters are configured. Package the ordering API as a Deployment with multiple replicas where appropriate, explicit resource requests and carefully chosen limits. Use readiness probes to control traffic eligibility, startup probes for slow initialisation and liveness probes only for conditions that genuinely require restarting a container. A failing downstream database should not automatically trigger endless application restarts. Spread replicas across suitable failure domains, and verify that the application, networking and data layer can tolerate the failures the deployment design claims to address in production operation.
Delivery safeguards should match the service's risks. Rolling updates can limit simultaneous unavailability, while canary releases expose a small traffic share before wider rollout. A PodDisruptionBudget constrains certain voluntary disruptions; it does not guarantee availability during node failures or prevent all rollout-related disruption. Autoscaling needs meaningful metrics, spare capacity and awareness of downstream limits: adding API replicas can overwhelm a database. Include graceful shutdown, request draining and bounded retries with backoff. For the ordering workflow, idempotency keys help prevent duplicate purchases when clients retry uncertain requests. Test rollback procedures, and remember that database schema changes may require compatibility across application versions.
What observability should the platform provide by default?
Observability should help teams answer questions about system behaviour, not merely collect more data. Give every generated service a consistent baseline of metrics, structured logs and distributed tracing. OpenTelemetry can provide vendor-neutral instrumentation and collection interfaces, while storage and analysis backends remain architectural choices. Propagate trace context across API calls and asynchronous messages where supported, and attach useful service, environment and version attributes. For the ordering application, connect request latency and error signals to database calls and queue processing. Record deployment events alongside telemetry so responders can investigate correlations without assuming that every incident was caused by the latest release.
Design telemetry with cost, privacy and operational usefulness in mind. Avoid putting customer identifiers or unbounded values into metric labels, because high cardinality can make metrics expensive and difficult to query. Redact sensitive log fields, restrict access and set retention policies appropriate to the data. Sampling can reduce tracing volume, but teams should understand which requests may be absent during an investigation. Provide dashboards for traffic, errors, latency and saturation, then add workload-specific views such as queue age and failed order processing. Alert on conditions requiring action, not every unusual measurement, and test whether telemetry survives failures in the platform itself.
How do SLOs turn reliability into an engineering decision?
A service-level indicator measures an aspect of service behaviour; a service-level objective sets its target over a defined period. Choose indicators that represent user outcomes rather than relying only on infrastructure health. For the ordering API, an availability indicator might measure the proportion of eligible purchase requests completed successfully. A separate latency indicator could measure the proportion completed within an agreed threshold. Specify the measurement point, request population, exclusions and treatment of timeouts before setting targets. Otherwise, teams may report healthy services while customers experience failures at a gateway or wait indefinitely for background processing to complete their accepted orders.
For illustration, a 99.9% success objective permits 0.1% unsuccessful eligible events within its measurement window; it is not a universal recommendation. That allowance is the error budget, which makes reliability trade-offs explicit. Agree in advance what happens when budget consumption becomes excessive, such as limiting risky releases or prioritising corrective work. Use burn-rate alerts to detect unusually rapid budget consumption, ideally across multiple windows to balance urgency against noise. Set separate objectives for shared platform capabilities where useful, including deployment availability, but do not confuse a broken deployment interface with an application outage if existing workloads continue serving customers normally.
How should teams respond to incidents and improve the platform?
Incident response begins before an alert fires. Assign service owners, establish an on-call route and write runbooks for likely failures such as database exhaustion, queue backlog and unsuccessful rollouts. When the ordering success indicator deteriorates, responders should confirm customer impact, declare an appropriate incident severity and assign coordination responsibilities. Prioritise mitigation: roll back a suspect release when safe, disable a problematic feature or reduce incoming work to protect dependencies. Keep a timeline and communicate known facts without guessing a recovery time. Platform and application teams need a shared escalation path, particularly when the first visible symptom does not identify the failing layer.
After recovery, examine contributing technical and organisational conditions without blaming individuals. Assign concrete follow-up work, such as safer migration checks, clearer alerts or tested restoration procedures, and verify that it changes outcomes. Feed recurring operational work into the platform backlog, balancing automation against maintenance cost. Begin with one service and a narrow supported path, then expand using evidence from developers and incidents. For structured study of these connected practices, the Erudex [Platform Engineering and Site Reliability Engineering course](/courses/platform-engineering-sre), [practice tests](/practice) and course certificate can support learning; practical reliability still depends on applying and testing the techniques in real operating environments.
Frequently asked questions
- What is platform engineering in simple terms?
- Platform engineering builds shared tools and workflows that help developers deliver and operate software consistently. Instead of each team assembling its own deployment pipeline, infrastructure setup and monitoring configuration, a platform offers supported defaults with self-service interfaces. The platform team maintains those capabilities as a product, using feedback from developers to improve them. Application teams still need to understand their services, manage business logic and participate in operational ownership rather than handing every responsibility to the platform.
- Does platform engineering replace DevOps?
- No. Platform engineering can make DevOps practices easier to implement, but it does not replace collaboration, shared ownership or rapid feedback. A platform might automate environment creation and standardise delivery controls while teams continue working across development and operations boundaries. Problems arise when the platform becomes another isolated department that accepts tickets without understanding developer needs. Its value comes from reducing unnecessary coordination and providing usable capabilities, not from renaming an operations team or adopting a particular portal.
- What is the difference between platform engineering and SRE?
- Platform engineering focuses on shared capabilities and the developer experience, while SRE focuses on engineering reliable services and reducing operational toil. Their responsibilities often overlap: both may improve deployment safety, automate recovery and build observability tooling. A platform can also have its own SLOs and on-call arrangements. The important distinction is the problem being solved, not a rigid job title. Teams should document who owns each service, shared dependency and incident response decision explicitly.
- Do you need Kubernetes for platform engineering?
- No. An internal developer platform can use managed application services, virtual machines, serverless runtimes or other infrastructure. Kubernetes is useful when its scheduling, extensibility and workload management capabilities meet genuine organisational needs, but it introduces operational complexity. Smaller teams may gain more from standardised templates and managed hosting than from operating clusters. Choose the runtime after examining workload requirements, security boundaries, operational capacity and recovery needs rather than treating Kubernetes adoption as the definition of a platform.
- How do you measure whether an internal developer platform is successful?
- Measure both developer outcomes and operational results. Relevant signals include time to provision a working environment, deployment failure patterns, support demand, onboarding friction and feedback about common tasks. Reliability indicators should show whether shared capabilities meet their agreed objectives. Compare results against an established baseline and investigate trade-offs: faster provisioning is not an improvement if it creates insecure resources or increases incidents. Avoid judging success solely by the number of tools integrated or teams registered.
- What is the difference between an SLO and an SLA?
- An SLO is a reliability target used to guide engineering and operational decisions. An SLA is an agreement with users or customers that defines service commitments and may specify remedies when those commitments are missed. Both need precise measurement rules, but they serve different purposes. Teams often use internal objectives to provide room for intervention before contractual commitments are threatened. Neither should be selected by copying another service's percentage without examining user needs, dependencies and operating costs.
Study it properly: Platform Engineering and Site Reliability Engineering
Build internal platforms and run reliable systems with Kubernetes, IaC and observability.