CNPA — Cloud Native Platform Engineering Associate
A Golden Path Must Be the Easiest Route, Not a Mandate
In one sentence
A golden path is not a rule that says "go only this way" but a state in which "this path is the easiest, so there is no reason to take another." A path made by force is not a golden path but a gate, and gates get bypassed.
Why this was needed
A platform team usually builds standards in one of two ways.
The prohibition style — "Deploying a hand-made Deployment is forbidden. You must use our chart." In the short term, the compliance rate goes up. But once some team cannot meet the requirements, an exception approval process appears, and once exceptions pile up, the standard becomes meaningless. Above all, the platform team becomes the referee and ends up in an adversarial relationship with the development teams.
The golden path style — "If you start from this template, within 5 minutes a service with observability, security, and deployment all attached comes up. Other ways are possible, but then you have to take care of those three yourself." There is no enforcement, yet most teams use it. That is because it was designed so that laziness points in the same direction as standards compliance.
The key insight is this: people do not follow rules; they follow the path of least friction. The platform's job is to bring the friction of the right path close to 0.
How it works
The minimum makeup of a golden path
A single golden path must have the following four things as one body. If any one is missing, it degrades into an "example repository."
- Scaffolding — a single command or a single form generates the repository, manifests, and pipeline.
- Defaults — resource requests/limits, the security context, probes, label conventions, and observability annotations are already included.
- Documentation — it lives next to the generated code and changes together with it when the template changes.
- Ownership — the moment it is created, the owning team is recorded in the catalog. The question "whose is this?" does not come up 6 months later.
Why documentation must be part of the same body is often underestimated. Templates evolve. If the documentation lives separately on a wiki, it drifts out of sync within 3 months, and out-of-sync documentation is worse than none. That is why docs-as-code — managing documentation in the same repository, the same PR, and the same review as the code — is an essential element of a golden path.
Balancing self-service and guardrails
Self-service is about widening permissions, and guardrails are about keeping that widening from leading to incidents. Where you place the two determines developer experience.
| Guardrail location | Example | Feedback speed | Developer experience |
|---|---|---|---|
| Schema (API server) | maximum: 10 in a CRD |
Immediate | Best |
| Admission policy | A policy engine's validating webhook | Immediate (at apply time) | Good (if the message is clear) |
| Quota and limits | ResourceQuota, LimitRange | Immediate (at creation time) | Good |
| CI checks | Lint and policy checks in the pipeline | Minutes | Fair |
| After-the-fact audit | Reports, dashboards | Hours to days | Poor |
The principle is as far left as possible. For the same rule, a schema is better than an after-the-fact report. Failure should happen quickly, close by, and in words a person can read.
And a guardrail must always come with a reason. The difference between "Rejected: policy violation" and "Rejected: containers in production namespaces require a memory limit. Example: resources.limits.memory: 512Mi" is the platform's reputation.
What to turn into a golden path
You cannot build everything. The priority is frequency × friction. An annoying task you do every week comes before a hard task you do once a month. Typical candidates are scaffolding a new service, adding a new environment, attaching a database, creating dashboards and alerts, and registering for on-call.
And a golden path must have a version. Once you ship v2, how to move v1 users over becomes an immediate problem. A v2 without a migration plan is just one more standard.
What it looks like in the field
The author's homelab shows well what happens when there is no golden path. Gateway API needed CRD v1.6.1, and with v1.2, tlsroutes and referencegrants were not v1, so the Cilium gateway controller refused to start. KubeVirt had a defect in the containerDisk path, so the Fedora VM booted only after working around it through the DataVolume (PVC) path. The GPU Operator had an incident in the containerd runtime configuration.
What these incidents have in common is that they are traps you step on once and never step on again. And if that knowledge lives only in people's heads, the next person steps on exactly the same ones. This is the essence of a golden path — taking the traps the platform team stepped on on everyone's behalf and hardening them into template defaults and documentation so that others do not step on them.
Another thing worth noting is the Cilium setup without kube-proxy. It was not installed at all, with --skip-phases=addon/kube-proxy, and that this differs from removing it later was confirmed by 0 iptables KUBE- chains. This sense that "removed" and "never created in the first place" are different applies to golden paths too. It is always cheaper to have things generated with good defaults from the start than to fix bad defaults later.
What to do in the next lab
You create a set of service scaffolds (Deployment/Service/HPA/PDB/NetworkPolicy) in /root/cnpa-path/ and actually deploy them into a namespace with guardrails. Next, you create a local chart with helm create, branch environments through values, and apply the helm template render result back to the cluster.