All posts

Platform engineering is DevOps finishing the job

DevOps tore down the wall between build and run. It never said who owns what's left standing in the rubble. Platform engineering is the answer. Adopting an IDP means rebuilding the business processes DevOps left half-finished, which better tooling alone won't do.

Every org that adopts a new IDP, revamps its CI/CD, or hires a platform team is making a bet: that the problem was the tooling. It rarely is. Config drift, recurring outages, the same class of bug shipping every quarter and engineers who feel like they're fighting the system instead of building on it are all symptoms of how the organization decides, hands off, and owns work across the software lifecycle. Replace the tools underneath a broken process and the process breaks the new tools too, just with better dashboards.

What DevOps solved and what it didn't

DevOps solved an organizational problem: it tore down the wall between the team that built software and the team that ran it. That was necessary. The old model, where "build" threw a release over the wall to "run" and disclaimed responsibility for what happened next, produced the finger-pointing and slow incident response you'd expect from two teams with misaligned incentives.

What DevOps never fully solved is what happens after the wall comes down. Every team, now responsible end-to-end, went and independently rediscovered the same infrastructure patterns, the same security controls, the same deployment pipelines. Each team solved a problem every other team had already solved, slightly differently. That rediscovery is pure waste. It's cognitive load with no business value attached to it, and it's the reason a ten-team engineering org can have ten incompatible ways of provisioning a database, none of them wrong exactly, all of them expensive in aggregate.

Platform engineering is the response to that problem, not a rebrand of DevOps. It's a dedicated, product-minded function that absorbs the repeated complexity once and exposes it back to product teams as self-service, a golden path instead of a maze. Where DevOps redrew the org chart, platform engineering redraws the interface between teams: from "figure it out yourself" to "here's the paved road, with an escape hatch, because let's face it, there are always exceptions."

The technology is rarely the constraint

In almost every engagement the org already has decent technology. Kubernetes is running, Terraform exists somewhere, there's a CI pipeline. And yet config drifts between environments anyway, outages keep coming from the same category of root cause, the same bug pattern resurfaces release after release, and engineers report losing a meaningful chunk of every week to friction that has nothing to do with the feature they're building.

None of that is a technology gap. It's what happens when:

  • Nobody owns the golden path, so every team's version of "deploy a service" drifts slightly further from every other team's version, and the drift itself becomes the source of the next outage.
  • Approval and review processes were built for the old model. You implemented new or better tools but never redesigned the business practices around them, so the old approvals now exist purely as friction with no corresponding benefit. Say you built a deployment pipeline that does the old two-day job in half an hour. Great. But if you're still waiting two days for a colleague to give the manual approval, not so great.
  • Incidents get fixed but not learned from, because there's no process step that turns a postmortem into a change to the golden path itself, so the same failure mode ships again next quarter under a different service name.
  • Nobody's job is to notice adoption is dropping, so a platform capability becomes something only half the org still uses, and the other half is back to doing it manually, with all the drift and inconsistency that implies. The golden paths enforce the water flow.

Every one of these is a business-process failure wearing a technical symptom. You can buy the best IDP tooling on the market and none of it fixes a review process that still assumes build and run are separate teams, or an incident process with no feedback loop back into the platform.

Adopting an IDP means revamping the Software Development Lifecycle

Almost every platform initiative underestimates how much a working Internal Developer Platform replaces. Rather than sitting on top of your existing software development lifecycle, it takes over large parts of it. Provisioning, review, deployment approval, incident response, environment management: an IDP done properly changes how decisions get made at each of those points, as well as which tool executes them.

That means adopting an IDP well requires the org to revisit:

  • Who approves what, why, when and how. If a review gate exists because of a past incident rather than a present risk, digitizing that gate into the platform just automates the friction instead of removing it.
  • Where ownership boundaries sit. A golden path only reduces cognitive load if it's clear whose job it is to maintain it, deprecate stale versions of it, and respond when it breaks. Without that, the platform recreates the exact ownership ambiguity DevOps was supposed to have already resolved.
  • How incidents and drift feed back into the paved road. A postmortem that ends in a Slack thread instead of a change to the template guarantees the next team hits the same wall. The process needs an explicit step that closes this loop, or the platform stops improving the moment it launches.
  • What "done" means for a change. If shipping still means coordinating across three teams and two change-advisory meetings, the platform hasn't actually changed the SDLC. It's added a nicer UI in front of the same process.

This is an operating-model problem, and solving it is most of the work of adopting an IDP. The technology underneath it (Backstage, Crossplane, whatever GitOps stack) is the easy 20%.

Why an implemented IDP cannot be a utopia without platform maturity

This is where a lot of platform investment fails: an org attempts to jump straight to a "product-managed" self-service platform while its operating model is still ad-hoc. The gap between the two is one of maturity, and it shows up predictably as low adoption, shadow processes, and a platform team that spends its time firefighting instead of building. In fact, the entire org is firefighting.

A simple five-level scale makes the gap concrete:

  1. Ad-hoc: every team builds and deploys its own way.
  2. Standardizing: some shared tooling exists, but no self-service yet.
  3. Self-service: golden paths exist for common tasks.
  4. Product-managed: the platform has a roadmap, adoption metrics, and an owner.
  5. Optimized: the platform is continuously measured and improved against business outcomes.

A fully self-service, product-managed IDP (levels 3–4) is the right target state for most orgs, but it's not reachable by installing a portal on top of a level-1 organization. The mindset, alignment, and process change have to happen roughly in step with the tooling, or the org ends up with expensive infrastructure that recreates ad-hoc behavior on top of it, because nothing changed about how decisions get made.

Where the work starts

Diagnosing which maturity level an org is at, not which level it believes it's at, has to come before any platform architecture decision, for the same reason a doctor doesn't prescribe treatment before a diagnosis. That's uncomfortable, because it means the first deliverable of a platform initiative is often a candid assessment of the org's own processes, not a shiny new developer portal. But it's the only sequencing that avoids the expensive failure mode: technology that outpaces the organization's ability to use it, arriving on schedule and changing nothing that was broken.

The utopia of a well-oiled IDP is achievable and worth building toward. It just comes after mindset and process change, and it can't replace them.