Platform EngineeringMay 18, 2026

Platform Engineering: Beyond the Backstage Hype

Internal Developer Platforms promise faster delivery and happier engineers. Here's what actually works in 2025, with concrete patterns and golden paths.

Platform Engineering has moved from conference talks to budget lines. Gartner predicts 80% of large software companies will have platform teams by 2026, and the 2024 DORA report ties platform adoption directly to throughput improvements. But buying Backstage licences or spinning up a "DevEx squad" doesn't make you a platform org. Let's get specific about what an Internal Developer Platform (IDP) actually is, what golden paths look like in production, and where most teams fail.

What an IDP really is (and isn't)

An IDP is not a Kubernetes cluster with a nice UI. It's a curated product that abstracts cognitive load away from application developers. The benchmark question: Can a new backend engineer ship a production service on day two without opening a ticket? If the answer is no, you have tooling, not a platform.

The canonical reference architecture from the CNCF Platforms Working Group breaks an IDP into five planes:

| Plane | Purpose | Example tools | |---|---|---| | Developer Control Plane | Self-service interface | Backstage, Port, Cortex | | Integration & Delivery | CI/CD, GitOps | Argo CD, Flux, GitHub Actions | | Resource Plane | Infra primitives | Kubernetes, Crossplane, Terraform | | Monitoring & Logging | Observability | Grafana, OpenTelemetry, Prometheus | | Security | Policy, secrets, identity | OPA, Kyverno, Vault |

Backstage is the UI layer for plane 1. Treating it as the whole platform is the most common anti-pattern we see at DCT.

Golden paths, not golden cages

A golden path is the opinionated, paved route from git init to production. It's not the only route — that's a cage — but it's the one where everything is supported, monitored, and patched for you.

A practical golden path for a Node.js microservice at one of our clients looks like this:

  1. dct scaffold new --template node-api --name payments-svc
  2. Repo created with pre-wired OpenTelemetry, Dockerfile, Helm chart, Renovate config
  3. PR template enforces ADR and SLO declaration
  4. Merge to main triggers Argo CD sync to staging, with Kyverno policies blocking non-compliant manifests
  5. Promotion to prod via a pull request against the GitOps repo, gated on SLO burn rate

The scaffolding is a Backstage Software Template. Here's the minimal template.yaml shape:

apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: node-api
  title: Node.js API (Golden Path)
spec:
  owner: platform-team
  type: service
  parameters:
    - title: Service details
      required: [name, owner]
      properties:
        name: { type: string, pattern: '^[a-z0-9-]+$' }
        owner: { type: string, ui:field: OwnerPicker }
  steps:
    - id: fetch
      action: fetch:template
      input:
        url: ./skeleton
        values: { name: '${{ parameters.name }}' }
    - id: publish
      action: publish:github
      input:
        repoUrl: github.com?owner=acme&repo=${{ parameters.name }}
    - id: register
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}

That 30-line file replaces what used to be a 12-page Confluence runbook. Measure the difference: time-to-first-commit dropped from ~3 days to under 2 hours on the last engagement where we shipped this pattern.

Treat the platform as a product

The teams that fail at platform engineering treat it as an internal IT project. The ones that succeed run it like a SaaS product, with:

  • A product manager (not just a tech lead) who interviews developer-customers
  • A public roadmap in the same Backstage instance
  • SLOs on the platform itself — e.g., scaffolder p95 < 30s, catalog freshness < 5 min
  • A deprecation policy with sunset dates, not surprise removals

The DX metrics that actually correlate with retention and throughput, per the SPACE framework and recent DX research from Nicole Forsgren et al.:

  • Time to 10th PR merged for a new hire
  • Change failure rate on golden-path services vs. bespoke ones
  • Developer-reported friction score (quarterly, 5 questions max)

A pragmatic adoption checklist

Before writing a single line of Backstage plugin code, validate these:

  • [ ] You have at least 30 engineers feeling the pain (below that, a wiki + Terraform modules is cheaper)
  • [ ] One executive sponsor owns the platform budget for 18+ months
  • [ ] You've identified 2-3 high-frequency workflows to pave first (service creation, env provisioning, secret rotation are good candidates)
  • [ ] Your platform team has at least one ex-application engineer — empathy is non-negotiable
  • [ ] You can name your first three internal customers and their top pain point
  • [ ] You've decided what you will not support (e.g., "no bespoke Helm charts in year one")

Where Backstage hurts

Be honest about Backstage's costs. It's a Node.js monorepo with a non-trivial plugin model. Upgrading across minor versions can take a sprint. The catalog YAML sprawl gets ugly past 500 entities. Alternatives like Port (SaaS, no-code catalog modelling) or Cortex are worth evaluating if you don't have 2 FTEs to maintain a Backstage fork. The right answer depends on whether your differentiation lives in the platform itself or in the products it supports.

Key takeaways

  • An IDP is a product, not a stack. If developers still file tickets to ship, you haven't built one.
  • Golden paths are opinionated defaults with escape hatches — never mandates.
  • Backstage solves the UI plane only; pair it with Crossplane/Argo CD/OPA for a complete platform.
  • Measure DevEx with concrete metrics (time-to-10th-PR, change failure rate on paved roads), not survey vibes.
  • Don't start a platform team under ~30 engineers. Below that scale, good modules and docs beat a half-staffed IDP every time.
Share this article

Read also