Case Study
Breaking Through After Three Failed Attempts
After three failed design system attempts, Candidly hired me to finally solve the adoption problem. I rebuilt the system from the ground up using a two-level semantic token architecture, comprehensive documentation, and sustained ownership—enabling 100% platform adoption and winning a major banking client through white-label capabilities.
Platform adoption of semantic tokens
Pages using reusable components
Hard-coded values eliminated
Major client won through white-label capabilities

Original color palette showing limited structure
When I joined Candidly in November 2023, the design system had stalled. Three previous attempts had failed to gain adoption, leaving the product in technical debt:
Enterprise clients expected white-label capabilities. We couldn't deliver. When prospects asked about customization, the answer was "maybe, but significant custom development required."
The business impact was real.
I was brought in specifically to break through this plateau—not just build another system, but ensure it would actually be adopted.
Sustained momentum over two years, making decisions and pushing through resistance
Designed two-level token system optimized for adoption over theoretical perfection
Weekly team sessions, comprehensive documentation, proved value through concrete examples
Audited platform, built token architecture, consolidated components, drove migration
I used Chrome DevTools to document every design value across the platform—border radii, colors, spacing, typography. The goal: understand actual usage patterns to make defensible consolidation decisions.

Foundation Priority Tackle Order Sheet - (Frequency + Impact) - Effort = Priority
The data removed subjectivity. Consolidating 7, 8, 10 into 8 wasn't about my preference—it was about usage patterns and creating a predictable 4/8 grid system.
After studying industry systems (Adobe Spectrum, Atlassian, IBM Carbon), I made a critical architectural choice: two-level semantic tokens, explicitly avoiding component-level complexity.
Why?
Previous attempts failed because they were too complex. Given our startup constraints and adoption history, simpler was more likely to succeed.


Color and typography documentation showing primitives and semantic tokens
blue.10 → blue.90, spacing.xs → spacing.xlbackground.brand.primary.base, text.subtle, icon.dangericon.brand.primaryThe semantic layer acts as a mapping interface between primitives and UI.
icon.brand.primary → points to blue.50 (Candidly default)
icon.brand.primary → points to client.red.50 (Client brand)
Same token name. Different primitive. Zero code changes.
We can change the visual perspective without changing the structure—exactly what enterprise clients need.



Figma variables showing semantic tokens for backgrounds, borders, and spacing
December 2023 - March 2024
Built the system in layers:




Figma token scoping: Corner radius, Frame backgrounds, Token naming, and Text color constraints
I added Figma scoping to tokens—background tokens only appear for fills, border tokens only for strokes, radius tokens only in radius fields.
The system prevents errors automatically. Designers can't misuse tokens even if they try. This removes cognitive load and maintains consistency without requiring constant vigilance.


Component exploration in Storybook: Radio button variants (left) and Alert components (right)
For every component I added, I removed 3-4 duplicates. Radio buttons went from 4-5 inconsistent variants (one even behaved like a checkbox despite its appearance) to one properly functioning system.
Quality over quantity. Every component had to justify its existence.


Comprehensive color and typography documentation with usage guidelines
Previous attempts failed partly due to lack of documentation. I treated documentation as essential:
April - May 2024
Working sessions with design and dev teams to systematically replace every hard-coded value. Every page, every component, every instance reviewed.
By May 2024: 100% platform adoption achieved.
Building systems is easy. Getting people to use them is hard.
Working sessions (not presentations) where the team shaped decisions together
Showed consequences of working outside the system vs. benefits of using it
Token naming so clear that QA could catch design issues, developers gained autonomy
Prioritized work, communicated progress, made tactical decisions without direct PM support
Adoption was gradual, then accelerated. By the migration phase, people wanted to use the system because they'd seen it work. Not mandated—chosen.
Second half of 2024: A major U.S. banking client required white-label capabilities for our platform.
The Challenge:
Their multi-level token system didn't map directly to ours. Different component hierarchies, more variants, different color applications.
The Solution:
Semantic token architecture made it possible. We remapped primitives without touching components or implementation—icon.brand.primary just pointed to their red instead of our blue.
Project took ~6 months (mostly approval cycles), but my work moved quickly because the architecture was designed for this.
We closed the contract. The client specifically cited white-label capabilities as a deciding factor.
The design system work directly enabled revenue.
| Metric | Result |
|---|---|
| Token adoption | 100% across platform |
| Component reusability | 80% on most pages |
| Hard-coded values removed | 1,000+ eliminated |
| Total tokens | ~290 (120 primitives, 170 semantic) |
| Accessibility | WCAG-compliant by default |
Same patterns everywhere—users build mental models faster
Predictable visual language—less energy decoding interface
Radio buttons behave like radio buttons everywhere—builds trust
Hours of custom code → Minutes with reusable components
Clear guidelines and reusable components reduced design time significantly