Platform Architecture Best Practices
This list distills how to design an internal developer platform that shortens developer time-to-production without loosening safety.
Search across all documentation pages
This list distills how to design an internal developer platform that shortens developer time-to-production without loosening safety.
The practices are grouped by theme so you can adopt them in order or cherry-pick the ones your platform is missing.
Read the group headings first to find the area you are weakest in.
Treat each bold practice as a check against your current platform, and note where reality diverges from the ideal.
Adopt the security and delivery groups before the polish, since they set the guardrails everything else relies on.
Revisit the list quarterly, because a platform is a living product and its defaults drift as the stack evolves.
runAsNonRoot, dropped capabilities, no privilege escalation, and RuntimeDefault seccomp on every workload.kubectl apply access to production so clusters stay reproducible rather than becoming snowflakes.You should be able to trace a developer's change from a small Git commit to a hardened, observable, policy-compliant deployment with no manual steps.
Every workload should carry requests, probes, a restricted security context, and default-deny networking without a developer remembering any of it.
Your clusters should be reproducible from Git, upgradable on a known cadence, and separated so a non-production incident cannot reach production.
If any of those is untrue, start with the security and delivery groups, since they are the foundation the rest depends on.
Where should we start if the platform is greenfield?
Build one golden path with baked-in security defaults and GitOps delivery. Prove time-to-production on it before adding archetypes or clusters.
How do we stop teams from bypassing the platform?
Make the golden path the fastest safe option, back it with admission policy that blocks unsafe alternatives, and provide a real escape hatch.
How many clusters should we run?
Default to a cluster per environment with namespaces per team. Add regional or tenant clusters only when isolation or latency requirements demand it.
Do we need both templates and policy?
Yes. Templates set good defaults at creation time; policy keeps them enforced after apply, preventing drift toward unsafe configuration.
How often should we revisit these practices?
Quarterly. The stack and workloads evolve, so defaults, versions, and archetypes need periodic review to stay relevant.
Stack versions: This page was written for Kubernetes 1.36.2, Docker Engine 29.6.1 (BuildKit default), containerd (CRI runtime on nodes), Helm 3, Compose v2, Argo CD (latest - verify at build), and Gateway API (GA - verify controller support at build).
Reviewed by Chris St. John·Last updated Jul 16, 2026