Bupa Design SystemCase Study

Design Once Ship Everywhere.

Design token architecture and automated governance across three brands and three platforms at Bupa Australia.

01

Audit & consolidate the design system

Engaged through Torii Consulting for a six-month independent audit of Bupa Australia's design system. Three brands (Bupa, Blua, Mindplace), five Figma libraries, web and native platforms.

I came in as an outside expert: assess the system against industry standards, identify the debt that was costing the team, and lay out a roadmap. Then build the architecture, governance, and automation to deliver on it.

Token architecture, contribution governance, and the Power Automate intake pipeline. All built to be owned by the team after my engagement ended.

Design systems accumulate debt. Stripping it back is half the job.
The other half is the governance and automation that stop it coming back.

02

Current reality

43
Figma Libraries Expected
131
Figma Libraries Found

Initial scoping suggested 43 Figma libraries. The audit found 131 across 8 workspaces. Around 80 working files had been accidentally published as libraries. Archived libraries still showed 100+ weekly inserts. Teams had independently created and published libraries to solve immediate needs.

How they got here

? ? ? ?
Speed Over Structure
Delivery was prioritised. Governance was deferred. No design system council.
→ Anyone could publish a library
Team Turnover
Institutional knowledge left with people. No documentation survived transitions.
→ Context lost on every rotation
Source
Platform Silos
Web, native, and marketing operated independently with no shared tokens.
→ Same name, different values
× × ×
No Single Owner
No foundation team, no intake process, no formal contribution path.
→ “Who decides?” had no answer

There was no foundation team, no single source of truth, no intake process, and no formal contribution path. The question “who decides?” produced a different answer depending on which team you asked.

Teams shipped fast. Governance came later. Organic drift was inevitable.
Nobody did anything wrong, everyone solved their own problem.

What I observed

5
Fragmented libraries
1,714
Tokens in circulation
84%
Flagged for consolidation
0
Automations in place
Critical 4

Duplicate components

The same primary button lived in four libraries, each subtly different. Designers could not tell which was canonical.

Zombie libraries still in active use

Deprecated libraries were still referenced by production files. Retiring them without a plan would break live pages.

Cross-platform mismatch

Web and native used different names for the same token. A design signed off in Figma shipped looking different on iOS.

Working files mixed with published libraries

No separation between draft and source of truth. Unfinished work was being consumed as if it were canonical.

High 5

Naming drift across platforms

cool-grey, coolgrey, and coolGrey all existed. Build tools treated them as different tokens.

Orphaned styles with no owner

Legacy styles sat on the shelf with no roadmap and no one accountable for them.

No deprecation path

Teams did not know what was safe to delete, so nothing was deleted.

Undocumented design decisions

Rationale lived in Teams chats, or nowhere. New contributors kept rehashing the same debates.

No contribution model

Requests came in through eight different channels. Nothing was trackable or triaged.

Technical blockers

The token audit uncovered structural issues that would block any migration attempt. These were ranked by severity: critical issues would cause silent UI failures if not resolved first.

Critical 2

Alpha scale naming collision

Legacy tokens used a 0-100 scale where alpha-100 meant solid. The new system used 0-1000 where alpha-100 meant 10% transparent. A direct name migration would make UI elements invisible with no error.

Incompatible alpha scales

Web defined 7 transparency stops per colour (100% efficient). Native defined 21 stops (only 62% referenced). A 1:1 cross-platform mapping was impossible.

High 3

Naming inconsistencies causing silent failures

cool-grey vs coolgrey vs coolGrey. Build tools treated these as different tokens. Scripts failed silently when names didn't match.

Token collection name typos

Spelling inconsistencies in collection names persisted across multiple files. Migration scripts could not find their source files. No review process existed for token file structure.

244 coloured alpha tokens

Across native and web (4 colours x 20+ stops, multiplied across brands). A single black + white overlay approach could replace all of them.

I also assessed the token files against the W3C Design Token Community Group (DTCG) specification, identifying gaps in naming conventions and file structure that would need to be addressed for interoperability with tools like Style Dictionary or Tokens Studio.

