← All work

Capital One · 2024 to 2026

Leading enterprise system theming migration

Unlocking Capital One's dynamic theming and mode capabilities within Figma & code

A banking app home screen on a phone, beside the grid of color swatches it is themed from

We needed to overhaul our architecture to Figma variables to better align with code and scale.

The challenge

Capital One was preparing a major brand refresh and the design system could not support it.

Everything sat on static Figma styles. Changing a color meant opening every file and updating every instance. A dark mode exploration meant rebuilding screens by hand, with results inconsistent enough that contrast bugs reached production. Our styles also failed to map with engineering tokens, so handoff carried translation errors. We needed to enable the refresh and dark mode capability in enterprise and keep teams unblocked for business-critical initiatives such as brand acquisitions.

We needed to overhaul our architecture to Figma variables to better align with code and scale.

The task was to migrate five libraries across iOS, Android, web, foundations and documentation to Figma Variables, a feature that had shipped weeks earlier and that nobody had used at this scale. We had to do it without blocking 600+ designers on business-critical work, onboard them on the new process, and finish inside the quarter.

How might we enable designers to choose semantic tokens and have it map automatically to every brand and mode instantly both in design and code?

The approach

Aligning stakeholders to risks of non-variable system architecture

I researched industry practices and early Figma testing of variable collections, as well as consumer ride-along studies. Without variables, designers spent hours doing manual updates across files. Static styles didn’t map to engineering tokens. Brand updates and accessibility fixes risked propagating unevenly across iOS, Android, and Web. Teams could not reliably toggle between dark mode, light mode, or brand palettes without doing tedious rework. By grounding the migration in these risks, I was able to frame the project as a scalability and reliability initiative, not just a tooling swap. This perspective helped align stakeholders and set the stage for adoption.

  1. Phase 1: Process operations

    I ran the project in Lucid Spark to visualize dependencies, owners, and milestones across libraries, comms, docsite updates, and training as a working sounding board, while we used Jira through Confluence to track work tickets. Weekly standups and boards kept progress visible and accountable.

  2. Phase 2: Technical migration

    This phase was the bulk of our time and work, where I divided up designers across libraries to update all style tokens to variables and map semantic decision tokens in the system. We also verified alignments with engineering.

    Together, we migrated 700+ variables in Foundations, replaced legacy styles in five libraries, and did QA for theme parity across light, dark, and grayscale.

  3. Phase 3: Testing and iteration

    We hosted two focused test sessions for native platforms, 52 minutes each, with 16 to 18 iOS and Android designers.

    Three follow-up 1-hour sessions across Web, Foundations, iOS, and Android where designers built with the new libraries and flipped themes live. We logged and fixed issues such as hex conversion after migration, early dark mode mapping errors, color naming confusion, and residual style references, and components that needed fixes including chips, cards, badges, and avatars.

The migration planning board in Lucid Spark: project goals on the left and color-coded tasks by library across weekly columns

The migration board in Lucid Spark

A second planning board laying out milestones for each library week by week

Milestones for each library, week by week

The execution

Semantic token framework restructured

Dynamic theming was enabled automatically in libraries for consumers. We established a semantic decision token structure in the Foundations library, with training and documentation guiding designers to adopt tokens that map directly to engineering, enabling scalable theming and brand alignment. We migrated 700+ tokens and 546 components across five libraries (Foundations, iOS, Android, Web, and Documentation) to shift the system from static styles to Figma variables.

Communication, education, and enablement

I designed and led training to 250+ designers with live demos of instant theme switching and building from scratch with variables, and provided recording and migration guidance to equip hundreds of designers with both the “how” and the “why” behind theming. I actively educated users in following years within onboarding, workshops, newsletter visuals, and internal design conferences on the importance of semantic token usage, theming, and advanced Figma expertise.

Title art reading Theming with Variables, with an astronaut and planets in a starry sky

The Gravity mark, from the training materials

