Every product team shipped UI on their own. CRM looked nothing like billing. Ops modules invented their own validation patterns. Users felt the seams when they switched context, and engineering paid for it in duplicate components and slower handoffs.
Leadership didn't need another Figma library. They needed one shared language that let CRM, billing, and ops feel like the same company while each team kept shipping.
Week one, stakeholders wanted visible components. I held for tokens and type scale. Awkward meeting. No screenshots to show. Worth it. We avoided rebuilding half the library in week six when products couldn't share spacing or color semantics.
We tried a top-down mandate first. Usage barely moved. What worked: showing engineers time saved per sprint when they pulled a standard component instead of Slack-ing design for "the fifth blue."
I printed the inconsistency. Every button, dropdown, and form field from every product, side by side on a wall. That beat any slide deck. Engineering joined at component definition, not handoff. We agreed on naming, states, and accessibility before specs were final.
Roughly 40% of this project was change management: workshops, migration docs, sitting with teams while they swapped their first screen. The library was necessary. It wasn't enough.
Every Figma component maps to exactly one code component. Same name, same states, same props. Sounds obvious. Most teams skip it. That's why engineers stopped rebuilding buttons and designers stopped accepting "close enough."
We tracked adoption through team migration sessions, not a formal analytics dashboard. These signals told us the system was working, and what we'd instrument in a longer rollout.
Target: increasing share of screens built from system components vs. custom one-offs per sprint. Measured through design review and code audit.
Baseline: repeated debates on spacing, focus states, validation. Success = fewer one-off spec questions per feature after core components landed.
Qualitative: users stopped asking "why does this work differently here?" when switching between CRM, billing, and ops modules.
Observed after 8 weeks: Standard UI shipped faster once core components landed. Design time moved from rebuilding primitives to feature work. Shared vocabulary in reviews replaced recurring debates about the same patterns.
I underestimated how much of design systems work is change management. The library was maybe 40% of the job. Workshops, usage docs, and migration pairing was the rest. A system nobody uses is a side project with good documentation.
Build the system with engineering, not for them. Prioritize by cross-product usage frequency, not by who's loudest in the room. If adoption stalls, the rollout is the problem, not the components.
Tokens made everything after systematic. Boring week one, faster week eight.
Co-design survived the first edge-case fight. That's when I knew it would stick.
Ship the rollout plan with the same rigor as the component specs.