Engineering perspectives
Platform Engineering in Practice: Building Internal Developer Platforms with Kubernetes, CI/CD and Infrastructure as Code
Reference IDP architecture for self-service environments without sacrificing guardrails.
24 September 2026 · 26 min read
Platform engineering turns fragmented cloud accounts, CI templates, and tribal knowledge into a product: the Internal Developer Platform (IDP). For enterprises shipping AI features, traditional platforms must extend to model routing, secure tool gateways, governed data pipelines, and FinOps guardrails without forcing every squad to become a cluster admin. This guide defines IDP capabilities, reference architecture, golden paths, team topologies, and metrics that resonate with European engineering leaders. It connects to enterprise agentic AI architecture, FinOps for Kubernetes and AI, and AI-ready data governance. Damascode, Digital Agency, Lda builds and modernizes platforms through IT consulting, nearshore software development, and software development outsourcing when you need sustained platform squads.
Table of contents
- What an IDP is (and is not)
- Platform as product mindset
- Capability map for modern enterprises
- Reference architecture
- Golden paths and templates
- Self-service vs ticket ops
- Security and compliance integration
- AI and agent platform extensions
- Developer experience metrics
- Team topologies and staffing
- Build vs buy vs partner
- Implementation roadmap
- Code and config examples
- Operating rituals
- FAQ
- References
What an IDP is (and is not)
An IDP is not only Kubernetes, and not a dumping ground for Helm charts. It is the curated interface through which application teams provision, deploy, observe, and secure software with guardrails.
| IDP is | IDP is not |
|---|---|
| Opinionated golden paths | Mandatory single framework for all langs |
| Self-service within policy | Ungoverned cloud admin access |
| Thin veneer over infra | Reimplementation of AWS/GCP consoles |
| Owned by platform team | Side project without roadmap |
Success looks like developers shipping a new microservice or AI feature to staging in hours, with logging, metrics, secrets, and cost tags already wired.
Platform as product mindset
Treat internal developers as customers:
- Interview them quarterly.
- Publish a roadmap and changelog.
- Measure adoption, not ticket count closed.
- Deprecate with migration windows.
+------------------+
| App squads |
+--------+---------+
|
v
+--------+---------+
| IDP portal / CLI |
+--------+---------+
|
+-------------+-------------+
| | |
+----v----+ +----v----+ +----v----+
| Deploy | | Data / | | AI svc |
| pipeline| | catalog | | gateway |
+----+----+ +----+----+ +----+----+
| | |
+-------------+-------------+
v
+--------+---------+
| Shared infra |
| (K8s, IAM, VPC) |
+------------------+Capability map for modern enterprises
| Domain | Core services | AI extension |
|---|---|---|
| Compute | K8s namespaces, quotas | GPU pools, inference routes |
| Delivery | CI/CD, preview envs | Eval jobs in pipeline |
| Identity | SSO, workload identity | Tool OAuth brokering |
| Secrets | Vault integration | API key vault paths per env |
| Observability | Logs, traces, metrics | GenAI span attributes |
| Data | DB provisioning | RAG ingest templates |
| Governance | Policy-as-code | Model allow list, tier tags |
| FinOps | Cost dashboards | Token/GPU budgets |
Missing capabilities force teams to open shadow IT accounts, the primary IDP anti-pattern.
Reference architecture
Logical layers:
- Experience: portal (Backstage, Port, custom), CLI, IDE plugins.
- Control plane: software templates, environment definitions, policy checks.
- Execution: CI runners, GitOps (Argo CD, Flux), Terraform Cloud or equivalent.
- Infrastructure: clusters, networking, shared services (Kafka, Postgres operators).
Portal (Backstage)
|
| scaffolder template
v
Git repo --> CI (test, scan) --> GitOps --> K8s prod
^ |
| v
Policy OPA / Kyverno Secrets / IAMAlign security with enterprise AI security: IDP templates embed secure defaults (network policy, resource limits, no root).
Golden paths and templates
A golden path is the blessed way to build a class of system:
| Path | Includes |
|---|---|
| REST microservice | Dockerfile, health checks, OTel, ingress |
| Batch worker | Job chart, retries, dead letter |
| LLM feature service | Inference client, budget middleware, eval hook |
| RAG pipeline | Ingest DAG, vector namespace, ACL filter stub |
Backstage template fragment (illustrative YAML):
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: ai-feature-service
title: AI Feature Service
spec:
parameters:
- title: Service
properties:
name: { type: string }
owner: { type: string }
costCenter: { type: string }
aiTier: { type: string, enum: [T0, T1, T2] }
steps:
- id: fetch
action: fetch:template
input:
url: ./skeleton
values:
name: ${{ parameters.name }}
labels:
team: ${{ parameters.owner }}
cost-center: ${{ parameters.costCenter }}
ai.tier: ${{ parameters.aiTier }}Squads may exit the golden path with architecture review, not silent forks.
Self-service vs ticket ops
| Action | Self-service | Approval |
|---|---|---|
| Create dev namespace | Yes | Auto |
| Promote to prod | Via pipeline | Change record |
| Request GPU quota | Form | FinOps + platform |
| Attach MCP tool in prod | No | Security review |
Automate approvals with policy: small GPU quota in dev auto-approves; prod requires ticket.
Security and compliance integration
Embed in every template:
- OIDC federation for CI to cloud
- Signed images (Cosign)
- SBOM generation
- NetworkPolicy default deny
- Pod Security Standards (restricted where possible)
Kyverno policy example (require labels):
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-finops-labels
spec:
validationFailureAction: Enforce
rules:
- name: check-labels
match:
any:
- resources:
kinds: [Deployment]
validate:
message: "cost-center and team labels are required"
pattern:
metadata:
labels:
cost-center: "?*"
team: "?*"Map to SOC2/ISO controls via evidence exports from GitOps and CI.
AI and agent platform extensions
Platform teams become enablers for agentic AI:
| Service | Purpose |
|---|---|
| Inference gateway | Model routing, caching, PII scrub |
| MCP host | Central tool registry |
| Eval runner | Golden tests on deploy |
| Feature store (optional) | Consistent features for ML |
TypeScript middleware sketch for token budget in a shared library:
export function withTokenBudget(maxTokens: number) {
let used = 0;
return async (next: (n: number) => Promise<string>, n: number) => {
if (used + n > maxTokens) {
throw new Error("Token budget exceeded for this request");
}
used += n;
return next(n);
};
}Document tier (T0-T2) in service catalog so security knows blast radius.
Developer experience metrics
| Metric | Target direction |
|---|---|
| Lead time to first deploy | Down |
| Deployment frequency | Up |
| Change fail rate | Down |
| MTTR | Down |
| Template adoption % | Up |
| Developer satisfaction (survey) | Up |
DORA metrics still apply; add platform NPS and time waiting on platform ticket.
Team topologies and staffing
Common patterns:
- Enabling team: coaches, thin platform.
- Platform team: owns IDP, SRE for shared services.
- Stream-aligned squads: consume IDP, own apps.
Staffing guideline (illustrative, adjust to scale):
| Org dev count | Platform core |
|---|---|
| 50-150 | 3-5 engineers |
| 150-400 | 6-12 engineers |
| 400+ | Platform group + specialties (data, AI infra) |
Partner with nearshore software development for capacity spikes; retain product ownership internally.
Build vs buy vs partner
| Option | When |
|---|---|
| Backstage + custom plugins | Strong Git culture, OSS tolerance |
| Commercial IDP (Humanitec, Port, etc.) | Faster time to portal, budget for SaaS |
| Cloud vendor suites | Single cloud, accept lock-in trade |
| Damascode delivery | Need accelerated bootstrap or audit |
Buy portal, build differentiation (policies, AI paths, data integration).
Service catalog and ownership
Backstage catalog-info.yaml (or equivalent) should be mandatory for production services:
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: invoice-summary
annotations:
backstage.io/techdocs-ref: dir:.
labels:
ai.tier: T1
spec:
type: service
lifecycle: production
owner: group:team-billing
system: billing
dependsOn:
- resource:default/ai-inference-gatewayLinks to TechDocs runbooks, SLO dashboards, and on-call rotations. AI services declare dependency on shared gateway resources for blast-radius analysis during incidents.
Environment parity and preview stacks
Developers trust the IDP when preview environments mirror prod policy at smaller scale:
| Layer | Parity element |
|---|---|
| Network | Same NetworkPolicy patterns |
| Secrets | Vault paths per env prefix |
| Observability | Same trace exporter, lower sample rate |
| AI | Staging model keys with lower quotas |
| Data | Synthetic or masked datasets only |
Ephemeral namespaces per pull request reduce integration surprises. Tear down after merge with automated TTL controller to control FinOps waste.
Platform API vs portal
Some teams prefer CLI/API over UI. Expose IDP actions through a stable REST or GraphQL Platform API:
POST /v1/namespaceswith quota profilePOST /v1/services/from-template/{id}GET /v1/cost/team/{id}/month-to-date
Portal becomes one client; automation and service accounts integrate CI and chatops. Version APIs; deprecate with six-month notice.
Managing platform technical debt
Platform teams accumulate debt when urgent product requests skip template updates. Schedule platform refactor sprints each quarter:
- Collapse duplicate CI workflows
- Upgrade cluster minor version in non-prod first
- Remove unused templates (telemetry on scaffolder usage)
Debt metrics: number of services off golden path, mean time to upgrade cluster add-ons, percentage of policies enforced vs advisory.
Onboarding developers to the IDP
First-week checklist for new engineers:
- Access portal and SSO group
- Run golden path tutorial (deploy sample service)
- Read security defaults for AI tier
- Join platform Slack channel and office hours
Measure time-to-first-successful-deploy for onboarding cohorts; if above two days, improve docs or template defaults.
Implementation roadmap
Phase 0 (month 0-1): discovery
- Developer interviews, pain map
- Inventory clusters, CI systems, shadow deploy paths
- Define first golden path (often REST or static site)
Phase 1 (month 2-4): MVP
- Software template + GitOps env
- Observability bundle
- Documentation site in portal
Phase 2 (month 5-8): scale
- Production promotion flow
- Cost visibility (FinOps guide)
- Security policies enforced
Phase 3 (month 9+): AI
- RAG ingest template (data governance)
- Inference gateway
- Agent tool gateway with MCP
Code and config examples
GitHub Actions reusable workflow call (conceptual)
jobs:
deploy:
uses: org/platform-pipelines/.github/workflows/deploy-k8s.yml@v2
with:
service: ${{ github.event.repository.name }}
environment: staging
secrets: inheritBash: developer CLI wrapper
#!/usr/bin/env bash
set -euo pipefail
idp service create --template ai-feature-service \
--param name=invoice-summary \
--param owner=team-billing \
--param costCenter=CC-2201 \
--param aiTier=T1Terraform module consumption
module "service_namespace" {
source = "git::https://github.com/terraform-aws-modules/terraform-aws-eks.git?ref=v20.0.0"
name = "invoice-summary"
cluster_name = "prod-eu-west"
labels = {
team = "team-billing"
cost-center = "CC-2201"
}
quota = {
cpu = "20"
memory = "40Gi"
}
}Pin module versions; platform team semver communicates breaking changes.
Operating rituals
| Ritual | Frequency |
|---|---|
| Platform office hours | Weekly |
| Roadmap review with eng leads | Monthly |
| Policy exception audit | Monthly |
| Disaster recovery game day | Quarterly |
| Golden path refresh | Per major K8s upgrade |
Publish status page for shared services (ingress, CI, artifact registry).
When platform debt blocks product OKRs, escalate to architecture forum; Damascode can facilitate via IT consulting. Contact or read about us.
FAQ
Is Backstage required?
No. Any portal plus templates plus docs works if adoption is measured.
How do we avoid platform team becoming bottleneck?
Expand self-service, improve docs, automate approvals, hire for product skills.
Do developers lose flexibility?
They gain speed on the 80% path; exceptions remain with review.
How does IDP relate to DevOps?
DevOps is culture; IDP is the productized implementation of paved roads.
Can one platform support multi-cloud?
Yes, with abstraction layers and stronger policy discipline; cost is higher.
What about legacy VMs?
Integrate via same portal links and gradual strangulation; do not pretend everything is K8s day one.
How long until developers feel value?
Target first golden path deploy under one day within eight weeks of MVP launch; communicate wins in town halls.
Should platform team own on-call for all apps?
No. Platform on-call covers shared services (ingress, CI, clusters). App squads own application SLOs. Clear paging boundaries reduce burnout.
How do we measure template quality?
Track scaffolder success rate, time-to-first-green pipeline, and support tickets tagged platform/template.
Can IDP enforce AI tier at deploy time?
Yes via policy: Deployments with label ai.tier=T2 require annotation security-review-id present or admission denies.
Scorecard template for platform leadership
| Quarter | Objective | Metric | Status |
|---|---|---|---|
| Q4 | Reduce lead time | p50 time to staging < 4h | TBD |
| Q4 | FinOps hygiene | 95% workloads labeled | TBD |
| Q4 | AI golden path | 3 squads on inference GW | TBD |
| Q4 | Reliability | 99.9% shared ingress | TBD |
Review quarterly with engineering directors; tie funding requests to scorecard gaps.
Internal marketing for the platform
Developers adopt tools they hear about from peers. Platform team should:
- Run monthly demo days showing golden path deploy in under ten minutes.
- Publish migration guides when deprecating old Jenkins jobs.
- Celebrate teams who improved template defaults via contributed pull requests.
- Maintain a public internal roadmap with realistic dates.
Under-communicated platforms become shelfware while shadow CI persists.
Plugin and extensibility model
Backstage-style plugins should meet platform standards:
| Requirement | Rationale |
|---|---|
| SSO auth | No separate passwords |
| OTel instrumentation | Debug latency |
| Semver releases | Predictable upgrades |
| Security review | Third-party plugin risk |
Provide a plugin starter kit with CI, lint, and sample API client for Platform API. Squads extend portal without forking core.
Disaster recovery for shared platform
| Component | RTO target (example) | Notes |
|---|---|---|
| CI runners | 4 hours | Warm standby pool |
| GitOps | 1 hour | Multi-region repo mirror |
| Artifact registry | 2 hours | Geo-replicated storage |
| Ingress | 1 hour | DNS failover |
Game days validate backups for cluster etcd and Terraform state; document restore order (network, cluster, GitOps, apps).
CI pipeline standards embedded in IDP
Every golden path pipeline should include:
| Stage | Purpose |
|---|---|
| Lint/format | Consistency |
| Unit tests | Regression |
| SAST | Known vulnerable patterns |
| Container scan | CVE gate on Critical |
| SBOM upload | Supply chain audit |
| Deploy to staging | GitOps sync |
| Smoke test | Health endpoint |
| Optional eval job | LLM golden tests for AI services |
Centralize pipeline version in platform repo; squads pin @v4 not copy-paste YAML. Breaking changes communicated via changelog and automated PR to consuming repos where possible.
Federation with data and AI platform teams
Large enterprises split core IDP (compute, delivery, identity) from data platform (warehouse, catalog) and AI platform (inference gateway, MCP). Define interfaces:
| Interface | Owner | Consumer |
|---|---|---|
| RAG ingest template | Data platform | App squads |
| Inference route CRD | AI platform | App squads |
| Namespace + quota | Core IDP | All |
Quarterly platform council aligns roadmaps and avoids duplicate portals. Single sign-on into one portal shell with deep links to specialized consoles is acceptable if navigation is coherent.
New AI services register in catalog with dependencies on both inference gateway and approved datasets, linking data governance and agentic architecture documentation from TechDocs.
Platform product managers should spend at least twenty percent of sprint capacity on developer experience research: shadowing squad deploys, measuring friction in scaffolder forms, and fixing papercuts. An IDP that saves ten minutes per deploy across two hundred engineers weekly returns more value than a rare multi-cloud abstraction project nobody requested.
Accessibility and inclusive developer experience
Portal UX should meet WCAG-oriented basics: keyboard navigation for scaffolder forms, sufficient contrast, and screen-reader labels on status chips (deploy succeeded/failed). Internal platforms often ignore accessibility because users are employees; inclusive design reduces mistakes during incidents when engineers deploy from laptops under stress.
Document golden paths in plain language with diagrams, not only auto-generated API dumps. Offer doc translations when your engineering hub spans multiple EU countries.
Long-term platform evolution
Year one delivers MVP paths. Year two consolidates duplicates and enforces policy. Year three optimizes cost and adds AI-specific services. Avoid restarting the platform every time leadership changes vendor preference; instead, abstract behind interfaces your templates own, and swap implementations in the control plane without forcing every squad to rewrite applications.
Publish deprecation notices at least ninety days before removing a template version, with codemods or migration scripts when feasible. Nothing erodes trust faster than a broken deploy button on release day.
Track migration completion percentage in platform dashboards and escalate remaining consumers through engineering managers, not only chat reminders.
Reward squads that contribute template improvements with public recognition in engineering all-hands and faster quota approvals for pilot features.
Maintain a platform changelog RSS or Slack feed so developers see new golden paths, policy changes, and incident postmortems affecting shared services without searching Confluence. Pin the feed in the engineering onboarding channel.
When evaluating commercial IDP vendors, score them on API extensibility and policy hooks, not only portal aesthetics. Your differentiation lives in templates and policies vendors cannot replicate from a demo tenant.
References
- Team Topologies: https://teamtopologies.com/
- Backstage documentation: https://backstage.io/docs/overview/what-is-backstage
- CNCF Platforms Whitepaper: https://tag-app-delivery.cncf.io/whitepapers/platforms/
- Kubernetes documentation: https://kubernetes.io/docs/home/
- Argo CD: https://argo-cd.readthedocs.io/
- Flux: https://fluxcd.io/
- Open Policy Agent: https://www.openpolicyagent.org/
- Kyverno: https://kyverno.io/
- FinOps Foundation: https://www.finops.org/
- Model Context Protocol: https://modelcontextprotocol.io/
- Related insights: agentic AI, AI security, data governance, FinOps
Planning a project in Portugal?
Tell us about your stack, timeline and team setup. We respond on business days.
