Platform Engineering: Building Developer Portals That Teams Actually Use
Platform engineering is the practice of building internal developer platforms (IDPs) that make engineers self-sufficient. Here's how to design a developer portal that drives adoption rather than resistance.
# Platform Engineering: Building Developer Portals That Teams Actually Use Platform engineering emerged as a response to DevOps overload — developers drowning in Kubernetes configs, Terraform modules, and CI/CD YAML. A good Internal Developer Platform (IDP) abstracts this complexity behind a self-service portal. A bad one adds another tool nobody uses. ## The Core Problem Without a platform, every team independently reinvents: - How to provision infrastructure - How to set up CI/CD - How to configure observability - How to manage secrets and environments This creates inconsistency, security gaps, and massive cognitive load. ## Anatomy of an IDP A mature IDP has five layers: ``` ┌──────────────────────────────────────────┐ │ 1. Developer Portal (UI — e.g. Backstage) │ ├──────────────────────────────────────────┤ │ 2. Self-Service Workflows │ │ (create app, add DB, deploy to env) │ ├──────────────────────────────────────────┤ │ 3. Golden Paths (Curated Templates) │ │ (service templates, IaC modules) │ ├──────────────────────────────────────────┤ │ 4. Orchestration Layer │ │ (Backstage scaffolder, Crossplane) │ ├──────────────────────────────────────────┤ │ 5. Underlying Infrastructure │ │ (Kubernetes, Terraform, Vault, etc.) │ └──────────────────────────────────────────┘ ``` ## The Golden Path Pattern A golden path is an opinionated, supported way to do something. It's not mandatory — it's just so easy that developers choose it by default. ```yaml # Backstage software template — provision a new Node.js service apiVersion: scaffolder.backstage.io/v1beta3 kind: Template metadata: name: nodejs-service spec: steps: - id: fetch-template action: fetch:template input: url: ./template - id: create-repo action: github:repo:create - id: provision-infra action: terraform:apply input: module: service-baseline ``` One command → repo, CI/CD, monitoring, secrets, DNS. Done. ## Why Portals Fail - **Too much abstraction**: Developers can't debug when golden paths break. - **No escape hatch**: Power users need to go off-path without losing support. - **Built in isolation**: The platform team doesn't treat developers as customers. - **Documentation is an afterthought**: Discovery is as important as capability. ## Measuring Platform Success - **DORA metrics**: Deployment frequency, change failure rate, MTTR. - **Cognitive load**: Survey developers monthly on friction points. - **Adoption rate**: % of new services using golden paths. Treat your platform like a product. Have a roadmap, a backlog, and customer interviews. Platforms that nobody uses are just overhead.
