Skip to content
Platform Engineering Developer Experience DevOps

Golden Paths and Developer Experience: Building an Internal Developer Platform

Ian David Rossi
Ian David Rossi February 15, 2022 · 6 min read

TL;DR

Golden Paths and Developer Experience: Building an Internal Developer Platform without the fluff: focus on outcomes, measure them, and stop pretending slides are progress.

“If five teams solve the same problem five different ways, you do not have autonomy—you have tax.”

Why Golden Paths?

Developers move faster when the right way is the easy way. Golden paths reduce cognitive load by providing supported templates, documentation, and automation that encode security and reliability.

When to Invest

  • Too many bespoke pipelines/templates; onboarding a new service takes weeks.
  • Repeated incidents caused by drift, missing policies, or inconsistent observability.
  • Platform/ops flooded with tickets for namespaces, certs, and pipelines.
  • Compliance asks for SLOs, SBOMs, signed images—teams can’t prove it.
  • Developers spend more time wiring plumbing than shipping features.

If this sounds familiar, golden paths and an Internal Developer Platform (IDP) give DevOps a product home.

Principles of Great DX

  • Consistency: One way to do common things; fewer decisions
  • Self‑service: Create services, pipelines, and environments without tickets
  • Guardrails: Policies and templates prevent foot‑guns by default
  • Observability: Built‑in telemetry, alerts, and dashboards
  • Product mindset: Roadmap, user research, release notes; DX is a product feature.

Building Blocks

  • Service templates: Boilerplates with tests, CI/CD, telemetry, and deployment manifests
  • Backstage portal: Discoverability, docs, and scaffolder for templates
  • Policy‑as‑code: Kyverno/OPA checks in CI and admission
  • GitOps: Argo/Flux apply changes reliably across environments

Example: Backstage Scaffolder Flow

  1. Developer selects “HTTP API Service” template
  2. Inputs service name, owners, runtime (e.g., Node, Go), database
  3. Portal generates repos: api-service and api-config (manifests)
  4. CI builds, signs, and publishes images; GitOps deploys to dev
  5. Dashboards and runbooks auto‑generated; alerts wired

“The moment scaffolding becomes a ticket, the golden path is dead.”

Example: Minimal Backstage Template Skeleton

Backstage templates are ultimately just YAML with parameters and steps. Keep them small and opinionated, then iterate.

apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: http-api-service
spec:
  parameters:
    - title: Service
      required: [name, owner]
      properties:
        name:
          type: string
        owner:
          type: string
  steps:
    - id: fetch
      name: Fetch skeleton
      action: fetch:template
      input:
        url: ./skeletons/http-api
    - id: publish
      name: Publish repo
      action: publish:github
      input:
        repoUrl: github.com?repo=$&owner=acme
    - id: register
      name: Register in catalog
      action: catalog:register
      input:
        repoContentsUrl: $

If you standardize service metadata here (owner, tier, runtime, region), you can drive policies, dashboards, and alerts automatically.

Runbook: Designing a Golden Path

  1. Pick one service type: e.g., “HTTP API.” Do not boil the ocean.
  2. Define the contract: Inputs (owner, data tier), outputs (repo, pipeline, dashboards), supported runtimes.
  3. Encode defaults: Tests, build, scan, sign, SBOM, deploy, OTel, dashboards, alerts.
  4. Add guardrails: CI checks + admission policies for non-root, resource requests, signed images, labels.
  5. Self-service everything: Namespace, secrets, config, rollouts. Tickets are a smell.
  6. Publish and support: Docs, runbooks, office hours. A path without support becomes a trap.
  7. Measure and iterate: Adoption, lead time, ticket volume, policy violations, MTTR.

Guardrails and Policy

  • Kyverno/OPA: Enforce non‑root, resource sizing, signed images, required labels.
  • Admission + CI: Policies run in PRs and at admission; actionable error messages.
  • GitOps: Desired state in Git; reconciled automatically; drift alerts.
  • Security baked in: Signed artifacts (Cosign), SBOMs, vulnerability scans, mTLS by default.

Instrumentation and Docs

  • OpenTelemetry baked in; trace IDs in logs
  • Standard dashboards for latency, errors, saturation
  • Runbooks with common failure modes and remediation
  • How-to guides: Language-specific examples (feature flags, tracing, secrets, retries) alongside templates.

Measuring DX

  • Lead time for change and time to first deploy
  • % services using golden paths; deprecation of legacy paths
  • Developer NPS/CSAT; support requests per service per month
  • Policy violations per service (trending down as templates improve)
  • Onboarding time for new engineers/services

Adoption Plan

  1. Identify your top two service types; build templates
  2. Add policies and GitOps; launch via a portal (Backstage)
  3. Pilot with two teams; instrument DX metrics
  4. Expand to data pipelines, batch jobs, and async workers
      1. Run platform office hours; gather friction logs; refine templates monthly.
      1. Publish release notes/migration guides for template changes; retire old paths intentionally.

