Every component library I've worked on has a layer of sediment you can read like rings on a tree. There's the initial era of optimism, where every button has three variants and a comment explaining why. There's the middle period of compromise, where someone added a fourth variant on a Friday and nobody ever pruned it. And then there's the present — where roughly 40% of the code exists because someone, somewhere, once needed it for a single launch.
If I rebuilt mine today, here's what I'd keep, and here's what I'd quietly retire.
What I'd keep
The two-token system. Semantic tokens (surface, on-surface, accent) on top of a primitive palette. It's the most boring decision I ever made and the one that paid the most dividends, because designers and engineers ended up speaking the same vocabulary for free.
Composition over configuration. Five small primitives that snap together beat one prop-heavy Card with sixteen booleans. I'm convinced the boolean explosion is the single biggest reason design systems calcify.
What I'd retire
Every component whose name starts with the team that needed it. The PricingCallout. The OnboardingHero. None of them ever became reusable. They became museums.
Strict variants. Every "size: 'sm' | 'md' | 'lg'" prop is a tiny argument that compounds. I'd swap to a spacing scale and let composition do the rest.
If I had to put it on a t-shirt: build the primitives, name them after what they are, and resist the urge to ship a component for every screenshot someone Slacks you.
