ESC
Type to search guides, tutorials, and reference documentation.
Verified by Garnet Grid

Platform Engineering & Internal Developer Platforms

Build internal developer platforms. Covers platform engineering principles, golden paths, self-service infrastructure, developer portals, and measuring platform adoption and developer productivity.

Platform engineering exists because DevOps at scale doesn’t work by giving every team raw access to Terraform, Kubernetes, and CI/CD pipelines. The cognitive load is too high. Teams spend 40% of their time on infrastructure instead of building features. Platform engineering creates “golden paths” — self-service, opinionated workflows that let developers deploy without becoming infrastructure experts.

This guide covers how to build an Internal Developer Platform (IDP) that teams actually want to use.


What a Platform Provides

Developer Experience Layer
┌──────────────────────────────────────────────┐
│  Developer Portal (Backstage, Port, Cortex)   │
│  • Service catalog  • Documentation           │
│  • Templates        • Scorecard compliance     │
└───────────────────────┬──────────────────────┘

Platform Capabilities Layer
┌───────────┬───────────┬───────────┬──────────┐
│ Deploy    │ Observe   │ Secure    │ Data      │
│ • CI/CD   │ • Metrics │ • Secrets │ • DBaaS   │
│ • GitOps  │ • Logs    │ • mTLS   │ • Cache   │
│ • Preview │ • Traces  │ • Scan   │ • Queue    │
└───────────┴───────────┴───────────┴──────────┘

Infrastructure Layer
┌───────────────────────────────────────────────┐
│  Kubernetes │ Cloud Providers │ Terraform/Pulumi │
└───────────────────────────────────────────────┘

Golden Paths

A golden path is the opinionated, supported way to do something:

Example: Creating a New Service

# Golden path template (Backstage scaffolding)
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: new-microservice
  title: Create a New Microservice
  description: Production-ready service with CI/CD, monitoring, and docs
spec:
  type: service
  parameters:
    - title: Service Details
      properties:
        name:
          type: string
          description: Service name (lowercase, hyphens only)
          pattern: "^[a-z][a-z0-9-]*$"
        language:
          type: string
          enum: ["go", "python", "typescript"]
        team:
          type: string
          description: Owning team
        tier:
          type: string
          enum: ["tier-1-critical", "tier-2-important", "tier-3-standard"]
  
  steps:
    - id: scaffold
      action: fetch:template
      input:
        url: ./templates/${{ parameters.language }}
        values:
          name: ${{ parameters.name }}
          team: ${{ parameters.team }}
    
    - id: create-repo
      action: github:create-repo
      input:
        repoUrl: github.com/company/${{ parameters.name }}
    
    - id: create-ci
      action: github-actions:create-workflow
      input:
        template: .github/workflows/${{ parameters.language }}.yml
    
    - id: register-catalog
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.create-repo.output.repoContentsUrl }}

Result: Developer fills out a form, gets a fully configured repo with CI/CD, Kubernetes manifests, monitoring dashboards, and Backstage catalog entry in under 5 minutes.


Developer Portal (Backstage)

Service Catalog

apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: order-service
  description: Order management microservice
  annotations:
    github.com/project-slug: company/order-service
    pagerduty.com/service-id: PORDER123
    grafana/dashboard-url: https://grafana.internal/d/orders
    sonarqube.org/project-key: order-service
  tags:
    - go
    - grpc
    - tier-1
spec:
  type: service
  lifecycle: production
  owner: team-commerce
  system: commerce-platform
  providesApis:
    - order-api
  consumesApis:
    - inventory-api
    - payment-api
  dependsOn:
    - resource:orders-database
    - resource:orders-cache

Self-Service Infrastructure

What Should Be Self-Service

CapabilitySelf-Service?Implementation
Create new service✅ YesBackstage template
Deploy to staging✅ YesCI/CD pipeline
Deploy to production✅ Yes (with guardrails)GitOps + automated checks
Provision database✅ YesTerraform module + approval
Create DNS record✅ YesAutomated via API
Request cloud account⚠️ SemiApproval workflow
Change network rules❌ NoSecurity team review
Access production data❌ NoFormal access request

Measuring Success

DORA Metrics

MetricDefinitionEliteHighMediumLow
Deployment FrequencyHow often you deployOn-demand (multiple/day)Weekly-monthlyMonthly-biannualBiannual+
Lead TimeCommit to production< 1 hour1 day - 1 week1-6 months6+ months
Change Failure Rate% of deploys causing issues0-15%16-30%31-45%46-60%
MTTRTime to restore service< 1 hour< 1 day< 1 week1+ week

Platform Adoption Metrics

MetricTargetMeasures
Golden path adoption> 80% of new servicesAre teams using the platform?
Time to first deploy< 1 dayHow fast can a new dev be productive?
Self-service resolution> 90%Can devs solve problems without platform team?
Developer satisfaction (NPS)> 40Do developers like using the platform?
Ticket volume to platform teamDecreasing trendIs self-service working?

Anti-Patterns

Anti-PatternProblemFix
Building a platform nobody asked forLow adoption, wasted effortStart with developer interviews, solve real problems
Forcing platform adoptionResentment, shadow ITMake the golden path easier than the alternative
Platform as bottleneckPlatform team reviews every changeSelf-service with guardrails, not gatekeeping
Over-abstractingDevelopers can’t debug through the abstractionAllow escape hatches, expose lower layers when needed
No feedback loopPlatform team guesses what developers needRegular surveys, embedded platform engineers

Checklist

  • Developer interviews: top pain points documented
  • Golden paths defined for: new service, deploy, database, monitoring
  • Developer portal deployed (Backstage, Port, or similar)
  • Service catalog: all services registered with ownership
  • Self-service: developers can provision without tickets
  • Templates: scaffolding for new services, CI/CD, infra
  • Guardrails: automated security/compliance checks in pipeline
  • Documentation: living docs in the portal, not wikis nobody reads
  • DORA metrics tracked and improving
  • Developer satisfaction measured quarterly
  • Platform team roadmap driven by developer feedback

:::note[Source] This guide is derived from operational intelligence at Garnet Grid Consulting. For platform engineering consulting, visit garnetgrid.com. :::

Jakub Dimitri Rezayev
Jakub Dimitri Rezayev
Founder & Chief Architect • Garnet Grid Consulting

Jakub holds an M.S. in Customer Intelligence & Analytics and a B.S. in Finance & Computer Science from Pace University. With deep expertise spanning D365 F&O, Azure, Power BI, and AI/ML systems, he architects enterprise solutions that bridge legacy systems and modern technology — and has led multi-million dollar ERP implementations for Fortune 500 supply chains.

View Full Profile →