Colour contrast and accessibility were considered throughout. The token consolidation prioritised maintaining WCAG AA compliant pairings across all semantic surface and text combinations, ensuring the unified system would not introduce accessibility regressions.

03

The consolidated token system

I built a “Rosetta Stone” mapping to reconcile every token name and value across web and native. The unified semantic layer was platform-agnostic, with platform-specific output only at the primitive translation layer. 1,714 tokens became 450: 235 primitives and 215 semantics. Alpha tokens dropped from 415 to 22, a 95% reduction. Of the 244 coloured alpha tokens identified, 205 were eliminated and the remainder were consolidated into a single black/white overlay system.

149 tokens that had previously existed only in code (typography, dimensions, component tokens) were added to Figma Variables for the first time. Designers and developers could finally reference the same canonical source.

The single source of truth was delivered in three formats: an editable Excel spreadsheet for stakeholder review, Figma Variables for the design team, and W3C DTCG-compliant JSON for the Style Dictionary build pipeline. Each format served a different audience but drew from the same canonical data.

Multi-brand consolidation brought Bupa, Blua, and Mindplace under one architecture, with brand-specific theming handled through modes rather than separate token files. Five grey scales became two. Twenty-seven colour families were rationalised to thirteen.

Three-tier model

Primitive
blue/500
#0079C8
space/4
16px
radius/md
8px
Semantic
surface.action
blue/500
spacing.inset.md
space/4
radius.control
radius/md
Component
button.primary
bg: surface.action
padding: spacing.inset.md
radius: radius.control

By the numbers

450 tokens total, split across the three tiers. Primitives are the raw values. Semantics are the named aliases. Components inherit both.

Tier 1
Primitives
235
Raw colour, spacing, and type values. The foundational palette.
143
Colour
70
Alpha
22
Other
Tier 2
Semantics
215
Purpose-driven aliases. Named for what they do, not what they are.
156
Colour
59
Component

Colour scales - all 10 families

Every colour family uses a consistent 11-stop scale (50-950). Real hex values from the consolidated token system.

Blue
50
100
200
300
400
500
600
700
800
900
950
Teal
50
100
200
300
400
500
600
700
800
900
950
Green
50
100
200
300
400
500
600
700
800
900
950
Red
50
100
200
300
400
500
600
700
800
900
950
Purple
50
100
200
300
400
500
600
700
800
900
950
Orange
50
100
200
300
400
500
600
700
800
900
950
Yellow
50
100
200
300
400
500
600
700
800
900
950
Pink
50
100
200
300
400
500
600
700
800
900
950
Cool Grey
50
100
200
300
400
500
600
700
800
900
950
Warm Grey
50
100
200
300
400
500
600
700
800
900
950

V1 readiness

Hand-off needed an honest scorecard, not a victory lap. Working with the design and engineering leads, I walked the team through thirteen foundational decisions and recommended a status for each: locked and ready to ship, parked for governance to resolve, or open to refine through real use. The foundation is solid. Some decisions are deliberately unfinished, because the team will sharpen them better than I can on my own.

LockedDecided and ready to implement 7
Single library structure
One source, no duplicates.
Naming conflicts resolved
Alpha scale collision fixed.
Kebab-case convention
One casing across platforms.
11-stop colour scales
Consistent ramps, all brands.
Grey palette alignment
Web and native now match.
Alpha token consolidation
415 alpha tokens consolidated to 22 shared B+W stops.
Figma migration path
Foundation for Style Dictionary export.
DeferredParked for governance input 3
Colour family naming
Needs governance consensus.
Ink token deprecation
Migration plan sits with governance.
Semantic naming conventions
Governance to ratify.
EvolvingWill refine through real use 3
Specific scale values
Refine after 3 months in production.
Semantic coverage depth
Expand as patterns mature.
Dark mode support
Needs real usage data to tune.
04

Governance & triage framework

Before my engagement, the team had no central intake form. Requests arrived from eight scattered channels: Teams DMs, Figma comments, Confluence pages, hallway conversations, phone calls, and meeting action items. Nothing was tracked. Nothing was triaged.

