Skip to content

Platform engineering and paved roads

Pave the road teams already want to walk, and keep it narrow.

Predict first

Before you read: predict

A payments-ledger company's platform team keeps a service template. The ledger API was generated from version 1 of it in January. In April, version 2 of the template added masking of card numbers to its log setup. In May the settlement worker was generated from the template. In June the refunds team needed a worker and copied the ledger API's repository instead of running the template. No team has touched its log setup since.

On this lesson's road model, which of the three services mask card numbers in their logs today?

Pick one

The 30-second version

A platform team builds an internal product for the stream-aligned teams: the paved road, the supported way to build, deploy and run a service. Teams may leave it, so it has to be the easiest correct way. A template starts a service once; parts that must stay current are shared, so one release reaches every caller that tracks it.

Pave the road teams already want to walk, and keep it narrow.

How it works

Step 1 of 12

An internal product. A platform team (scale-conways-law-team-topologies step 8) builds for the stream-aligned teams; they are its users, and they choose whether to use it.

Analogy: A town council's serviced plots for self-builders

The council sells building plots to families who build their own homes.

On the plots In the platform
every plot comes with a road, water, power and drains already connected, and a pattern-book house design already approved the paved road, from template to production (steps 2, 6)
a family may draw its own house instead, and then arranges its own approval and connections optional; replace a part, own it (steps 3, 10)
families reserve a plot online and start the same week, with no appointment self-service (step 4)
the pattern book covers the walls, roof, wiring and drains every house needs, not the kitchen thin (step 7)
the builders take the pattern book's drawings to the plot and build from them a template copies once (step 8)
the water main runs under every street and the council maintains it shared parts (step 9)
the council asks families what slowed their build measure it like a product (step 11)

Breaks down when: a house, once built, rarely changes; a service changes every week, so the parts it shares matter more than the ones it copied.

Contrasting case: a council whose surveyor must visit every plot before work starts: every family waits for a date in one diary (step 5).

In real terms: give teams a road they would choose anyway, and keep it narrow.

Examples, run for real

The working days are labelled fixture inputs from the row's hook, not measurements of any real team.

4.1 ExamHall EXH-4980: the second worker

ExamHall's grading team built its first worker by hand, wiring each piece of plumbing itself. For a second worker it planned to copy the first. MR !5280 adds the platform's nest-service template instead, and the team generates the second worker from it.

4.1 EXH-4980 grading-worker-1 built by hand · plumbing wired by the team: 6 concerns · 9 working days from asking to first production deploy (fixture)
4.1 MR !5280 nest-service rendered for grading-worker-2 (owner group:grading) · 10 files · unresolved placeholders 0 · wired: tracing (OpenTelemetry), JSON logs (Pino), health probes /health/live and /health/ready, Dockerfile, CI calling the shared build step, catalog entry with an owner · 6 of 6
4.1 MR !5280 grading-worker-2 · 1 working day from asking to first production deploy (fixture)

The team wrote only grading code (steps 2, 6). Its pipeline is a call to the platform's build step, not a copy of it (step 9).

4.2 One release, every caller

4.2 shared build step release 3.2 (adds a software bill of materials to each image) · ExamHall services calling the step 7 · building with 3.2 at their next push 7 · service repositories changed 0

The platform team released once; seven pipelines picked it up without a commit of their own (step 9).

Try it

Answer first, then check. Nothing is saved.

Question 1 of 6

A streaming company runs 20 services. Two teams wrote their own pipelines, and two more copied the shared build step's code into their own repositories last year and build with that copy. The other 16 call the platform's shared build step: 4 of them name its release 2.3 in their pipeline file instead of following its latest release, and another 3 pass it their own base image instead of the step's default one. The platform team fixes a vulnerability in the default base image and releases the shared step again.

On this lesson's road model, with no service team changing anything, how many of the 20 services build on the fixed base image at their next build?

Pick one

Question 2 of 6

A ticketing company's seven stream-aligned teams each built one service by hand last year, the seat-map team first. Besides business code, every one of the seven wired health checks, JSON logs, tracing, a Dockerfile and a CI pipeline. On top of those, seat map wired a Redis client and a queue consumer; checkout a Redis client and the card provider's SDK; venue admin PDF export; waitlist a Redis client and a queue consumer; search sync a queue consumer; pricing a Redis client; refunds the card provider's SDK. The platform team is now writing the service template that new teams will start from.

