30. Internal Developer Platform
Internal Developer Platform
TL;DR
- An Internal Developer Platform (IDP) removes toil by providing self-service, opinionated workflows for common tasks (new service, new database, new pipeline) instead of requiring every team to learn the full underlying stack (Terraform, CI, Kubernetes) from scratch.
- A golden path is the paved, curated, self-service on-ramp for the common case — not the only allowed path.
- Raw platform capability without a curated on-ramp is still just more infrastructure to learn; it does not by itself reduce time-to-provision.
- Self-service without embedded guardrails (sizing, tagging, encryption, cost thresholds) trades governance for speed and produces ungoverned sprawl.
- Successful IDPs start narrow (one or two painful, well-understood workflows) and expand based on demonstrated adoption, not speculative up-front scope.
- An IDP must be treated and measured like an internal product — adoption is not guaranteed just because the platform exists.
Core Concepts
Platform capability vs. self-service
Platform engineering’s core distinction: building powerful, flexible infrastructure is not the same as making it fast and easy for application teams to use. An IDP’s function is to close that gap — converting raw platform capability into a self-service experience application teams actually choose to use over doing things manually.
The failure mode when this gap isn’t closed: a platform team builds genuinely powerful, flexible infrastructure, but application teams still take weeks to provision a new service because they must learn and integrate with every underlying system (Terraform, CI, observability, security tooling) from scratch, every time. Capability without a curated on-ramp is still just more infrastructure to learn — it does not reduce integration burden on its own.
Golden paths
A golden path is an opinionated, paved, self-service workflow for the common case: scaffold a new service and receive sensible defaults already wired in — standard CI pipeline, standard observability, standard security baseline — without manually assembling them.
“Paved,” not “the only path,” is the operative distinction. A well-designed golden path:
- Allows deviation when a team has a genuine, well-justified need that does not fit the standard template.
- Remains clearly the easiest and most-supported default for everyone else.
A golden path that is mandatory and inescapable stops functioning as self-service. It becomes a bottleneck the first time any team’s legitimate need doesn’t fit the template — and at real organizational scale, legitimate mismatches are inevitable.
Self-service and the governance trade-off
Self-service is the IDP’s actual deliverable, but it carries a governance trade-off that must be designed for deliberately rather than discovered after the fact. Fully unreviewed one-click self-service — for example, a team provisioning a production database with zero platform review — trades governance and cost control for speed.
The fix is not removing self-service. It is encoding organizational guardrails directly into the self-service workflow itself:
- Sizing limits
- Required tags (owner, cost center, environment)
- Encryption defaults
- Cost approval thresholds
These are baked into the golden path template so “self-service” stays fast and safe, instead of quietly becoming ungoverned sprawl that surfaces later as a security or cost review finding.
Starting scope
Building a comprehensive platform that covers every conceivable team need from day one — before validating what teams actually want and will adopt — risks producing something over-engineered and under-used.
The more reliable pattern: start narrow, with one or two genuinely painful, well-understood workflows (“spin up a new service” is the canonical first golden path), gather real adoption and feedback, and expand platform scope based on demonstrated demand rather than speculative, comprehensive up-front design.
Platform as product
Treating the IDP as an internal product is the mindset shift that determines whether the investment pays off. If application teams don’t adopt the platform — because it’s harder to use than doing things manually, or doesn’t solve their actual pain point — the platform engineering investment produces no real organizational value, regardless of how technically impressive the underlying infrastructure is.
This requires the same discipline applied to any product people have a real choice about using:
- Real user research with the application teams the platform serves.
- Actively measured adoption metrics (not just deployment status).
- Ongoing feedback loops that feed back into platform scope and design.
Platform Engineering vs. Traditional DevOps/SRE Ownership
| Aspect | Traditional DevOps / Ad-Hoc Self-Service | Platform Engineering (IDP) |
|---|---|---|
| Delivery model | Each team owns and integrates its own CI/CD, infra, observability | Platform team builds paved, reusable golden paths; app teams consume them |
| Onboarding a new service | Days to weeks — assemble pipeline, infra, monitoring manually | Minutes to hours — scaffold from a golden path template |
| Consistency across services | Diverges per team based on who built it and when | Enforced by template; standards applied uniformly |
| Governance | Ad hoc, often discovered after an incident or audit | Encoded into the self-service workflow itself (guardrails) |
| Ops burden | Every team re-solves infra problems independently | Platform team solves once, app teams consume via API/template |
| Failure mode | Toil, inconsistency, slow provisioning | Over-engineering if scope is speculative; low adoption if UX is poor |
| Success metric | Rarely tracked explicitly | Adoption rate, time-to-provision, feedback loops (product mindset) |
Command / Configuration Reference
# Example: minimal Backstage-style software template scaffolding metadata
# (illustrates what a golden path template encodes, not raw infra config)
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: golden-path-new-service
description: Paved path for a new microservice with CI, observability, and security defaults pre-wired
spec:
parameters:
- title: Service details
properties:
name:
type: string
owner:
type: string # required tag — governance guardrail
costCenter:
type: string # required tag — governance guardrail
steps:
- id: fetch-skeleton
action: fetch:template # pulls the standardized repo skeleton
- id: register-ci
action: ci:register # wires the standard CI pipeline, not a custom one
- id: register-catalog
action: catalog:register # registers the new service in the service catalog
# Example: a golden-path CLI scaffold command exposed to app teams
platform new-service --name checkout-api --owner team-payments --cost-center CC-204
# Encodes: standard CI pipeline, standard observability, standard security baseline
# Deviation path: --template custom (requires platform team sign-off)
Common Pitfalls
- Pitfall: A powerful, flexible infrastructure platform that application teams avoid. Why: using it still requires as much integration work as doing things manually — capability without a curated on-ramp. Fix: build and maintain golden paths for the common cases, not just raw platform capability.
- Pitfall: A “golden path” becomes a hard blocker. Why: it was implemented as the only allowed path instead of the paved default, so any legitimate deviation has nowhere to go. Fix: design an explicit, supported deviation/exception process alongside the paved default.
- Pitfall: Self-service database provisioning turns into ungoverned cost and security sprawl. Why: guardrails (sizing, tags, encryption, cost approval) were never embedded in the workflow. Fix: bake guardrails directly into the self-service template so speed and governance are not in tension.
- Pitfall: A comprehensive platform is built speculatively over many months with low actual adoption. Why: scope was based on anticipated needs rather than validated, demonstrated demand. Fix: start narrow with one painful, well-understood workflow; expand based on real usage data.
- Pitfall: A platform team invests heavily in engineering with no adoption metrics tracked. Why: the platform was treated as infrastructure to be built rather than a product to be adopted. Fix: measure adoption and gather feedback continuously, the same as any internal product.
Interview Questions
- “A platform team builds powerful infrastructure, but teams still take weeks to provision a new service. What’s missing?” — tests whether the golden-path/curated-on-ramp gap is correctly diagnosed.
- “Why is a golden path called ‘paved’ rather than ‘the only path’? What happens when a team has a legitimate need outside the template?” — tests understanding of the self-service vs. mandate distinction.
- “Design a self-service workflow for provisioning a production database that stays fast without becoming ungoverned.” — tests whether guardrails are treated as a first-class design requirement, not an afterthought.
- “How would you scope the first six months of a new IDP initiative?” — tests the instinct to start narrow and validated versus comprehensive and speculative.
- “Why should an IDP be measured with product metrics (adoption, retention, feedback) rather than treated as infrastructure?” — tests whether the platform-as-product mindset is genuinely understood.