← Perspectives

Cloud Engineering

Azure: Platform Engineering

Platform engineering has moved from buzzword to business imperative. The goal is simple: reduce cognitive load for development teams while maintaining the governance that enterprises require. Azure offers multiple paths to this destination—choosing the right one depends on where your organization sits on the maturity curve.9 min read

Platform engineering has moved from buzzword to business imperative. The goal is simple: reduce cognitive load for development teams while maintaining the governance that enterprises require. Azure offers multiple paths to this destination—choosing the right one depends on where your organization sits on the maturity curve.

The Platform Engineering Mindset

Platform engineering isn't about building another layer of infrastructure for developers to navigate. It's about creating "golden paths"—opinionated, well-lit routes that make doing the right thing the easy thing. Teams can deviate when they need to, but the default path handles 80% of use cases with minimal friction.

This represents a shift from the early DevOps era, where we expected every team to become infrastructure experts. That approach created bottlenecks, inconsistency, and a lot of YAML files that nobody fully understood. Platform engineering acknowledges that developers want to ship features, not debug Kubernetes networking.

🛤️ What Makes a Golden Path?

A golden path is a supported, maintained route to production. It includes templates, automation, observability, and documentation. Teams using golden paths get faster deployments, better security posture, and access to platform team support. Teams going off-path take on additional responsibility—and that's okay, as long as it's a conscious choice.

Azure Compute Options: Choosing Your Foundation

Azure provides multiple compute options, each with different tradeoffs between control and convenience. The right choice depends on your workload characteristics, team skills, and organizational constraints.

Azure Kubernetes Service (AKS)

Full Kubernetes with Azure integration

  • Maximum flexibility and portability
  • Complex workloads, microservices
  • Teams with Kubernetes expertise
  • Multi-cloud or hybrid requirements

Azure Container Apps (ACA)

Managed containers without Kubernetes complexity

  • Serverless containers with scale-to-zero
  • Built-in Dapr for microservices patterns
  • Event-driven workloads
  • Teams new to containers

Azure App Service

Fully managed web application hosting

  • Web apps and APIs
  • Deployment slots for blue-green
  • Integrated authentication
  • Minimal infrastructure knowledge

Azure Functions

Event-driven serverless compute

  • Event processing, integrations
  • Pay-per-execution pricing
  • Triggers from 20+ Azure services
  • Durable Functions for workflows

The Decision Framework

Consideration AKS Container Apps App Service Functions
Control Full Medium Limited Minimal
Operational overhead High Medium Low Minimal
Scale to zero With KEDA Native No Native
Kubernetes skills needed Yes Helpful No No
Multi-cloud portable Yes Partially No No
Best for Complex microservices Modern apps, APIs Web apps Event processing
Our Recommendation

For most enterprise teams starting their platform engineering journey, we recommend Azure Container Apps as the default compute platform. It provides the container benefits (portability, consistency, density) without the Kubernetes operational burden. Reserve AKS for teams with specific requirements that Container Apps can't meet.

Internal Developer Platform Architecture

An Internal Developer Platform (IDP) abstracts infrastructure complexity behind self-service interfaces. Developers interact with the platform through templates, CLIs, and portals—not directly with Azure resources.

Internal Developer Platform on Azure Developer Experience Layer Service Catalog Self-Service Portal CLI / API Documentation Scorecards Platform Orchestration Azure DevOps / GitHub Terraform / Bicep Policy Engine Secret Mgmt GitOps Platform Services Observability (Monitor, AppInsights) Security (Defender, Sentinel) Networking (Private Link, FW) Identity (Entra ID, RBAC) Data Services (SQL, Cosmos, Redis) Messaging (Service Bus) Compute Foundation AKS Clusters (Complex workloads) Container Apps (Default path) App Service (Web apps) Functions (Event-driven)

Figure 1: Internal Developer Platform architecture layers

Key Components

Service Catalog: A curated list of approved services, templates, and integrations. Developers browse the catalog to find pre-approved building blocks rather than figuring out which Azure services to use.

