Available · now
№ 04 · Selected work Design system

Unifying a fragmented software ecosystem.

Visual designer on an RKS-led design-system engagement for a 70-year-old precision-instrument manufacturer — 60+ screens across web, WPF, and legacy embedded, in two themes, one system.

Outcome One token set carried both themes across three rendering contexts with no platform-specific exceptions — the system was approved by the client design council and handed to engineering for production rollout.

Numbers Available on a call
RoleVisual designer, design system
PeriodMulti-sprint engagement
ContextEnterprise via RKS
StatusShipped to engineering
Hamilton Company design system — the unified UI shown across product surfaces
The Hamilton Company design system — 60+ screens unified across web, WPF, and embedded interfaces under one token set.

Inheriting a direction. Owning the system.

Hamilton Company is the market leader in automated liquid handling — founded in 1947, 3,000-plus employees across six continents, ISO 9001 certified globally. Their flagship Microlab STAR has been the top-selling robotic pipetting platform for years running, with 5,000-plus systems deployed in labs from pharma R&D to diagnostics to NGS workflows.

I joined this engagement as visual designer on an RKS-led design-system project. The strategic direction — an approved dashboard concept — was already set. My job was not to redraw it; it was to take that single approved direction and extend it into a complete, coherent system: 60-plus screens across web, WPF, and legacy embedded interfaces, in two themes, governed by one visual language.

Inheriting a direction and owning a system are different jobs. The first is execution. The second is judgement — hundreds of decisions the original concept never had to make, each of which has to stay consistent with a direction someone else set. That distinction is the whole engagement, and it is the skill the case is meant to show.

Hamilton Company — the approved dashboard direction on an enterprise desktop application
Fig. 1 The approved dashboard direction — the inherited starting point, extended from one concept into a 60-plus screen system.

A design system’s value is measured in what stays consistent when the implementation context won’t.

One system, three contexts — without a single platform-specific exception.

This is what made the Hamilton engagement genuinely difficult. The system had to work across web, WPF, and legacy embedded interfaces — three rendering environments with three different sets of capabilities — without creating a separate design language for each.

Platform-specific exceptions in a design system are a slow-motion catastrophe. Each one looks reasonable in isolation: this works differently on WPF, so let it. But they compound. Enough of them and the “system” is three systems wearing one name, and the consistency it was built to create has quietly fractured. The discipline was to refuse the easy exception every time it was offered — and it was offered often.

The before-and-after below is the problem stated visually: interfaces that had drifted apart over years of platform-by-platform development, pulled back to one language. The fragmentation is the thing the system exists to end.

Hamilton interface before the design system — inconsistent legacy UI
Fig. 2a Before — legacy interface, inconsistent with its siblings.
Hamilton interface after the design system — unified visual language
Fig. 2b After — the same surface under one governed language.
Hamilton secondary interface before the design system
Fig. 2c Before — a second surface, drifted.
Hamilton secondary interface after the design system
Fig. 2d After — pulled back into the system.

Building the foundation before the features.

A design system is built from its tokens up, not its screens down. The first decisions were the ones nobody screenshots.

The type scale. Hamilton’s existing interfaces used inconsistent sizing across platform types — headings in the web app bore no relationship to headings in the WPF application. I established a six-step type scale — display, heading, body, body-small, caption, data-label — that maps cleanly to platform-specific font stacks without the relationships between sizes ever changing. The scale is the same system everywhere; only the rendered font differs.

Colour tokens and spacing primitives. Colour was built as a semantic layer — background, surface, border, text-primary, text-secondary, interactive, status — rather than a set of literal hex values. Semantic tokens are what let one decision resolve correctly into three rendering contexts. Spacing followed the same principle: a small set of primitives, applied consistently, rather than per-screen judgement calls. Foundation first is slower to show and far cheaper to live with.

Token resolution map One semantic token, surface, resolves to three platform-specific values: a CSS custom property on web, a StaticResource on WPF, and a theme constant on the embedded interface. The semantic layer is the single point of decision; the platform mappings sit beneath it. SEMANTIC LAYER — ONE DECISION surface the role, not the value — named once 7 semantic tokens total PLATFORM MAPPINGS — RESOLVED BENEATH WEB --surface #14151A CSS custom property WPF SurfaceBrush #14151A StaticResource EMBEDDED CLR_SURFACE #14151A theme constant
Fig. 3 How one token resolves — surface is decided once in the semantic layer, then mapped to a platform-native value for each of the three runtimes. No screen references a hex value directly; a theme change is one edit at the top.
Hamilton design system — dark theme dashboard at maximum data density
Fig. 4 The dashboard in dark theme at maximum data density — the view that anchored the entire type-and-colour token system.
Hamilton design system — form patterns in light theme
Fig. 5 Form patterns in light theme — contrast verified on every component, because WCAG AA could not be a dark-theme-only achievement.

The system in production — across themes and platforms.