The welcome slide of the variables training, with the two presenters listed

The variables training, live for 250+ designers

Foundations · Theming
The theming documentation, switching screens between themes.

The impact

Confidence

Clear training and design system trust gave teams clarity and created smoother adoption.

Consistency

Semantic tokens aligned design and code, improving parity and reducing bugs.

Efficiency

Workflows that once took hours are reduced to seconds, freeing up time for higher-value work.

Flexibility

Designers can now switch between light, dark, and brand themes instantly.

100%

of Enterprise Native was enabled to turn on dark mode and Brand refresh theme at end of 2025

84k

Variable inserts in a single week post-migration

BeforePrevious theme, light mode only

AfterBrand refresh theme, light & dark mode

After: the brand refresh theme, a home screen in light mode and transactions in dark mode
Before: the previous theme, a home screen and transactions, both in light mode

Drag to compare

The evolution

By Sep 2025, adoption hit a critical milestone: 100% of iOS and Android in enterprise native is now built on our design system using variables. This unlocked a fully refreshed look and feel in native apps, powered by decision tokens and variables. What started as a technical migration in 2024 became the backbone of a visible transformation. Since the initial migration, the variables “database” has continued to evolve. We’ve introduced extended collections, corner radius, typography, and spacing variables. The variable set is now extensive, flexible, and directly mapped across all themes and modes.

In 2026: we extended our theming collections with Capital One’s Discover acquisition.

With onboarding Discover customers and absorbing the Discover design system, we needed a quick, efficient way to keep the look and feel of Discover as they transitioned as customers, yet set up the transition to Capital One experience. With variables in the backend, we architected extended collections in order to enable an addition of a new brand theme.

To achieve this migration, we focused not only on building the system but on helping teams adopt it fully. We partnered across product, design, and tech to highlight the value of semantic decision tokens and the new color system. Because we had established a testing, communications, and rollout process before, we were able to onboard to extended collections within a 3-month time frame seamlessly.

Extended collections · one page, two brands
One page, switched between the Capital One and Discover themes through extended collections.

The insights

  1. Communicate benefits in order to get customer buy-in.

    Training showing the value of semantic tokens from the customer perspective is crucial to usage.

  2. Moderated research and testing surfaces blockers faster than async feedback.

    Observing live, walking through hands-on, and seeing what the consumer experiences and reacts to the system are key drivers in building a better tool.

Project testimonials:

Ashley was an enthusiastic spokesperson for our variables rollout. Her work helped educate consumers about variables and ensure they were adopted smoothly.

Senior product designer

Her execution of delivering variables across Figma helped manage enhancements for new functionality. She's always thinking outside the box and has a passion to innovate and try new things.

Senior manager, product

I've been impressed with Ashley's drive, dedication, and depth of thought around how our decisions will impact UX and her ability to context switch and deliver quality work.

Design manager

Interactive

One decision, every brand and mode

Checking ···4821

$8,932.25

Available balance

Autopay on

Next paymentOct 28
Semantic tokenResolves toAll four
color.surface.defaultneutral.0
color.surface.raisednavy.50
color.text.primarynavy.950
color.text.secondarynavy.600
color.action.primaryblue.700
color.text.on-actionneutral.0
color.border.subtlenavy.150
color.status.positivegreen.700
Illustrative values on a generic card, not the production palette. Every color above is a semantic token, so changing the brand or the mode changes the values and never the design.

New sticker!

Field notes

Little things are hidden around the site. Find all nine to earn one of my sticker designs.

On the shelf

  • The tea on the table looks a little too full.
  • Someone should top up that mug once it runs dry.
  • The plants around here like a little attention.
  • The paper lamp on the shelf has a switch.
  • The red book on the shelf opens.
  • Turn the lights off and look near the plants.

Beside the menu

  • There is a cord hanging beside the menu.

Writing & talks

  • The projector on Writing & talks is ready to roll.

Studio

  • The laptop on the Studio page could use more stickers.