Comparisons

Pairs engineers genuinely confuse — goal and implementation, MVP and bad prototype, prototype and spike, reversible and irreversible. Neither column wins; what decides is the problem. Each record leads with the confusion, because the confusion is what it costs.

Vertical slice vs horizontal layer

What people get wrong about this pair

Horizontal layers feel like engineering — the schema is "done", the backend is "done" — and produce nothing anyone can use until the last layer lands, at which point the schema turns out to be wrong for what the page actually reads. A slice looks trivial (one product on one page) and proves the thing that matters most: the pieces connect, and the feedback loop is open. The strongest form of the layer side is that some layers really are shared foundations and building them once, well, avoids five inconsistent versions; the honest reply is that even then the first slice through the foundation is what tells you whether the foundation is right, so the foundation should be built to the thickness the first slice needs and grown from there.

Vertical slice — one feature, thinly, through every layer: page, API, logic, database
Use it when

When you need evidence early — that the layers connect, that the environment works, that the feature is what the user wanted — and when the requirements are still moving.

Horizontal layer — one layer, completely: the whole schema, then the whole backend, then the UI
Use it when

When the layer is genuinely shared and stable, and the team working on it is separate from the team consuming it — a platform team shipping an API for several product teams.

AspectVertical slice — one feature, thinly, through every layer: page, API, logic, databaseHorizontal layer — one layer, completely: the whole schema, then the whole backend, then the UI
Unit of workA feature, end to endA layer, in full
First demonstrable momentDay one or twoWhen the last layer lands
Where mistakes are foundIn the first sliceIn integration, at the end
Plan reads asProduct page, then cart, then checkoutDatabase, then backend, then UI
ProvesConnectivity and the featureThat the layer is internally consistent
Typical mistakeA slice so wide it is the productA week of schema with nothing to show