A
Work / Fiserv Design System design system
100% ▾
SECTIONS
00 · Cover
01 · Overview
02 · The Problem
03 · Foundation
04 · Component Library
05 · Developer Adoption
06 · Before / After
07 · Challenges
08 · Impact
09 · Learnings
AUDIO OVERVIEW
~2 min
Spoken walkthrough: problem, approach & outcomes
0:00 2:00
PROJECT
Dispute Workspace DS
clientFiserv
roleUX Designer
typeDesign System
components45+
workflows12+ core
status● Shipped
OUTCOMES
65% faster
design output
40% faster
development
−67%
post-launch bugs
WCAG 2.1 AA
accessibility, day one
RELATED
Disputes Workspace →
the product this DS powers
◇ 00 · Cover
CASE STUDY 04 · FISERV · DESIGN SYSTEM SHIPPED TO PRODUCTION

Disputes Workspace Design System: building the foundation first

I replaced 20 years of fragmented UI with a shared, accessible system. More than 45 components now support 12 core workflows across Fiserv's internal platform.

AUDIO OVERVIEW · ~2 MIN 0:00
Press play for a spoken walkthrough of this case study
DWS Design System, Fiserv
65%
Faster design output
40%
Faster development
−67%
Fewer post-launch bugs
4.6 / 5
User satisfaction
COMPANY
Fiserv
TYPE
Design System
ROLE
UX Designer
COMPONENTS
45+
◇ 01 · Overview

Project overview

My role

I was the UX designer. Before touching a single new screen, I needed to build the foundation the entire platform would run on. That meant auditing what existed, defining the system architecture, building components from scratch, and getting a team that had never worked with a designer to actually use it.

The impact

65% faster design output. 40% faster development. 67% fewer post-launch bugs. WCAG 2.1 AA compliance from day one. And a satisfaction score of 4.6/5, up from 2.8 in the legacy system.

THE CORE INSIGHT

A design system isn't a component library. It's a set of decisions made once, so you never have to make them again under deadline pressure.

What we shipped

KEY METRICS FROM THE DESIGN SYSTEM IMPLEMENTATION

45+
Components built
1.8×
Faster sprint velocity
67%
Fewer post-launch bugs
12+
Core workflows covered
◇ 02 · The Problem

20 years of UI, zero designers

The platform had been extended by rotating dev teams for 20 years with no designer involved. The result was a UI that looked and behaved differently across almost every workflow area.

What the audit found:

7 different button styles across the platform
Spacing values ranging from 4px to 32px with no system logic
Status colors that meant different things on different screens
Zero accessibility compliance, no focus states, no contrast checking
No documentation for developers building new features
REAL CONSEQUENCES

The problem wasn't just visual

In a dispute management platform, inconsistency has real consequences. Status colors that contradict themselves affect how banks classify cases. Broken form accessibility means compliance risk. And without a shared system, every new feature required designers and developers to start from scratch.

◇ 03 · Foundation Setup

Tokens first. Everything else follows.

Before building a single component, I established the token layer: the design decisions that flow through every element in the system. Tokens are what make a system resilient: one variable update instead of hundreds of component edits when things inevitably change.

COLOUR TOKENS
primary.blue
#155DFC
semantic.success
#009966
semantic.error
#D92D20
semantic.warning
#F59E0B
8PT SPACING SCALE
space-1 · 8px
space-2 · 16px
space-3 · 24px
space-4 · 32px
space-6 · 48px
TYPE SCALE
Heading 1
Heading 2
Body · Regular
mono · meta labels
JAVASCRIPT TOKENS USED BY DEVELOPERS
export const tokens = {
  color: {
    action: { primary: "#155DFC" },
    status: {
      success: "#009966",
      warning: "#F59E0B",
      error: "#D92D20"
    },
    ai: { surface: "#EFF6FF", border: "#B8D7FF" }
  },
  space: { xs: 4, sm: 8, md: 16, lg: 24, xl: 32 },
  radius: { control: 4, panel: 10 },
  type: {
    label: { size: 12, weight: 600 },
    body: { size: 14, lineHeight: 20 }
  }
};
HOW THE TOKEN BECOMES UI

One source, three surfaces

Developers were not expected to infer values from screenshots. The same semantic token drove the Figma component, the CSS variable, and the JavaScript theme object used in the application.

Figmacolor.status.error
CSS--ds-status-error
JStokens.color.status.error
Semantic colour palette
semantic colour palette: consistent status meaning across every workflow
◇ 04 · Component Library

45+ components covering 12+ workflows

Every component was built for the realities of a financial data platform: data-dense tables, multi-state forms, accessibility-first interaction patterns, and AI-transparency elements that had no off-the-shelf equivalent.

COMPONENT COVERAGE MATRIX

What the system actually covered

Inputs

Text field, select, date picker, checkbox, radio, search, amount input

Data Display

Data table, status badge, detail panel, key-value row, pagination

Feedback

Alert, inline error, toast, loading state, empty state, validation summary

Navigation

Tabs, breadcrumbs, side nav, page header, section anchors

Actions

Button, split button, icon button, bulk action bar, overflow menu

AI Patterns

Suggestion card, confidence badge, reasoning panel, override control

CORE COMPONENTS

Forms & inputs

Text fields, selects, date-pickers, radio groups, and checkboxes, all with focus states, error states, and ARIA labels baked in from day one.

CORE COMPONENTS

Data tables

