Skip to content

Platform Engineering That Developers Actually Adopt

How to build an internal developer platform that teams choose to use: golden paths, GitOps delivery, guardrails instead of gates, and the metrics that show it is working.

ABYSSS Systems Team3 min read

A golden path road from commit through CI and policy gates to a production cluster.

Internal platforms rarely fail with an outage. They fail slowly, as teams drift back to their own scripts because the official way to ship is slower than the workaround. Kubernetes made the problem easier to see. It gives you enormous flexibility and then expects every product team to become fluent in manifests, ingress controllers, network policies and autoscalers. A platform team's job is to absorb that complexity once, so the other teams don't have to absorb it twenty times.

Run the platform like a product

The developers who use your platform are its customers, and they can quietly refuse to buy. The teams that succeed treat the platform as a product with a roadmap, a backlog sourced from real friction, and someone whose job is to talk to users every week.

  • Shadow a team through their first deployment and write down every point where they had to ask for help or wait for a ticket.
  • Keep a public roadmap and a changelog. Platform changes that surprise people erode trust faster than missing features.
  • Measure adoption, not availability. A platform with five nines and three users is a failed project.

Golden paths, with an exit

A golden path is the supported, paved way to do a common task: create a service, add a database, expose an API. Done well, a new service arrives in minutes with a repository, CI pipeline, container build, deployment manifests, dashboards, alerts and a default SLO already wired in. Backstage, the CNCF developer portal, is a common way to package these templates alongside a software catalog that shows who owns what.

Teams must be able to leave the path when they have a good reason. If the only way off is a ticket to the platform team, people will go around you instead. The path should simply be the easiest option by a wide margin.

GitOps as the delivery backbone

With GitOps, the desired state of every environment lives in Git and a controller such as Argo CD or Flux continuously reconciles the cluster towards it. Deployments become pull requests, rollbacks become reverts, and drift is detected and corrected automatically. Promotion between environments is an auditable change to a file rather than a sequence of commands someone ran from a laptop.

An Argo CD Application that keeps production in sync with Git
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: orders-api
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://git.example.com/platform/deployments.git
    targetRevision: main
    path: apps/orders-api/overlays/production
  destination:
    server: https://kubernetes.default.svc
    namespace: orders
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Keep secrets out of the repository. An external secrets operator that pulls from a vault or cloud secret manager at runtime is the cleaner pattern, and it means rotating a credential never requires a commit.

Guardrails instead of gates

Manual approval queues are where developer experience goes to die. Replace them with automated policy that runs in the pipeline and at cluster admission, using tools such as OPA Gatekeeper or Kyverno. Typical guardrails reject privileged containers, require resource requests and limits, allow only images signed in your pipeline (for example with Sigstore cosign), and block public load balancers outside approved namespaces.

The quality of the error message matters as much as the rule. "Denied by policy" sends someone to Slack. "Containers in production need memory limits; add resources.limits.memory, see the service template for defaults" lets them fix it and move on.

Pick the right level of abstraction

Hide too little and every team still needs a Kubernetes expert. Hide too much and the first unusual requirement breaks the abstraction. A pattern that works well is a short service description owned by the product team (image, ports, scaling bounds, dependencies, SLO) that the platform expands into the full set of manifests. Teams that need more can drop down a level for a single service without forking the whole platform.

Proving that it works

  • The four DORA metrics: deployment frequency, lead time for changes, change failure rate and time to restore service, measured per team and trended over quarters.
  • Time from "new service" to first production deploy. This number exposes every hidden manual step.
  • Share of services on the golden path, and the reasons teams give for leaving it.
  • A short developer satisfaction survey every quarter, with free-text answers that someone actually reads.

Platform engineering pays off when it turns the right way to build software into the fastest way. Security, reliability and cost controls then come along for free, because they are built into the path everyone already takes.

  • Platform engineering
  • Kubernetes
  • GitOps
  • Developer experience
  • Cloud Platforms3 min read

    AWS, Azure, Google Cloud and Oracle Cloud Compared

    The four major cloud platforms compared on strengths, pricing traps, identity, AI and data services, and presence in the Gulf, with guidance on when multi-cloud is worth the cost.

  • Observability3 min read

    Practical Observability with OpenTelemetry and SLOs

    Instrument once with OpenTelemetry, sample traces deliberately, keep telemetry costs in check, and let SLOs and error budgets decide what deserves to wake someone up.

  • Resilience3 min read

    Designing Systems That Survive a Region Outage

    Recovery targets, the four failover patterns and their trade-offs, the data problem behind every failover, cell-based isolation, and how to prove the plan works.

Platform Engineering That Developers Actually Adopt | ABYSSS