I designed a contribution framework around a five-step process: Need, Submit (one form, two minutes), Triage (Light/Medium/Heavy), Route (right team, right level), Done (clear owner, clear next step).

Light governance that enables speed. Too little creates chaos. Too much kills adoption.

We're not gatekeepers, we're a service.

Triage framework

Each request was categorised into one of three triage tiers, which determined SLA, ownership, and approval level. Representative sample of 12 governance patterns from the full framework.

Light
Bug fixes, token value updates, documentation corrections. Same-day resolution by any team member.
Medium
New component variants, pattern library additions. Weekly triage review, 2-5 day turnaround.
Heavy
New components, architectural changes, cross-platform impacts. Requires design review and stakeholder sign-off.

Maturity roadmap

This roadmap plots the design system's progression across three core capabilities, from manual foundations through automation to an aspirational dream state.

Capability
V1 - Foundation
V2 - Automation
Dream State
Intake
One form for all
Smart questions adapt based on request type. Single entry point.
Auto-routing
Power Automate classifies and routes to the right team automatically.
Predictive triage
A machine-learning model auto-classifies request complexity before human review.
Triage
Weekly review
Friday triage meeting, 24-48hr response SLA.
SLA-driven
Automated SLA tracking with escalation paths.
Real-time dashboard
Power BI live metrics with predictive bottleneck alerts.
Tracking
Spreadsheet log
Manual tracking of all requests and outcomes.
ADO integration
Auto-created work items with full audit trail.
Contribution scoring
Gamified contribution metrics driving team engagement.

Excerpt from the full maturity roadmap.
The complete version in the governance report covers the full capability set across the design system lifecycle.

05

Intake pipeline architecture

Requests didn't stop coming in from everywhere. They never will. What changed is that there's finally a place to direct them, and an automated flow behind it that catches what used to slip through the cracks.

Before

No front door

Requests came from everywhere: DMs, channels, hallway chats, Figma comments, calls. There was nowhere to direct them.

Each one was captured manually by whoever happened to catch it. No form, no triage, no consistency. Things slipped through the cracks.

No front door. No formal process.
No consistency.
Teams DM
Direct message
Teams Channel
Channel post
Figma Comments
Design feedback
Confluence
Page comments
Hallway
In-person chat
Phone Call
Verbal request
Teams Meeting
Verbal request
Email
Outlook chain
Azure DevOps
Ticket comments
After

One front door

One intake form, one process. Every request flows through the intake form, automatically routed, fanned out to the surfaces the team already lives in, and tracked end to end with SLA visibility and clear ownership.

Microsoft Forms
Capture request details
Power Automate
Process and route requests
  • Teams Card
    Adaptive Card for instant visibility
  • Team Email
    Request details sent to the relevant team
  • Confirmation
    Receipt with ID sent to the requester
  • Azure DevOps
    Story or Bug created and linked automatically
  • SharePoint
    Request log for tracking and reporting
1
Single entry point
All requests start in the intake form
6
Outputs
Teams, 2 emails, SharePoint, ADO, Power BI
Instant
Confirmation
Automated receipt sent to the requester
100%
Visibility
Track every request from start to finish

Inside the flow

The flow tree below shows the actual Power Automate structure: 31 actions, 14 variables, 6 connectors, and a Switch block handling four urgency tiers.

DS Intake - Notify + Email + ADO
Power Automate

A single cloud flow triggered by Microsoft Forms. It initialises 14 variables, runs an urgency Switch, loops through links and attachments, creates an ADO work item, logs the request to a SharePoint list, posts a Teams Adaptive Card, and sends two formatted emails, all in one run.

31 actions · 14 variables · 6 connectors
DS Intake - Notify + Email + ADO
Get response details
Get user profile (V2)
Post card in channel
Initialize variables (14)
Switch (Urgency)
Case 1
urgency 1
Case 2
urgency 2
Case 3
urgency 3
Case 4
urgency 4
Send email (V3)
+ 12 more actions

What the team receives

A single Power Automate flow handles conditional routing, variable manipulation, and parallel branches. Every submission fans out across the four surfaces the team already lives in. Each tab below shows the actual output.