Self-Service Portal: A UI (often built with Backstage, Port, or custom tooling) where developers request resources, view their applications, and access documentation. The portal abstracts the underlying Azure complexity.

GitOps Pipeline: Infrastructure and application changes flow through Git. Pull requests trigger policy checks, and merges trigger deployments. This creates an audit trail and enables rollback.

Golden Paths in Practice

Abstract concepts become concrete through golden paths. Here's an example of what a golden path looks like for deploying a new microservice:

Golden Path: New Microservice Deployment 1. Request Developer fills form in portal: name, team, environment 2. Generate Template creates repo with Dockerfile, Bicep, pipelines 3. Provision Pipeline deploys Container App, DNS, monitoring 4. Connect Service mesh, secrets injected, RBAC configured 5. Ship Developer pushes code, CI/CD runs, app deployed T+0 T+2 min T+10 min T+12 min T+15 min What developers get automatically: Container App environment • Private endpoint • Managed identity • Key Vault integration • Application Insights • Alerts • DNS record • CI/CD pipeline • RBAC permissions

Figure 2: Developer experience from request to production in ~15 minutes

Implementing with Azure DevOps and GitHub

Both Azure DevOps and GitHub Actions work well for platform engineering. The choice often comes down to existing investments and specific feature requirements.

Capability Azure DevOps GitHub Actions
Pipeline authoring YAML + visual designer YAML only
Template reuse Template repositories Reusable workflows, composite actions
Environments Environment with approvals, checks Environments with protection rules
Service connections Managed service connections OIDC federation (recommended)
Artifact management Azure Artifacts (NuGet, npm, Maven) GitHub Packages
Secret management Variable groups + Key Vault Secrets + Key Vault
Example: GitHub Actions with OIDC to Azure
name: Deploy to Container Apps

on:
  push:
    branches: [main]

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4
      
      - name: Azure Login (OIDC)
        uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      
      - name: Deploy Container App
        uses: azure/container-apps-deploy-action@v1
        with:
          containerAppName: myapp
          resourceGroup: rg-platform-prod
          imageToDeploy: myacr.azurecr.io/myapp:${{ github.sha }}

Key Takeaway

Use OIDC federation instead of service principal secrets. This eliminates credential rotation overhead and reduces the blast radius of a compromised workflow.

Observability as a Platform Service

Application teams shouldn't configure monitoring from scratch. The platform provides observability as a service—applications inherit dashboards, alerts, and log queries automatically.

The Observability Stack

  • Azure Monitor: Centralized metrics and logs across all workloads
  • Application Insights: APM with distributed tracing (auto-instrumentation where possible)
  • Log Analytics: Centralized workspace with standardized queries
  • Grafana (Azure Managed): Unified dashboards across Azure and non-Azure sources
  • Alerts: Pre-configured alert rules for golden signals (latency, traffic, errors, saturation)

The platform team maintains base dashboards and alert templates. Application teams can customize, but they start with sensible defaults that cover 80% of monitoring needs.

Measuring Platform Success

Platform engineering is an investment. You need metrics to demonstrate value and identify improvement areas.

Metric What It Measures Target
Lead time for changes Commit to production < 1 day
Deployment frequency Production deployments per team Multiple per day
Time to onboard New service to production < 1 hour (golden path)
Golden path adoption % of services using templates > 80%
Developer satisfaction Survey scores on platform experience NPS > 30
Security findings Vulnerabilities in production Trending down

Getting Started

Platform engineering is a journey, not a destination. Start small, prove value, and expand:

  1. Pick one workload type—containerized APIs are a good starting point
  2. Build the golden path—template, pipeline, monitoring, documentation
  3. Onboard pilot teams—get feedback, iterate
  4. Measure and communicate—show time savings, security improvements
  5. Expand the catalog—add more workload types, more self-service capabilities

The goal isn't perfection—it's continuous improvement in developer productivity while maintaining the governance that your organization requires.