ALL CASE STUDIES

Platform Engineering

Self-Service Infrastructure Provisioning

A single-click developer portal for infrastructure that cut manual toil by ~60%.

01

The ticket queue is the symptom, not the disease

Every platform team ends up as a ticket queue. Someone needs a bucket, a service account, a Cloud SQL instance; they file a request; an engineer picks it up, runs some Terraform, and closes it. The work is trivial and the wait is days. What makes it worse is that the queue hides the real problem — nobody knows what good looks like, so every request is bespoke, and the platform team becomes the only place that knowledge lives.

02

Golden paths before portals

A self-service portal in front of an inconsistent platform just automates the inconsistency. The first work is deciding what a 'standard service' actually is — which region, which labels, which IAM shape, which budget alert, what gets backed up. Once that exists as a template, the portal is a thin front end over it. Skip this step and you build a UI for filing the same bespoke requests faster.

03

Config Connector: cloud resources as Kubernetes objects

Rather than a separate Terraform run per request, GCP resources are declared as Kubernetes custom resources and reconciled by a controller in-cluster. A Cloud SQL instance becomes a manifest that lives beside the workload that uses it, with the same RBAC, the same GitOps flow and the same drift correction. The mental model collapses from two systems to one.

kubectl get gcpsqlinstance,gcpstoragebucket,iamserviceaccount -A \
  -o custom-columns=KIND:.kind,NS:.metadata.namespace,NAME:.metadata.name,READY:.status.conditions[0].status

Everything the platform manages, in one query. This view is what the ticket queue was hiding — you cannot audit what only exists in closed tickets.

04

Atlantis: the plan goes in the pull request

Terraform applied from a laptop is unreviewable and unrepeatable. Atlantis runs plan on the PR and posts the output as a comment, so the reviewer sees exactly what will change before approving, and apply happens from CI with a locked state file. The audit trail is the PR — who asked, who approved, what changed, when.

# in the PR, as comments:
atlantis plan -d envs/prod
atlantis apply -d envs/prod   # only after approval

Apply is gated on PR approval, so the review is on the plan output rather than on the diff of the HCL — which is what actually matters.

05

What goes wrong

Three failures are near-universal. State locking: two applies racing leaves a lock behind and every later run blocks — you need a documented force-unlock path or the platform team becomes the ticket queue again. Drift: someone fixes something in the console at 2am and the next apply reverts it, so drift detection has to run continuously rather than at apply time. And permission sprawl: the portal's service account accumulates roles until it can do anything, which quietly makes it the most dangerous identity in the org.

terraform force-unlock <LOCK_ID>   # only after confirming no apply is running
terraform plan -detailed-exitcode      # exit 2 = drift; run it on a schedule

The -detailed-exitcode flag is the one people miss: exit 0 no changes, 1 error, 2 drift. That makes drift a CI signal rather than a discovery.

Tools, and why these ones

  • Backstage

    DOCS ↗

    Spotify's open-source developer portal. Software catalogue, scaffolding templates and TechDocs behind a single front door.

    Why: The templates matter more than the UI. A scaffolder template is the golden path made executable, so the standard way is also the easy way.

  • GCP Config Connector

    DOCS ↗

    A Kubernetes add-on that manages Google Cloud resources as custom resources, reconciled continuously by an in-cluster controller.

    Why: Collapses two mental models into one. Infrastructure gets the same RBAC, GitOps flow and drift correction as workloads.

  • Atlantis

    DOCS ↗

    Terraform pull-request automation: runs plan on PR open, posts output as a comment, applies on approval from CI.

    Why: Moves review from the HCL diff to the plan output. Reviewers see what will actually change, and nobody applies from a laptop.

  • Terragrunt

    DOCS ↗

    A thin wrapper over Terraform for keeping multiple environments DRY, with remote state and provider config generated per environment.

    Why: Without it, dev/staging/prod diverge through copy-paste. The divergence is invisible until the one that only exists in prod breaks.

What it took

Provisioning and lifecycle management automated with Ansible, Python and GCP Config Connector — so cloud resources become Kubernetes objects — then surfaced through Backstage as a self-service portal. Teams click instead of filing tickets and waiting on a human. Underneath it, Terraform and Terragrunt with Atlantis give GitOps workflows: every infrastructure change arrives as a peer-reviewed, audit-ready pull request across dev, staging and production.

  • Backstage
  • Config Connector
  • Ansible
  • Terraform
  • Terragrunt
  • Atlantis

Outcome

-60%
manual toil
peer-reviewed
changes

This system, elsewhere

Next case study

RAG Knowledge Assistant for Ops