Platform Engineering and Internal Developer Platforms (IDP)

Platform Engineering focuses on building and maintaining Internal Developer Platforms (IDPs) that enable self-service capabilities for development teams. By abstracting infrastructure complexity, platform teams accelerate delivery while maintaining governance and security.

What is an Internal Developer Platform?

An IDP is a layer on top of existing infrastructure that provides developers with self-service access to environments, deployments, and resources through golden paths – pre-approved, standardized workflows.

IDP Components

  • Service Catalog: Templates for creating new services
  • Environment Management: Self-service environment provisioning
  • CI/CD Integration: Standardized deployment pipelines
  • Observability: Built-in monitoring and logging
  • Developer Portal: Single pane of glass for all services

Backstage Developer Portal

# catalog-info.yaml - Service definition
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: payment-service
  description: Payment processing microservice
  annotations:
    github.com/project-slug: company/payment-service
    backstage.io/techdocs-ref: dir:.
spec:
  type: service
  lifecycle: production
  owner: team-payments
  system: checkout
  providesApis:
    - payment-api
  dependsOn:
    - component:user-service
    - resource:payments-db

Software Templates

# template.yaml - New service template
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: microservice-template
  title: Create Microservice
  description: Create a new microservice with CI/CD
spec:
  owner: platform-team
  type: service
  
  parameters:
    - title: Service Details
      required: [name, owner]
      properties:
        name:
          title: Service Name
          type: string
          pattern: '^[a-z0-9-]+$'
        owner:
          title: Owner Team
          type: string
          ui:field: OwnerPicker
        language:
          title: Language
          type: string
          enum: [python, go, nodejs]
          
  steps:
    - id: fetch
      name: Fetch Template
      action: fetch:template
      input:
        url: ./skeleton
        values:
          name: ${{ parameters.name }}
          owner: ${{ parameters.owner }}
          
    - id: publish
      name: Create Repository
      action: publish:github
      input:
        repoUrl: github.com?owner=company&repo=${{ parameters.name }}
        
    - id: register
      name: Register in Catalog
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
        catalogInfoPath: /catalog-info.yaml

Crossplane for Infrastructure

# Composite Resource Definition
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
  name: databases.platform.company.com
spec:
  group: platform.company.com
  names:
    kind: Database
    plural: databases
  versions:
  - name: v1
    served: true
    referenceable: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              size:
                type: string
                enum: [small, medium, large]
              engine:
                type: string
                enum: [postgres, mysql]
---
# Composition
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: database-aws
spec:
  compositeTypeRef:
    apiVersion: platform.company.com/v1
    kind: Database
  resources:
  - name: rds
    base:
      apiVersion: rds.aws.crossplane.io/v1beta1
      kind: Instance
      spec:
        forProvider:
          region: us-east-1
          dbInstanceClass: db.t3.medium
          engine: postgres
          masterUsername: admin

Developer Self-Service

# Developer requests a database
apiVersion: platform.company.com/v1
kind: Database
metadata:
  name: orders-db
  namespace: orders-team
spec:
  size: medium
  engine: postgres

Platform Metrics

  • Time to first deployment for new developers
  • Lead time for changes
  • Deployment frequency
  • Platform adoption rate
  • Developer satisfaction (NPS)

Conclusion

Platform Engineering reduces cognitive load on developers while maintaining security and compliance. By building golden paths with tools like Backstage and Crossplane, platform teams enable self-service without sacrificing governance.