Microsoft Teams
DS Intake Request
Bupa Design System
🟢 Low
Button hover state on mobile
The primary button does not show a hover state on mobile Safari. When tapping, there is no visual feedback that the button has been pressed.
Submitted byNate Mills
TypeBug report
PlatformWeb
UrgencyLow
DepartmentDesign Experience team
TeamProduct
Figure: Custom Teams Adaptive Card posted to the DS Intake channel. Urgency badge, metadata grid, links, attachments, and action buttons are all dynamic.
Outlook
Bupa
Design System Intake Request
New Request
Button hover state on mobile
The primary button does not show a hover state on mobile Safari.
Urgency
Low
Type
Bug report
Platform
Web
Submitted by
NameNate Mills
DepartmentDigital Transformation
Emailnate.mills@example.com
Figure: Branded team email with Bupa header, urgency-coloured tiles, structured metadata, and ADO deep link.
SharePoint | Bupa Design System
DS Intake Requests
Your Name Team Type Platform Urgency
Sarah Chen Health Ins. New Component Web High
James Wu Digital Bug Native High
Priya Patel Claims New Component Web Medium
Tom Baker Ops Bug Native Low
Mei Lin Product New Component Web Medium
5 items
Figure: SharePoint list logging every submission with 14 tracked columns. Feeds Power BI dashboards for request analytics.
Azure DevOps Design System Board
Board Backlog Sprint
New 5
Native Material lib
DS-1024
Inverted button
DS-1025
ChipGroup rename
DS-1026
Active 10
UI Components
UI Engineer
Intake from ADO
Nate Mills C
DS governance
Lead DS Designer
Review 1
Combobox live
QA Engineer
Test 2
DS CDN config
Web Developer
Token updates
Mobile Designer
Done 8
Accent colours
Nate Mills C
Visual examples
Mobile Designer
iOS colour custom
UI Engineer
Figure: Azure DevOps board showing auto-created work items. Bug or Story routing, with board and parent Feature determined by Platform.

Hub and spoke: one canonical path to the dashboard

Four spokes feed the SharePoint hub. The hub feeds a single Power BI dashboard. The dashboard is the visible output, but the capability itself lives in the schema and the flow graph.

Power Automate Intake flow events Figma REST API Library health polls MS Graph webhooks Forms and Teams events Azure DevOps Work item lifecycle SharePoint 14 cols, 1 SSoT Power BI One consumer SLA, throughput, adoption SPOKES HUB CONSUMER
Why hub-and-spoke
Without a canonical store, every tool becomes its own silo with its own truth. The hub ends that.
Capability, not report
Power BI is replaceable. The SharePoint schema, flow graph, and spoke contracts are the asset.
Extends cleanly
New spokes (GitHub, Loop, token CI) plug into the hub without rewriting downstream reporting.

The dashboard itself

Design System Analytics Dashboard
Power BI

A single Power BI dashboard fed by the Figma Library Analytics API, webhook logs, and SharePoint data. Replaces three separate cards with one consolidated view.

  • Component popularity: most and least used components across the org
  • Adoption rates: which teams use which libraries and how frequently
  • Library health: component counts, last publish dates, approved status
  • Token coverage: semantic tokens vs raw values across libraries
Design System Health
Components
247
+12 this month
Adoption Rate
84%
+3% vs last quarter
Library Usage by Team
Web
iOS
Android
Email
CMS
Active Libraries
6
1 stale (>6mo)
Token Coverage
91%
semantic vs raw
Most Used Components
Button
Input
Card
Modal

Illustrative dashboard layout. Sample data shown, not live metrics.

06

Measurable impact

Six months of consolidation, governance design, and automation produced measurable structural improvements across the system.

131483
Libraries audited, then consolidated into a single workspace
1,714450
Tokens consolidated across platforms (74% reduction)
41522
Alpha tokens rationalised (95% reduction)
Zero
Manual triage replaced by the automated intake pipeline
3 Formats
Single source of truth in Excel, Figma, and W3C JSON
3 × 3
Brands (Bupa, Blua, Mindplace) and platforms (iOS, Android, Web) unified on a single token library

