Consistency
Design System Level SuperMind  ·  2024

Designing for
Consistency
Under Chaos

How I tackled compounding design debt — by building not just a system, but a way of working.

3 + 6
Designers & Devs
2 -part
Solution
20–30%
Handoff time reduced
iOS = Android
Platform parity achieved

3 designers. 6 developers. Shipping every sprint. And a growing pile of inconsistencies with no system to stop them.

01 · Situation
Where We Started

The app had existing design debt — built up over time without a proper process in place.

When I joined, the inconsistencies were already baked into the product. Not catastrophically — more like a slow leak. The kind of thing that's easy to ignore sprint by sprint, until you zoom out and realize the entire experience feels slightly off.

iOS and Android didn't fully match — same feature, different feel
Buttons and text styles varied screen to screen with no clear rule
Spacing decisions were being made fresh every time, by every developer

On their own, small issues. Together, they were quietly eroding the product's credibility. And with 3 designers and ~6 developers shipping continuously, every sprint was making the debt worse — not better.

02 · Problem
Digging Deeper

This looked like a UI problem. It was actually a process problem in disguise.

The visible symptoms — mismatched spacing, inconsistent buttons — were just the surface. The real issue ran deeper, in two places:

Design loss in development — what got designed in Figma wasn't what users actually saw
Broken handoff — handoffs weren't a system, they were conversations. And conversations don't scale.

We weren't just building features anymore. We were constantly correcting the past.

Every new feature inherited the inconsistency of the last. There was no feedback loop to catch it, and no shared language to prevent it.

03 · Shift
Reframing the Question

Instead of asking "how do we make the UI consistent?" — we asked something sharper.

How might we ensure that what gets designed is exactly what gets shipped?

That single reframe changed everything. It moved the problem from aesthetics to infrastructure. And it led to a two-part answer: build a system that removes ambiguity, and build a process that catches what slips through anyway.

04 · Approach
How We Structured It

We didn't just list values. We justified every decision and showed it in context.

Before writing a single token, we studied how other teams had solved this. The Wise design system — built for a global finance product — came closest to what we had in mind. What stood out wasn't the tokens themselves, but the philosophy behind them: every spacing value, every component, every rule was grounded in a reason, paired with a real usage example.

We structured ours the same way. Each token wasn't just a name and a value — it came with context. Why does between-cards map to size-40? What does it look like in the actual product? Where does it break? That layer of justification is what made the system adoptable, not just referenceable.

05 · System
Part 1 — The Design System

We started with tokens — not components. Foundation first, then intent.

Most design systems start with components: buttons, cards, forms. We started one layer below — with the values those components are built from. Foundation tokens defined the raw scale. Semantic tokens gave those values meaning.

Semantic Token Foundation Value
between-cards size-40
component-default size-20
between-section-large size-60
between-text size-20

The shift was immediate. "Is this 16 or 20?" became "use component-default." Decisions that used to require a conversation were now just a token name. Layouts became predictable across screens and platforms without anyone having to police them.

Each token was also paired with a real usage example from the product — showing exactly where and how it applied. A developer reading the spec didn't just see a number, they saw it on an actual screen from the app.

Between Cards usage spec showing token applied in real app screens
between-card-small Spacing between content suggestion cards, shown in context
Between Cards large usage spec
between-large Search results layout — same token, different density context

For components, we kept the same principle — clarity over completeness. Buttons got a strict four-tier hierarchy: Primary (one key action), Secondary (alternatives), Tertiary (supporting), Minimal (dismissive). But we didn't stop at defining them — we documented the do's and don'ts with real product screens.

Primary button usage spec showing correct and incorrect usage
Primary Button One per page. The do/don't was shown with an actual flow from the app
Secondary button usage spec
Secondary Button When actions share equal hierarchy — contextual example from the product

This made the system feel like a product decision, not a style guide. The person reading it had the full context — the value, the reason, and the real screen.

06 · Process
Part 2 — Fixing the Handoff

The system removed ambiguity. But design loss during implementation needed something else.

A great design system still gets lost in translation if the handoff is broken. Developers implement what they understand — and the gap between a Figma file and a running app is where most of the inconsistency was happening.

So we added one new step: a UI Testing Round. Before any feature was considered shipped, designers and developers sat together and went through it screen by screen.

Spacing, typography, states, and alignment — all checked against the source
Issues caught before release, not after
Both sides sign off before it ships

Handoff stopped being a one-time event and became a closed feedback loop.

The biggest outcome wasn't just fewer bugs — it was shared ownership. Developers started caring about the UI because they were part of the decision. That culture shift was harder to build than any component library.

We stopped fixing UI after shipping. We started shipping it right the first time.

07 · Impact
What Changed

Four things shifted — and the last one mattered most.

01

Faster and smoother handoffs

A shared token language meant shorter conversations and quicker decisions every sprint.

02

Significant reduction in design loss

What got designed in Figma became what users saw. The gap between intent and implementation closed.

03

Visual consistency across iOS and Android

Tokens enforced the same decisions across both platforms — no manual policing needed.

04

Controlled, gradually reducing design debt

The compounding cycle broke. Each sprint added less debt, and we slowly started paying off what was already there.

Key Learning

A design system alone doesn't solve consistency.

The system reduces ambiguity. But systems fail without process, and process fails without shared ownership. Real, lasting consistency comes from both — working together.

Systems fail without process
Process fails without shared ownership
Both are needed for it to stick

This wasn't just about
building a design system.

It was about changing how design gets built, handed off, and shipped. And that's what made it stick.

View the live design system ↗