Design systems are one of those things everyone wants and almost nobody is happy with. Here's what I've learned from building them, inheriting them mid-project, and occasionally rescuing ones that had collapsed under their own weight.
The naming problem is the design problem
If you can't agree on what to call a component, you probably haven't agreed on what it's for. The naming argument about 'Modal vs Dialog vs Overlay' is almost always a proxy for an unresolved product question. Resolve the product question first.
Avoid the component library trap
A component library is not a design system. A design system is a shared understanding of why decisions were made — the library is just one artifact of that understanding. Teams that build libraries without the underlying rationale end up with a collection of components that nobody trusts enough to use.
Tokens first, components second
The order matters. Define your spacing scale, colour tokens, and typography ramp before you build a single component. Every component built before the token system is a component that will need to be rebuilt.
The bus factor
Every design system I've seen fail has had one person who understood it completely. When that person left, the system collapsed. Documentation isn't optional — it's load-bearing infrastructure.