Everything was delivered within the contract period and transferred to the team. I recommended a phased rollout rather than a big-bang migration for the remaining component re-tokenisation. The semantic tokens were designed to be platform-agnostic with platform-specific transforms at the output layer, meaning brand expansion becomes a configuration change, not a rebuild.

What the audit identified

Seven structural problems surfaced by the audit: duplicated libraries, naming conflicts, colour family and scale fragmentation, neutrals sprawl, alpha token bloat, and a stalled Figma Variables migration. Each became a workstream in the roadmap.

Single Library
5 sources merged
into 1 SSoT
Naming Conventions
Conflicts resolved,
kebab-case
Colour Families
27 to 13 families
(14 deprecated)
Colour Scales
11-stop
standardisation
Neutrals
5 to 2 grey
scales unified
Alpha
415 to 22 tokens
(95% reduction)
Token Migration
149 tokens in
Figma Variables

What I delivered

Beyond the token architecture and governance framework, I produced a comprehensive set of artefacts built to outlast the engagement.

Primary Deliverable

Figma Variables
450 tokens · 5 libraries → 1 - Single source of truth for Bupa, Blua, and Mindplace.

SSoT Spreadsheet

Microsoft Excel

Editable master with all 450 tokens, mappings, and migration notes.

Design Tokens JSON

W3C DTCG Format

Style Dictionary-ready JSON. Direct pipeline to code.

Token Audit Report

Interactive HTML

Full analysis of all 1,714 tokens with cross-platform comparison.

Colour Explorer

Interactive HTML Tool

Browsable colour families, scales, and alpha variants with live swatches and token metadata.

Contrast Checker

Interactive HTML Tool

WCAG AA/AAA pass-fail testing across every foreground-background pair in the token set.

Audit Tickets

Azure DevOps

Every token inconsistency captured as a tracked work item with platform tag, severity, and owner.

Governance Framework

Documentation

Contribution model, triage framework, and maturity roadmap.

Power Automate Pipeline

1 Flow · 31 actions

Conditional routing, variable manipulation, and parallel branches powering the intake infrastructure.

07

Looking back, looking forward

What I would carry forward

Governance infrastructure should be set up so any team member can run it. Every automated flow, every service account, every shared channel was configured with team continuity in mind. The intake pipeline runs whether I am there or not.

Not everything needs to be resolved before V1 ships. The 7-3-3 framework (7 locked, 3 deferred, 3 evolving) gave stakeholders confidence that the foundation was solid while acknowledging that some decisions need real-world validation before they can be finalised.

The token consolidation also highlighted the value of building accessibility into the foundation layer. WCAG AA contrast compliance was verified across all semantic surface and text token pairings.

What I would explore next time

The Figma Enterprise API webhook integration would be a strong next step. Automated library creation monitoring would help prevent sprawl recurring during a consolidation period.

Investing more time upfront on shared vocabulary with the native development team would also accelerate naming reconciliation. Earlier alignment on semantic conventions reduces handoff overhead later.

Tools and skills applied

Figma Design Tokens (W3C DTCG) DesignOps Power Automate Azure DevOps Power BI SharePoint Microsoft Forms WCAG / Accessibility Style Dictionary Notion Confluence Multi-brand Theming Cross-platform Tokens

What I'd build next

Automation
Predictive triage
A machine-learning model that learns from past intake tickets and automatically routes each new request to the right team, so designers and engineers only review the ones that really need a human eye.
Tokens
Multi-brand token pipeline
One source of truth, three outputs. A Style Dictionary build turns the shared token file into ready-to-use code for iOS, Android, and web, so every brand stays in sync without manual handoff.
Analytics
Figma API health checks
Weekly automated scans of every Figma library that surface unused components, orphaned styles, and naming drift, so the system stays clean without anyone having to audit it by hand.
Governance
Contribution playbook
Step-by-step guides, templates, and review checklists that make it easy for any designer to contribute new components, with automated checks catching issues the moment a pull request lands.