A Platform Team Is Not a Ticket Queue
By Maplecode
Platform engineering has a clear promise: build shared infrastructure once so every product team does not solve deployment, observability and secrets management independently.
The same investment produces two very different outcomes, and the difference shows up within a quarter. Either product teams move faster, or they route around the platform and the platform team becomes a queue.
The paved road has to be the fast road
The only durable measure of an internal platform is voluntary adoption. If teams use it because it is genuinely the quickest way to get to production, it is working. If they use it because they are not permitted to do anything else, you have built a control point and it will be resented and circumvented.
That framing decides most design questions. The platform should make the common case trivial and the uncommon case possible. A team with a genuinely unusual requirement should be able to step off the road without asking permission, and without losing everything the road provided.
Platforms that mandate become bottlenecks because every exception needs a human decision, and exceptions are more frequent than the roadmap assumed.
Self-service means no human in the path
"Self-service" often means a form that creates a ticket. That is a queue with better branding.
Real self-service is a team provisioning an environment, a database, a secret or a pipeline without waiting for anyone. That requires the platform team to encode policy rather than apply judgement — quotas, naming, network rules and cost limits expressed as code that either permits or refuses.
Encoding policy is harder than reviewing requests, and it is the work. A platform team spending its days on approvals has no capacity to improve the platform, which is how these teams stall.
The abstraction that leaks worst
Every platform hides complexity, and every abstraction leaks under load. The question is whether it leaks in a way an engineer can act on.
The pattern that hurts: a deployment abstraction that works until something fails inside it, at which point the product engineer sees an error from a layer they have never been shown, with no way to inspect it. They cannot fix it and they cannot escalate usefully, so they open a ticket and wait. That experience, twice, is enough for a team to decide the platform is a liability.
Make the underlying system inspectable. Let engineers see the generated configuration, read the real logs, and run the same commands the platform runs. Hiding complexity is good; making it unreachable is not.
Do not build what you can configure
Platform teams tend toward building, because the requirements are internal and the constraints feel soft. Every bespoke component is something your organisation now maintains forever, staffed by whoever is left when the author moves on.
The strongest platforms are mostly assembly: a small amount of glue, sensible defaults and good documentation over tools that other people maintain. The custom internal developer portal with a bespoke config language is usually a sign the team optimised for interesting work rather than for the product teams' throughput.
When we would advise against a platform team
Below roughly four product teams there is not enough duplication to amortise the cost. One or two teams sharing a repository of Terraform modules and a documented deployment path gets most of the benefit at a fraction of the effort. Standing up a platform team at that scale creates a dependency and a queue where there was neither.
Also stop if the underlying practice is not settled. A platform encodes how you deliver software; if that is still being argued about, you will encode the argument and pay to change it. Standardise the path with a couple of teams first, then build the tooling around what worked.
Documentation is the product surface
For an internal platform, the docs are not supporting material. They are the interface most engineers meet first, and their quality determines whether the paved road gets used.
What works is task-shaped: how to create a new service, how to add a secret, how to debug a failed deploy — each one a page an engineer can follow start to finish without asking anyone. What does not work is a reference of every configuration option, which is exhaustive, accurate and unusable when you do not yet know what you are looking for.
The signal to watch is your own support channel. Every question asked twice is a documentation gap, and answering it in a thread rather than fixing the page guarantees it is asked a third time. Platform teams that treat repeat questions as a defect rather than as their job get out of the queue; the ones that pride themselves on being responsive stay in it.
What we would measure
Time from a new service's first commit to production. The share of deployments going through the paved road without an exception. How long a self-service request takes when no human is involved — and how many still involve one. And plainly: would product teams choose this if they were allowed not to.
That last question is uncomfortable and it is the one that predicts whether the investment pays back.
A note on staffing. Platform teams are frequently formed from whoever is available rather than from engineers who have run production systems, and the difference shows in the defaults they choose. The people best placed to build the paved road are the ones who have been on call for something like it, because they know which failures need to be visible.
Related: delivery automation and engagement models.