Most design systems don’t die from bad taste. They rot — one hardcoded hex, one snowflake component, one undocumented prop at a time. The fix isn’t more process. A system that scales isn’t bigger than a small one; it’s layered, so a change in one place can’t quietly break the rest.
The four layers
Picture four layers, each built on the one below. Tokens are the raw decisions: color, spacing, radius, type scale. Primitives are the components that read those tokens — button, input, card.
Patterns compose primitives into real jobs: a login form, a page header, a data table. Docs sit on top and say when to reach for each. The order is the point — every layer depends only on the ones beneath it, never sideways.
Docs aren’t a wiki nobody opens. They’re the short usage note next to each component: what it’s for, and which pattern to grab instead when it isn’t the right fit.
Why the order holds
When dependencies point one direction, a change stays contained. Retheme the whole app? Edit tokens and every primitive inherits it. Fix a button’s focus ring once and every pattern using that button updates for free.
Break the rule — a pattern reaching past primitives to hardcode #2563eb — and the rot starts. That one shortcut is how a codebase ends up with forty grays nobody chose. Sideways dependencies turn every fix into whack-a-mole.
Governance lives in PRs
Most teams try to govern a system in committee meetings and shared-doc debates. That’s where systems stall. The real gate is the pull request.
A new component earns its place by passing a checklist in review: does a primitive already cover this, does it use tokens, is it keyboard-accessible, is it documented? If a reviewer can’t say yes to all four, it doesn’t merge. No committee, no roadmap slide — just a diff held to a standard.
Start here
Define ten tokens and one button this week, then ship them. Add a primitive only when a screen actually needs it, a pattern only when two screens repeat the same shape, and a doc the moment someone asks how a thing works.
The system earns each layer instead of guessing at all four up front. That’s the difference between one that scales and one you rewrite in a year.