Most design systems die quietly. Not in a dramatic way — nobody announces they're abandoning it. It just slowly stops being the source of truth: engineers start eyeballing spacing instead of pulling from tokens, new components get built ad hoc because updating the library feels slower than just shipping, and six months later the "design system" is a beautiful, unused Figma file. After building and maintaining design systems across 30+ product launches, the pattern behind the ones that actually stick is pretty consistent — and it has almost nothing to do with how comprehensive the system is on day one.

The instinct when a design system isn't being used is to write more documentation. More usage guidelines, more do's-and-don'ts, more Notion pages nobody reads. That almost never fixes it, because the real reason engineers stop using a system isn't that they don't understand it — it's that they don't trust it to have what they need, so it's faster to just build the one-off. Every time an engineer goes looking for a component and it's not there, or it's there but subtly wrong for their case, that's a small withdrawal from a trust account. Enough withdrawals and the system is dead, no matter how well it's documented.
The fix isn't more documentation — it's making sure the system actually covers the real, messy cases your product needs, not just the clean happy-path version of each component. That means design and engineering need to be looking at the same list of edge cases from day one, not passing a finished-looking library over the wall and hoping it holds up.
It's tempting to start a design system with the fun part — building out button variants, card components, nice illustrations. But the part that actually determines whether a system survives contact with a real, evolving product is the boring layer underneath: color tokens, spacing scales, typography variables. In Figma specifically, this means setting up variables (not just styles) for color, spacing, and type from the very first file, so that when the brand's accent color needs to shift, or a client asks for a dark mode, you're changing a handful of variable definitions instead of manually updating hundreds of component instances.
This sounds like infrastructure work that founders don't want to pay for, and I understand why — it doesn't produce a visible screen. But the alternative is a design system that looks complete on day one and becomes unmaintainable by month six, right around when the product actually starts to matter.
There's a compounding benefit here too, one that's easy to underrate until you've felt it firsthand: once tokens are the actual source of truth, rebrands and white-label variants stop being terrifying. I've seen a client ask for a full color refresh two weeks before launch — the kind of request that would normally mean panicking through dozens of screens — get resolved in an afternoon because every component was pulling from the same three or four color variables instead of hardcoded hex values scattered across the file.
The opposite failure mode is just as common, and I've been guilty of it early in my career: building an exhaustively flexible component system before the product has enough real screens to know what flexibility it actually needs. A button component with fourteen configurable props, three of which have ever been used, is worse than three separate, purpose-built button components — it's harder for engineering to implement correctly, harder for new team members to understand, and it was built on guesses about future needs instead of observed, current ones.
The right amount of flexibility is usually determined by looking backward at 4-5 real screens you've already designed, finding the actual variation between them, and building a system that covers that — not by imagining every conceivable future use case.
A design system that scales isn't one with the most components. It's one where adding the 40th screen to a product takes proportionally less design and engineering effort than the 4th screen did — because the vocabulary, the tokens, and the patterns are already established and trusted. That compounding effect is the entire point. If your system isn't measurably speeding up new feature work by the time you've shipped a dozen screens with it, something in the foundation needs to be revisited, not just expanded.
One practical way to check whether this is actually happening on your team: ask an engineer how long they estimate a moderately complex new screen will take, then ask what fraction of that estimate is spent hunting for the right component, debating a one-off spacing value, or rebuilding something that should already exist. If that fraction is shrinking release over release, the system is doing its job. If it's flat or growing, the system has stopped scaling regardless of how many components are in the library.
If you're starting a design system from scratch, or trying to figure out why an existing one isn't getting adopted, I've been through this enough times to help you spot the actual root cause quickly. Get in touch and let's take a look at what you've got.

Disconnected brand and product design creates a fractured user experience. The case for having both aligned under one design system from the start.
Read post
A step-by-step look at how a rough idea becomes a buildable MVP spec — for founders who have just an idea, or a spec with no design yet.
Read post
A practical, non-hype take on adding AI to your product — matching AI to a real user problem, designing for its imperfection, and avoiding the checkbox-feature trap.
Read post