Skip to content

13 · Platform Engineering#

"The DevOps team is answering 14 tickets while the developer smokes a cigarette waiting. This isn't sustainable." — the bitter truth of corporate DevOps

Internal Developer Platform (IDP) = an opinionated "golden path" that developers use in self-service mode.

Table of Contents#

File Topic
Internal-Developer-Platform.md What IDP is, why it starts with Backstage, build vs buy
Backstage-Setup.md Backstage setup, plugins, scaffolder templates
Golden-Paths.md Templates for "spin up a new service → in 5 min"
Service-Catalog.md Service ownership, dependency graph, on-call mapping
Platform-as-Product.md Treat the developer like a customer; NPS, SLA, roadmap

Philosophy#

The platform team's product is an internal product delivered to other engineers. Customer = developer. Customer satisfaction = developer productivity.

Platform vs DevOps team#

DevOps team (anti-pattern) Platform team (healthy)
"Take the ticket, run it" Offers self-service tools
Hoards knowledge (gatekeeper) Shares knowledge (enabler)
Single-person dependent (bus factor 1) Tools are documented, multi-owned
"Firefighter" Fire preventer
Developer's adversary Developer's customer

Minimum Backstage setup#

Backstage core
├── Catalog            ← service inventory + ownership
├── Scaffolder         ← golden path templates
├── TechDocs           ← markdown-as-docs
├── Search             ← global cross-resource search
├── Kubernetes plugin  ← cluster overview
└── Cost Insights      ← Kubecost/AWS integration

"Golden Path" example — new microservice#

$ backstage scaffold create

? Template:           [ Go REST API + Postgres ]
? Service name:       payments
? Owner team:         @payments-team
? Cloud:              AWS
? Region:             eu-west-1

[What Backstage does behind the scenes]
├── GitHub repo opened       (from the template)
├── CODEOWNERS, README, CI   added
├── Terraform PR             (RDS, IAM)
├── ArgoCD Application       in the k8s-config repo
├── Datadog dashboard        created
├── PagerDuty rotation       assigned
├── Slack #payments-alerts   opened
├── Backstage Catalog        entry registered
└── On-boarding doc          created (TechDocs)

⏱️ Total time: ~8 minutes

Build vs buy decision tree#

Company size?
├── < 50 engineers → Vendor SaaS (Port, Cortex)
├── 50-500        → Backstage self-host + Crossplane
└── 500+          → In-house build on a custom platform

Anti-patterns#

  • ❌ Making the platform "mandatory" instead of a "service" — everyone ends up feeling vendor-locked-in
  • ❌ Not measuring NPS — you don't know why developers aren't using it
  • ❌ "You can't ship to production without going through us" — a bottleneck, demoralizing
  • ❌ All guardrails are hard blocks — without an escape hatch, bypasses start happening
  • ❌ The platform team has no backlog of its own, it just answers tickets