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 |
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.
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:
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 |
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:
- Pick one workload type—containerized APIs are a good starting point
- Build the golden path—template, pipeline, monitoring, documentation
- Onboard pilot teams—get feedback, iterate
- Measure and communicate—show time savings, security improvements
- 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.




