Skip to main content
Damascode

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 isIDP is not
Opinionated golden pathsMandatory single framework for all langs
Self-service within policyUngoverned cloud admin access
Thin veneer over infraReimplementation of AWS/GCP consoles
Owned by platform teamSide 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.
text
           +------------------+
           |  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

DomainCore servicesAI extension
ComputeK8s namespaces, quotasGPU pools, inference routes
DeliveryCI/CD, preview envsEval jobs in pipeline
IdentitySSO, workload identityTool OAuth brokering
SecretsVault integrationAPI key vault paths per env
ObservabilityLogs, traces, metricsGenAI span attributes
DataDB provisioningRAG ingest templates
GovernancePolicy-as-codeModel allow list, tier tags
FinOpsCost dashboardsToken/GPU budgets

Missing capabilities force teams to open shadow IT accounts, the primary IDP anti-pattern.

Reference architecture

Logical layers:

  1. Experience: portal (Backstage, Port, custom), CLI, IDE plugins.
  2. Control plane: software templates, environment definitions, policy checks.
  3. Execution: CI runners, GitOps (Argo CD, Flux), Terraform Cloud or equivalent.
  4. Infrastructure: clusters, networking, shared services (Kafka, Postgres operators).
text
 Portal (Backstage)
      |
      | scaffolder template
      v
 Git repo --> CI (test, scan) --> GitOps --> K8s prod
      ^                                |
      |                                v
 Policy OPA / Kyverno            Secrets / IAM

Align 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:

PathIncludes
REST microserviceDockerfile, health checks, OTel, ingress
Batch workerJob chart, retries, dead letter
LLM feature serviceInference client, budget middleware, eval hook
RAG pipelineIngest DAG, vector namespace, ACL filter stub

Backstage template fragment (illustrative YAML):

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

ActionSelf-serviceApproval
Create dev namespaceYesAuto
Promote to prodVia pipelineChange record
Request GPU quotaFormFinOps + platform
Attach MCP tool in prodNoSecurity 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):

yaml
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:

ServicePurpose
Inference gatewayModel routing, caching, PII scrub
MCP hostCentral tool registry
Eval runnerGolden tests on deploy
Feature store (optional)Consistent features for ML

TypeScript middleware sketch for token budget in a shared library:

typescript
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

MetricTarget direction
Lead time to first deployDown
Deployment frequencyUp
Change fail rateDown
MTTRDown
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 countPlatform core
50-1503-5 engineers
150-4006-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

OptionWhen
Backstage + custom pluginsStrong Git culture, OSS tolerance
Commercial IDP (Humanitec, Port, etc.)Faster time to portal, budget for SaaS
Cloud vendor suitesSingle cloud, accept lock-in trade
Damascode deliveryNeed 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:

yaml
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-gateway

Links 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:

LayerParity element
NetworkSame NetworkPolicy patterns
SecretsVault paths per env prefix
ObservabilitySame trace exporter, lower sample rate
AIStaging model keys with lower quotas
DataSynthetic 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/namespaces with quota profile
  • POST /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)

yaml
jobs:
  deploy:
    uses: org/platform-pipelines/.github/workflows/deploy-k8s.yml@v2
    with:
      service: ${{ github.event.repository.name }}
      environment: staging
    secrets: inherit

Bash: developer CLI wrapper

bash
#!/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=T1

Terraform module consumption

hcl
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

RitualFrequency
Platform office hoursWeekly
Roadmap review with eng leadsMonthly
Policy exception auditMonthly
Disaster recovery game dayQuarterly
Golden path refreshPer 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

QuarterObjectiveMetricStatus
Q4Reduce lead timep50 time to staging < 4hTBD
Q4FinOps hygiene95% workloads labeledTBD
Q4AI golden path3 squads on inference GWTBD
Q4Reliability99.9% shared ingressTBD

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:

RequirementRationale
SSO authNo separate passwords
OTel instrumentationDebug latency
Semver releasesPredictable upgrades
Security reviewThird-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

ComponentRTO target (example)Notes
CI runners4 hoursWarm standby pool
GitOps1 hourMulti-region repo mirror
Artifact registry2 hoursGeo-replicated storage
Ingress1 hourDNS 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:

StagePurpose
Lint/formatConsistency
Unit testsRegression
SASTKnown vulnerable patterns
Container scanCVE gate on Critical
SBOM uploadSupply chain audit
Deploy to stagingGitOps sync
Smoke testHealth endpoint
Optional eval jobLLM 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:

InterfaceOwnerConsumer
RAG ingest templateData platformApp squads
Inference route CRDAI platformApp squads
Namespace + quotaCore IDPAll

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

Planning a project in Portugal?

Tell us about your stack, timeline and team setup. We respond on business days.