Platform Engineering: Building an Internal Developer Platform from Scratch
Platform engineering is the discipline of building tools and workflows that make developers self-sufficient. Instead of filing tickets and waiting for DevOps, developers provision infrastructure, deploy services, and manage environments through a self-service portal. Therefore, the platform team becomes a product team — their product is developer productivity.
The Problem: Developer Friction
In a typical organization, deploying a new microservice takes 2-3 weeks. The developer files an infrastructure ticket (wait 2 days), gets a Kubernetes namespace (wait 1 day), requests a database (wait 2 days), configures CI/CD (half a day), sets up monitoring (half a day), and configures networking (another day). Moreover, each step involves a different team, a different tool, and a different approval process.
An Internal Developer Platform (IDP) compresses this to 15 minutes. The developer fills in a form — service name, team, database type, environment — and the platform provisions everything automatically. The result: the same microservice is production-ready before the old process would have processed the first ticket.
What an IDP Actually Contains
A practical IDP has five layers:
1. Service Catalog — A searchable registry of every service, who owns it, what it depends on, and where its documentation lives. When someone gets paged at 2 AM, they can immediately find the runbook, the owning team, and the monitoring dashboard. Backstage is the most popular tool for this.
2. Software Templates (Golden Paths) — Pre-configured project templates that create a new service with CI/CD, monitoring, infrastructure, and documentation already wired up. These encode your organization’s best practices into reusable patterns.
3. Infrastructure Provisioning — Self-service access to databases, caches, queues, and other infrastructure through a simple interface. Crossplane, Terraform modules, or Pulumi programs behind a Backstage template.
4. Deployment Pipeline — Standardized CI/CD that works the same way for every service. GitHub Actions, GitLab CI, or Jenkins pipelines defined in the template and configured automatically.
5. Observability — Pre-configured dashboards, alerts, and logging for every service. When a new service is created from a template, its Grafana dashboard and PagerDuty integration exist from day one.
Building Your First Golden Path
Don’t try to build everything at once. Start with the single most common developer request — probably “I need a new REST API with a database.” Build one golden path that handles this end-to-end.
# What the developer sees: a simple form
# What happens behind the scenes:
1. GitHub repository created from template
- Application code (Spring Boot / Express / Go)
- Dockerfile + Kubernetes manifests
- GitHub Actions CI/CD pipeline
- catalog-info.yaml for Backstage
2. Kubernetes namespace created
3. Database provisioned (Crossplane PostgreSQLInstance)
4. Credentials stored in Kubernetes Secret
5. Grafana dashboard created from template
6. PagerDuty service linked
7. Service registered in Backstage catalog
# Total time: 5-15 minutes (mostly waiting for database provisioning)
# Previous time: 2-3 weeks of ticketsAfter the first golden path works reliably, add more: “I need a data pipeline,” “I need a frontend application,” “I need a scheduled job.” Each golden path serves a common developer need and eliminates a category of tickets.
Measuring Platform Success
A platform is successful when developers use it voluntarily and ship faster. Track these metrics:
- Time to first deploy (new service): The most impactful metric. Target: under 1 hour.
- Time to first deploy (new hire): How quickly a new developer can ship a change. Target: day one.
- Golden path adoption rate: What percentage of new services use templates? Target: above 80%.
- Ticket volume reduction: Infrastructure and DevOps tickets should decrease as self-service increases.
- Developer satisfaction: Survey quarterly. If developers don’t like your platform, fix it or they’ll work around it.
Common Mistakes
Building a platform nobody asked for. Talk to developers first. What actually slows them down? It might not be what you think.
Making the platform mandatory. If developers can’t bypass it for edge cases, they’ll resent it. Paved roads, not walled gardens.
Over-engineering the first version. Start with Backstage + one template + one Crossplane composition. Expand based on demand, not speculation.
Platform team as gatekeepers. Self-service means self-service. Add guardrails (cost limits, security policies) but remove gates (approval workflows for standard requests).
Related Reading:
Resources:
In conclusion, platform engineering isn’t about building a fancy portal — it’s about systematically removing friction from the developer workflow. Start small, solve real pain points, and expand based on what developers actually need. The best platform is the one developers choose to use.