/

design-system

T*****

Design System

DRAG TO MOVE

Scaling Design Across 5 Products: Building a Design System

Scaling Design Across 5 Products: Building a Design System

Role:

Sole Product Designer

Company:

IoT83

Read Time:

5 minutes

Timeline:

April 30, 2024 - Ongoing

Platform:

B2B Web Applications (5+ web apps)

Focus Areas:

Design System, Consistency, Prototyping, Developer Handoff

TLDR;

Built and scaled a design system across 5+ B2B web applications to reduce design debt, improve development efficiency, and enable faster feature delivery without disrupting ongoing sprints.

Context

I joined the team as the sole product designer supporting multiple client facing B2B web applications. There was no design team and no existing design system.

Work was already shipping across 5+ apps. Each product had grown on its own timeline, which meant the UI reflected many small, uncoordinated decisions made over time.

My responsibility was simple to state but harder to execute: bring consistency without slowing the team down.

THE problem

Every time I designed a new screen, I was rebuilding the same structures again.

Three months in, the pattern became obvious.

[01]

No Consistency

Button in Product A had different shade of blue, Product B had different. Same component, no standard.

[02]

Slow Handoffs

Every design handoff triggered 30-minute calls about padding and spacing.

[03]

Design Debt

Same thing built differently across 5 products. Engineers kept rebuilding instead of reusing.

[04]

Can't Scale

One designer couldn't support 5 products because everything was custom.

Incosistent UI

Next

Incosistent UI

Next

THE CONSTRAINT

In a perfect world, I would have paused feature work for a few weeks and built the system cleanly from the ground up.

That was not the reality.

Active development sprints were already in motion, and product work could not stop. Features still had deadlines, and engineering still needed designs on time.

So the design system had to grow in parallel with live product delivery. That constraint shaped the entire strategy.

the approach

I structured the system using atomic principles:

Foundation → Atoms → Molecules → Organisms → Templates.

But instead of building the whole library upfront, I worked incrementally.

Foundation

Foundation

  • Colors

  • Typography

  • Grids

  • Shadows

  • Icons

  • Colors

  • Typography

  • Grids

  • Shadows

  • Icons

Atoms

Atoms

  • Buttons

  • Controls

  • Tags

  • Badges

  • Avatars

  • Tooltip

  • Dividers

  • Progress bars

  • Buttons

  • Controls

  • Tags

  • Badges

  • Avatars

  • Tooltip

  • Dividers

  • Progress bars

Molecules

Molecules

  • Input fields

  • Search bar

  • Dropdown menus

  • Breadcrumbs

  • Pagination

  • Tabs

  • Accordion item

  • Alert/ notification

  • Modal/Popover

  • Date picker

  • Input fields

  • Search bar

  • Dropdown menus

  • Breadcrumbs

  • Pagination

  • Tabs

  • Accordion item

  • Alert/ notification

  • Modal/Popover

  • Date picker

Organisms

Organisms

  • Navigation bar

  • Transfer

  • Header

  • Footer

  • Sidebar

  • Hero section

  • Card grid

  • List view

  • Table

  • Calendar

  • Accordion

  • Navigation bar

  • Transfer

  • Header

  • Footer

  • Sidebar

  • Hero section

  • Card grid

  • List view

  • Table

  • Calendar

  • Accordion

Instead of building the full library upfront, I worked in cycles.

After each feature handoff, while developers were in their sprint, I reviewed the work, extracted reusable patterns, standardized them, and added them to the system. Those components were then reused in the next feature.

This kept product work moving while the system matured.

Process gap I discovered a little too late-

Spacing variables were introduced after roughly 80% of the components were already built.

Once applied, they exposed:

  • uneven padding

  • small alignment inconsistencies

  • spacing mismatches across variants

This required revisiting several components.

Since then, I treat variables as part of the foundation rather than a later cleanup step.

what i built

Colors /

Neutral

Next

Colors /

Neutral

Next

Few glimpses of components i built-

developer collaboration

Each major design required reviews with backend, frontend, and QA.

Before the system stabilized

  • review calls often took 40 to 50 minutes

  • many questions were about edge cases

After molecules and organisms were completed

  • most reviews dropped to 20 to 30 minutes

  • my walkthrough typically took 5 to 10 minutes

  • discussions became more focused

The main change was improved clarity and reuse.

Adoption and Pushback

Core components started getting reused across multiple active apps. Tables, form controls, and navigation patterns saw the fastest pickup.

Spacing variables also began showing up consistently in newer screens once they were properly wired in.

This was the point where the system started feeling real instead of aspirational.
Not every component was accepted on the first pass. Several patterns were pushed back during product and engineering review.

The most friction came from:

  • Transfer component

  • Button redesign

  • Tree view restructure

Earlier feedback also flagged issues in Pagination, Input, and Dropdown, which were later revised and are shipped as of today.

Month 1-2

~20% of new designs using system (system still incomplete)

Month 3-4

~40% adoption (atoms/molecules becoming useful)

Month 5+

~80% adoption (library mature, developers seeing time savings)

Growth drivers

  • System became actually useful (not just aspirational)

  • Better documentation in Storybook

  • Engineers saw real time savings

THE IMPACT

What this meant for the team:

25-40%

25-40%

Faster screen design (from 40-50 min to 15-20 min per screen)

Faster screen design (from 40-50 min to 15-20 min per screen)

30-40%

30-40%

Shorter design reviews (from 40-50 min to 20-30 min)

Shorter design reviews (from 40-50 min to 20-30 min)

18/18

18/18

Engineers using library (90% of new components built on system)

Engineers using library (90% of new components built on system)

On the business side:

2 features

2 features

Launched 3 weeks earlier (design wasn't the bottleneck)

Launched 3 weeks earlier (design wasn't the bottleneck)

80%

80%

Less design-to-dev mis-communication (fewer bugs from design gaps)

Less design-to-dev mis-communication (fewer bugs from design gaps)

1 designer

1 designer

Now supports 5+ products (was impossible before)

Now supports 5+ products (was impossible before)

This is really good.
The distinction between primary secondary and tertiary actions is much clearer now.
Before this it wasn’t always obvious what should take priority.
This makes it a lot easier to review flows.
Great work!

—Brendan Lehman, Product Owner @Truemfg

I no longer have to ask questions related to uneven padding, spacing between same states of components, now it's much easier for me to develop and saves a lot of back-and-forth.

—Amit Joshi, Frontend Lead @Truemfg

Before and After compaison —

AfterBefore

what i'd do differently

If I restarted this work:

  • Introduce variables at the beginning (we learned this 80% in) → Would have saved ~40 hours of rework

  • Validate with engineering earlier → Transfer and Button components had unnecessary revision cycles

  • Map component state matrices upfront → Would have caught edge cases before production

  • Not having a senior designer slowed some decisions → What I'd do: Get design review from peer earlier (we only had PM reviews)

Prototype of a "search" component to help developer understand how it should work

NEXT STEPS

The system is still in progress.

Current focus:

  • completing organism level variable alignment

  • expanding edge case coverage

  • refining the transfer component

  • improving the button system

  • strengthening documentation

  • enabling developer contribution


The goal is to make the system easier to maintain and scale.