Sortable, filterable, with bulk-action selection, sticky headers, and status-badge integration, the backbone of every queue and list view.

AI PATTERNS

Confidence badges

High / Medium / Low labels replacing opaque percentages, designed so agents see why the system thinks something, not just a score.

FEEDBACK

Alerts & notifications

Consistent patterns cover success, error, warning, and information states. Icons reinforce color, while ARIA roles announce each state to screen readers.

COMPONENT DEEP DIVE

Dispute queue table

The table spec covered the conditions analysts actually handled: high-volume queues, batch selection, SLA urgency, sticky headers, long chargeback reasons, row actions, loading states, and keyboard focus.

QUEUE SCALE
1,000s / month
VARIANTS
14 states
ACTIONS
single + bulk
A11Y
WCAG AA
case
reason
amount
sla
status
action
CBK-1284
Duplicate charge · POS terminal batch
$247.90
4h
Urgent
Open
CBK-1311
Services not received · travel evidence pending
$1,420.00
1d
Review
Open
FORM STATES

Validation written as implementation rules

Inputs covered labels, helper text, error copy, disabled values, required fields, and focus treatment, so engineers could ship consistent dispute forms.

Merchant descriptor
NOVA TRAVEL SERVICES
Disputed amount
$1,420.00
Confirm partial dispute rules.
AI PATTERN LAYER

Rules for regulated AI suggestions

The system separated AI-generated recommendations from user-entered data, required confidence language, exposed source evidence, and kept override paths visible for auditability.

AI surfacecolor.ai.surface
Required evidencemerchant, amount, history
Required actionaccept / override
STATE MODEL
Default Hover Focus Disabled Error Loading Selected
◇ 05 · Developer Adoption

Making the system easier to use than not using it

No Storybook. No design token pipeline. Developers received Figma specs. Some had long habits of writing their own CSS. Getting adoption without mandating it was the critical challenge.

THE TRADE-OFF

Mandating the system would have killed it

The fastest path on paper was to enforce the system, lock the components and require its use. But the developers had years of writing their own CSS and no Storybook to lean on, so a mandate would have bought resistance, not adoption. I made the system easier to use than not using it, drop-in components and real documentation, and won adoption by pull instead of decree. Slower to full coverage, but it actually stuck.

01

Clear annotations on every component

Figma annotations documented exact spacing, CSS properties, and state conditions, which gave developers clear implementation guidance.

02

One-on-ones with senior devs

I involved senior developers in naming decisions early. Two became informal advocates who flagged off-system work during code review.

03

Acceptance criteria = delivery requirement

WCAG compliance went into sprint acceptance criteria. I framed it as preventing future rework, not adding new work. That reframe changed the conversation.

◇ 06 · Before / After

Before / After

Before
No shared spacing system
Status colours used inconsistently
No focus states on interactive elements
No component documentation
Every feature started from scratch
After
8pt token-based spacing everywhere
Semantic colour tokens, consistent status meaning
WCAG 2.1 AA focus states on all interactive elements
Figma annotation layer on every component
New features assembled from existing tokens & components
◇ 07 · Challenges

What made this hard

Building a design system is a political project as much as a design project. The system has to be easier to use than not using it, or it won't be used.

⚡ TENSION

Mandate the system and developers resent it as imposed process; leave it optional and nobody adopts it. No Storybook, no token pipeline to lean on.

✅ DECISION

Make the system easier to use than not: clear annotations, exact CSS values, and senior devs pulled into naming decisions. Adoption became a design problem, not a mandate.

02

Getting developer adoption without mandating it

No Storybook, no token pipeline. I made the system easier to use than not: clear annotations, one-on-ones with senior devs, involving them in naming decisions. Two became informal advocates who flagged off-system work in code review.

03

WCAG compliance in a legacy codebase

When I introduced accessibility requirements, some developers saw it as scope creep. I reframed it: we're preventing future rework, not adding new work. I ran contrast checks, wrote specific WCAG criteria per component, provided exact CSS values. The ask to developers was small.

04

Introducing design practice to a team that had never worked with a designer

No design reviews, no shared Figma workspace, no established process. I made the process lightweight: async Figma comments instead of scheduled reviews, acceptance criteria written in developer language. The system had to fit the team's workflow or it wouldn't get used.

◇ 08 · Impact
MEASURABLE IMPACT

Results

Measurable impact across design velocity, development efficiency, and product quality.

65%
Faster design output
through component reuse
40%
Faster development
through token-based CSS
−67%
Fewer post-launch bugs
consistent implementation
4.6 / 5
Satisfaction score
up from 2.8 in the legacy system
WCAG 2.1 AA
Accessibility compliance
from day one of launch
◇ 09 · Learnings

What I learned

01

Tokens first, always

They're what made the system resilient to the changes that always come. One variable update instead of hundreds of component edits. I'd do this even earlier on the next project.

02

Ship V1, then improve it

Perfect doesn't get used. Components that ship and get used get better through real feedback. That feedback made the system better than any amount of upfront planning would have.

03

Adoption is a design problem

A design system only works when teams use it. I should have documented more of the reasoning behind each decision, which would have helped future designers more than adding components.

04

Engineering input earlier

Some component decisions I made unilaterally were harder to implement than necessary. A conversation with the tech lead at the token-naming stage would have saved two sprint cycles.

PROCESS TOOLING
Figma · annotated components Maze · usability testing Jira · acceptance criteria AI-assisted research synthesis (−40% analysis time)