Pitfalls

  • Over‑customization per team; templates drift and lose supportability
  • No ownership: lack of a platform product team to maintain paths
  • Weak docs: templates ship without examples and runbooks
  • Treating paths as “optional” forever; adoption stalls—make paved roads the easy path, not a side path.
  • Too many templates; standardize and deprecate aggressively.

Case Study (Hypothetical)

An org with 80 services had five CI/CD patterns and no consistent observability. Onboarding took 3 weeks. The platform team shipped a Backstage portal with one API template: CI/CD, OTel, dashboards, policy checks, and GitOps. Within two quarters, 65% of services adopted; time to first deploy dropped to 2 days; policy violations fell 50%. Platform NPS rose from 22 to 54 after adding self-service and release notes.

30/60/90 Plan

  • 30 days: Pick one service type; build template with CI/CD, OTel, policy checks; set SLOs for portal uptime and template deploy success; publish mission and support channels.
  • 60 days: Launch Backstage scaffolder; add self-service for namespaces/secrets; enforce core policies (non-root, labels, signed images); start DX metrics (lead time, adoption, tickets).
  • 90 days: Add more service types (batch, FE), release notes, and migration guides; retire old patterns; run NPS/CSAT survey; publish roadmap and office hours.

Governance and Ownership

  • Service catalog with owners, SLOs, and escalation paths for platform components (portal, templates, GitOps, policies).
  • Change policy: Template/policy changes via PRs with migration notes and rollback steps; no out-of-band edits.
  • Exception handling: Temporary bypasses with owner/expiry; visible to teams; reviewed weekly.
  • Transparency: Platform status page showing portal, GitOps, registry, ingress health.

Tooling Stack

  • Portal: Backstage (scaffolder, software catalog, docs).
  • CI/CD: GitHub Actions/GitLab CI with reusable workflows; build/sign (Cosign), test, SBOM, scan.
  • GitOps: Argo CD/Flux for config delivery; templates produce separate app/config repos.
  • Policy: Kyverno/OPA enforced in CI and admission (non-root, labels, signed images, network policies).
  • Observability: OpenTelemetry baked into templates; Grafana dashboards and Alertmanager policies generated per service.
  • Secrets/Config: Vault/KMS + CSI; sealed secrets references in manifests.
  • ChatOps/Self-service: Bots for namespace/service creation; audit logs.

Keep the stack small and well-documented; paved roads must be boring and reliable.

Pitfalls and How to Avoid Them

  • Template sprawl: Too many options; standardize a small set and deprecate aggressively.
  • Optional guardrails: Policies that can be skipped; enforce in CI and admission with clear errors.
  • Weak docs: Templates without examples/runbooks; fix with side-by-side code samples and quickstart videos.
  • No owner: Platform without product ownership; assign PM + engineering leads with roadmap and KPIs.
  • Unmeasured DX: Shipping templates without measuring adoption or outcomes; track lead time, ticket volume, NPS.

Metrics That Matter

  • Time to first deploy; lead time for change.
  • Adoption rate: % services on golden paths; retire rate of legacy paths.
  • Ticket volume per service/month; time to resolve platform tickets.
  • Policy violations per service (trend down as templates mature).
  • Developer NPS/CSAT; qualitative feedback from office hours.

Case Study (Hypothetical)

An org with 80 services had five CI/CD patterns and no consistent observability. Onboarding took 3 weeks. The platform team shipped a Backstage portal with one API template: CI/CD, OTel, dashboards, policy checks, and GitOps. Within two quarters, 65% of services adopted; time to first deploy dropped to 2 days; policy violations fell 50%. Platform NPS rose from 22 to 54 after adding self-service and release notes.

Developer Experience Checklist

  • Templates include CI/CD, tests, OTel, dashboards, alerts, policies.
  • Portal/ChatOps self-service for namespaces/services/secrets with audit logs.
  • Policies enforced in CI + admission; clear remediation messages.
  • Runbooks and docs shipped with templates; language-specific examples.
  • Release notes and migration guides for template/policy changes.
  • DX metrics tracked and reviewed monthly; feedback loop active.
  • Ownership: platform PM + engineering leads; clear escalation paths.
  • Status page for platform components; published SLOs for portal/GitOps/registry/ingress.

Conclusion

Golden paths make good practices the default path. Treat DX as a product, measure it, and continuously reduce developer toil.

Glossary (Tooltips)

  • IDP: The platform product golden paths typically live inside.
  • DX: What you’re optimizing when you reduce toil and speed onboarding.
  • NPS: One way to quantify whether developers would recommend your platform.
  • CSAT: Useful for platform support tickets and self-service flows.
  • OTel: The default for baked-in observability in templates.
  • SLO: How you keep the platform honest once the golden path is adopted.