On this lesson's road model, what should a newly generated service come with?

Pick one

Question 3 of 6

At a chat company, each team used to run the self-service template and had its new service the day it asked. Now the platform team sets up every new service itself, from a ticket, two services a week, oldest ticket first. In week 1 of the quarter, nine stream-aligned teams each file one ticket.

On this lesson's road model, counting one team-week for each full week a team's service is set up after week 1, how many team-weeks of waiting does the ticket rule add?

Pick one

Question 4 of 6

A payments-ledger company's platform team reports three quarters, 6 new services in each. Q1: the template was optional and self-service, so each team had its repository the day it asked; the platform team shipped 9 features; days from the repository to first production deploy: 5, 8, 9, 11, 12, 14. Q2: the template was made mandatory, and the platform team set up every repository from a ticket; 6 features shipped; days from asking to having the repository: 2, 3, 3, 4, 4, 5; days from the repository to first production deploy, in the same order: 1, 2, 2, 3, 3, 4. Q3: optional and self-service again, each repository the day its team asked; 3 features shipped; days from the repository to first production deploy: 2, 3, 4, 5, 8, 20.

On this lesson's road model, in which quarter did the platform help the stream-aligned teams most?

Pick one

Question 5 of 6

In a design round you play a streaming company's platform lead. Last quarter 10 new services were built: 6 from the template and 4 by hand. Three of the four needed a Kafka consumer, which the template lacks; the fourth must stay in Rust for its video-decoding library, and the template offers no Rust. Next quarter brings 10 services like these. You list three changes you could make: add a Kafka-consumer option to the template, make the template mandatory for every new service, or add a Rust version of the template.

The interviewer's next question: "For each of those changes alone, how many of next quarter's services will still need plumbing built by hand?" On this lesson's road model, which answer survives it?

Pick one

Question 6 of 6

A ticketing company's nine stream-aligned teams sent the platform team their requests for next year: a managed Postgres database with backups (asked by 7 teams), feature flags (5 teams), PDF ticket rendering (4 teams), a seat-map drawing library (the seat team only) and a GraphQL gateway (the checkout team only). The seat and checkout teams call theirs the hardest work they face.

On this lesson's road model, which requests should the platform team build into the platform?

Pick one

Go deeper

Pro tips
  1. Test the road itself: generate a fresh service from the template in CI on every template change, and fail the change if anything in the result is missing or unfilled. When: you own a template that teams start from (steps 2, 8). Verify:
    tip rendered nest-service for a scratch service · 10 files · unresolved placeholders 0 · plumbing wired 6 of 6 · a skeleton with one value left unfilled fails: 1 file with an unresolved placeholder
    Status: RAN.
Source

quote-check.mjs finds every passage below verbatim in its saved text. Valid as of 2026-10-17.

  • Team Topologies, Key Concepts: https://teamtopologies.com/key-concepts (tt-key-concepts.txt). The row's first source. Quoted: "Platform team: a grouping of other team types that provide a compelling internal product to accelerate delivery by Stream-aligned teams" · "Platform teams create services that accelerate stream-aligned teams, removing complexity." · "X-as-a-Service: one team provides and one team consumes something “as a Service”" · "X-as-a-Service: Consuming or providing with minimal interaction (low cost, clear boundaries)" · "Nothing kills productivity faster than one team waiting on another team." · "A good platform should make stream-aligned teams move faster, not generate more dependencies to manage." Supports steps 1, 3, 4, 5, 7 and 11.
  • Backstage, What is Backstage?: https://backstage.io/docs/overview/what-is-backstage (backstage-what-is.txt). The row's second source. Quoted: "Backstage Software Templates for quickly spinning up new projects and standardizing your tooling with your organization’s best practices" · "For end users (developers), it makes it fast and simple to build software components in a standardized way" · "enables your product teams to ship high-quality code quickly — without compromising autonomy." Supports steps 2, 3 and 6.
  • Backstage, Software Templates overview: https://backstage.io/docs/features/software-templates/ (backstage-software-templates.txt), the page "What is Backstage?" links for its templates. Quoted: "By default, it has the ability to load skeletons of code, template in some variables, and then publish the template to some locations like GitHub or GitLab." Supports step 8.

Checked against the tools and docs as of 2026-10-17.