A token foundation is a hypothesis until the screens test it. Sixty-plus of them, across three runtimes, are the test — and the test is not whether each screen looks right in isolation. It is whether the same component, built from the same tokens, resolves correctly into environments that share almost none of the same capabilities. A system that needs a human to reconcile those differences screen by screen was never a system. This section is the foundation proving it holds.

Hamilton system — light theme at full parity with dark
Fig. 6 Light theme at parity — every component verified for contrast, so the two themes are one system, not a primary and an afterthought.
Hamilton system — web-side form rendering
Fig. 7a The language on the web side.
Hamilton system — lab-embedded interface rendering
Fig. 7b The same language on the lab-embedded side.

What the web and embedded surfaces have in common is the easy half of the proof. The harder half is WPF — the desktop runtime where the same token set has to survive a rendering engine with its own ideas about type, spacing, and state. If the system holds there, it holds everywhere.

Hamilton system — WPF desktop application view
Fig. 8 The WPF desktop and status-system views — the rendering context that forced the hardest token decisions.
Hamilton system — instrument status and run-monitoring surface
Fig. 9 An instrument run-monitoring surface — data density and status legibility under the same governed token set.

The sprint process — and what changed because of it.

The sprint-review cadence with Hamilton stakeholders and RKS engineering was structured to prevent the most common design-system failure mode: building something theoretically coherent that engineers cannot actually implement without constant interpretation.

Every sprint review ran against a pre-agreed checklist. Does this component translate cleanly to WPF? Are the touch targets documentable without custom engineering? Does the token set cover this state, or is the state asking for an exception? A component did not pass review because it looked finished — it passed because it could be built, in every context, from the documentation alone.

That cadence is why the handoff held. A design system is only as real as the implementation it produces, and the checklist kept the gap between the designed system and the buildable system from ever opening.

One component across four states A single instrument run-status component shown in four states — empty, loading, error, and ready. The empty, loading, and error states are specified in the design system alongside the populated one, each with its own layout, copy, and recovery path, rather than left for implementation to invent. INSTRUMENT RUN-STATUS ROW — ONE COMPONENT, FOUR STATES EMPTY ANALYZER · BAY 04 No run scheduled Queue one to begin Designed to read “nothing yet”, not broken. LOADING ANALYZER · BAY 04 Skeleton holds the layout — no content jump. ERROR ANALYZER · BAY 04 Sensor fault Calibration lost Retry View log Names the fault and offers the recovery. READY ANALYZER · BAY 04 Running Temp 21.4 °C Cycle 18 / 24 The populated state — the one a deck shows.
Fig. 10 The same run-status component across its four states. Empty, loading, and error are specified in the system alongside the populated state — each with its own layout, copy, and recovery path, not left for implementation to invent.
Hamilton system — cross-platform component states
Fig. 11 The same component resolved across contexts — every variant a token swap, not a redrawn screen.

Designing for a context I’d never designed in before.

WPF is a fundamentally different rendering environment than the web. Gradients, shadows, and a number of CSS-equivalent visual effects that are trivial in a browser require significant engineering overhead in WPF.

I learned this the hard way on the first sprint. A card component I had designed with a subtle box shadow looked right and would have created meaningful, recurring engineering friction to implement on WPF — friction that would have been paid on every card, on every screen, for the life of the system. The recalibration was to design with the most-constrained rendering context in mind from the start, not the most-capable one. A system that is easy on web and expensive on WPF is not one system; it is a web system the WPF team is forced to approximate.

That is the lesson I carry forward: in a cross-platform system, the constrained environment sets the rules. Design to it first and the capable environments get the result for free. Design to the capable one first and the constrained environment pays for it indefinitely.

Hamilton system — component recalibrated for cross-platform rendering
Fig. 12 A component recalibrated for the constrained rendering context — designed so WPF, web, and embedded all get the same result without per-platform cost.

One design language, three rendering contexts.

The 60-plus screen handoff was reviewed, approved, and moved into engineering across multiple sprint cycles. The design system shipped as a coherent whole — one visual language governing every interface in Hamilton’s ecosystem, with documentation thorough enough that engineering could implement without design consultation on individual component decisions.

The number I am most confident in is not the screen count. It is the exception count: zero platform-specific exceptions in the token architecture. One semantic token layer, with platform mappings beneath it, governing web, WPF, and embedded alike. A design system earns its value in the cross-context decisions — the ones that hold when the implementation environment won’t — not in the polished specimens. The tokens do more work than any screenshot on this page can show.

Hamilton system — the unified ecosystem across all three rendering contexts
Fig. 13 The system as a whole — one design language, resolved across the three contexts Hamilton’s instruments live in.
What it changed

Sixty-plus screens shipped to engineering on one token layer with zero platform-specific exceptions — and I now design every system to the most-constrained runtime first, because the environment that can do least is the one that sets what the system can promise.