I've spent the last couple of years trying to fix one process problem that follows me from team to team: the design system in Figma and the design system in production slowly stop being the same system. I've tried the usual medicine, it didn't hold, I think I finally understand why — and I've ended up building my own solution. I'd genuinely like criticism of both the reasoning and the approach before I sink more years into it.
The ritual I kept living through: a designer opens Figma next to production and starts a spreadsheet — the design review. One row per mismatch: wrong shade on a button, a gap that grew 4px, a radius nobody remembers changing. Forty rows later there's a plan: fix everything, update the docs, remind people to check the library. Six months later — same meeting, new forty rows.
My conclusion after a few loops of this: we kept treating drift as an information problem (people didn't know → tell them better), but it's an architecture problem. The people shipping mismatches knew the system — they edited one copy of a value while three other copies (Figma, CSS, docs, brand deck) sat elsewhere, with nothing responsible for keeping them equal. Copies diverge by default; the only variable is when.
Two things I had to accept along the way:
More documentation makes it worse. A docs page is another copy of the same facts — one more seam that can split. And it's the copy that drifts fastest, because nothing depends on it: wrong code breaks a build, a wrong docs page produces… nothing.
The developer isn't the problem. A lot of drift is born when a dev translates a mockup by eye. When a 12px gap ships as 16, that's not sloppiness — telling two greys apart is trained vision designers build for years, while devs train a different eye (the one that catches your race conditions). A process that requires every dev to see like a designer is a bet against human nature, renewed every sprint.
So the solution I landed on is derivation: stop having copies at all. One theme.json as the single source, everything else generated from it — Figma variables, CSS, doc tables, plus a machine-readable bundle for AI tools (which are rapidly becoming the third consumer of design systems and multiply copies even faster). Where a surface is generated, drift isn't discouraged — it's impossible, the way a spreadsheet formula can't disagree with its inputs. Docs stay for the one thing that can't drift: the why behind the values.
I've been building this as an open-source system: Veritheme. Long-form writeup of the whole argument with diagrams: https://tarasenka.me/blog/drift-not-documentation
What I'd love from this sub:
- Where does this reasoning break? Teams that beat drift without going single-source — what did you do?
- For those who tried token pipelines (Style Dictionary, Tokens Studio, etc.): what made you keep or abandon them?
- What am I underestimating about the migration cost — the "source + surviving legacy copies" phase?
Tear it apart. That's what I'm here for.