Payoneer Design System & DesignOps, Alisa Tzur
Alisa Tzur
Payoneer · Design system & DesignOps · 2024, present

From a library of screens to a decision system.

Rebuilding a mature fintech’s legacy UI library into a governed design system: clearer foundations, fewer and better components, and an operating model that lets design and engineering build the same thing.

Role
Design System Lead & DesignOps
Team
3, with the front-end guild as partners
Duration
6 months to first release, ongoing
Scope
Strategy, audit, foundations, components, governance, adoption
New Payoneer components around a redesigned dashboard
Challenge

A library that captured years of UI but couldn’t tell you what was standard, current, accessible, responsive or built in code.

Approach

Treat the system as a product: audit the real material, separate rules from examples, rebuild foundations and masters, and put governance around it.

Outcome

One shared language, fewer ambiguous choices, design and code that agree, and a system ready for navigation modernisation and new products.

01 · Why it had to change

The system behaved like an archive of possible UI, not a source of truth.

Payoneer runs high-stakes financial workflows across a mature ecosystem. Over the years the interface had collected legacy patterns, newer navigation models, local fixes and product-specific exceptions. As teams began modernising navigation, cards, account actions and verification flows, a system built on big visual boards and individual interpretation made reuse slow, and every new area likely to add another one-off.

{{ c.n }}

{{ c.title }}

{{ c.body }}

Where we started

The original files held a great deal of useful work. The issue wasn’t a lack of examples, it was that examples had accumulated as boards of states, content combinations and screen-specific solutions, so designers had to interpret the system before they could use it.

Legacy card specimens
Cards, one pattern documented as twelve specimens: three backgrounds × cashback tag × action row, with no rule for which to use when.
Legacy input fields and dropdown lists
Inputs and dropdowns, states shown as permutations against helper-text length; list variants side by side without the anatomy that connects them.
Legacy date picker specimens
Date pickers, field states and four calendar layouts on one board, each drawn as a finished screen rather than a composable component.
Legacy checkbox, radio and alternative radio controls
Controls, checkboxes, radios and an “alternative radio” with no shared selection model between them.
Legacy button and selection button states
Buttons, visual states covered, but nothing on action hierarchy, loading, width or responsive rules.
02 · Audit

Finding the reusable system hidden inside the examples.

I didn’t need another inventory of screens. I reviewed repeated UI families side by side, traced how they appeared in live product flows, and separated stable behaviour from content variation and product exceptions. Four questions did most of the work:

{{ s.q }}

{{ s.a }}

What it showed: visual examples were doing the job of documentation; state and content variation were mixed into the same matrices; and screen-specific solutions hid where reuse was possible. The library stored outcomes more clearly than it stored rules.

In product context

Component ambiguity surfaced as workflow complexity. Freezing a linked card meant a large management modal, an overflow menu, a destructive confirmation, then back to the list with updated status, four steps, four separate interpretations of hierarchy, overlays and feedback.

{{ f.title }}
{{ f.n }} · {{ f.title }}. {{ f.cap }}
03 · Principles

Decide how the system makes decisions before deciding how it looks.

{{ p.title }}

{{ p.body }}

Decision framework

Every request runs the same four gates.

So the system stops collecting exceptions, and design and engineering share one basis for yes, no, or not yet.

{{ f.n }} {{ f.title }}

{{ f.body }}

04 · Foundations & tokens

Separate foundational decisions from the components that consume them.

In the old boards, values lived inside component pages, so global change was hard and local overrides were easy. The new foundation connects primitives → semantic tokens → component tokens → themes, for colour, type, spacing, layout, responsive behaviour, icons and illustration. Components inherit changes instead of being rebuilt one by one.

Video 1:03
Core variables walkthrough · 1:03, how values became a semantic architecture.
Blue primitive scale
Primitives, every step of a scale gets one name; “which blue?” stops being a question.
Named gradient tokens
Gradients as named tokens with a documented use, not a free-for-all.

From primitives to meaning

Semantic tokens map primitives to roles, text, surface, border, and component tokens map those roles onto inputs, buttons, alerts, chips, controls and tables. A designer picks Text / Secondary, not Gray/600; when the scale shifts, every component follows.

Semantic colour tokens: text, surface, borders
Semantic layer, text, surface and border roles resolved to primitives.
Component colour tokens: inputs, buttons, alerts
Component layer, inputs, buttons and alerts, including LTR/RTL gradient buttons.
Component colour tokens: chips, controls, table
Component layer, chips, controls and toggles, table rows and dividers.

Layout grid

The legacy library had no shared grid, so every domain set its own page width, margins and column rhythm, one of the reasons hybrid screens looked so obviously stitched together. The new system defines one 12-column grid with a 1600px maximum content container, two page shells (with and without the sidebar), and six breakpoints from desktop XL to mobile XS. Columns stay at twelve everywhere; only margins and gutters step down. The same values are implemented in Storybook, so a designer’s 60px margin is the developer’s 60px margin.

Grid applied to two page shells: full-screen modal without sidebar, and platform layout with top navigation and sidebar
Two page shells. Full-screen flows without a sidebar and platform pages with top navigation, page navigation and sidebar. The content grid is the same in both; only what surrounds it changes.
Main grid measurements table: six breakpoints with columns, column width, margin and gutter
Main grid measurements. Twelve auto-width columns at every breakpoint; margins step 60 → 40 → 24 → 16px and gutters 24 → 16px. The same values are implemented in Storybook.
Grid examples across desktop XL, desktop L, tablet M, mobile S and mobile XS
The grid at each breakpoint. Desktop XL and L with sidebar, tablet M and the two mobile sizes with the collapsed shell, each drawn on the real platform frame.
05 · Components & patterns

Fewer choices, each one better.

Exhaustive matrices had let component APIs grow around page-specific needs. Master components replaced them: a stable anatomy, a deliberate property set and clear extension points, so product teams cover real cases without detaching instances or spinning up a local component per screen. Every master ships state-complete, hover, focus, loading, error, disabled, RTL, named to match code.

{{ b.title }}
{{ b.cap }}

Building a master, step by step

Two recordings from the Figma file show how a master is structured, anatomy, properties, slots and states, so the library is legible to whoever opens it next.

Video 1:23
Input master · 1:23. Text, search, password, phone, verification code, country, currency, select, autocomplete, FX and transactional inputs, one field architecture, type-specific behaviour kept explicit.
Video 1:11
Side panel · 1:11. A stable shell with content slots, forms, tabs, notices, actions, while the system protects hierarchy, spacing, close behaviour and responsive limits. Composition instead of a variant matrix.
06 · Governance & adoption

A system needs a lifecycle, not only a library.

The old artifacts never said whether a component was proposed, approved, implemented, legacy or deprecated, so teams copied, modified locally, and created another source of truth. Now every component has an owner, a status and a route for change, and the system runs on a backlog, grooming and planning like any product.

{{ g.n }}
{{ g.title }}

{{ g.body }}

Adoption: let the friction make the case

Designers adopted first, the system shipped as Figma libraries, so shared tokens and components entered their daily work with no extra step. Product teams were harder. Engineers kept receiving designs built from components that didn’t exist yet in their codebase, and the gap between design and code became visible in every sprint.

We didn’t smooth that friction over; we used it. Each mismatch was evidence that features would ship faster once the system was in the team’s stack, and, one by one, teams came to the same conclusion. Rollout was then prioritised around high-frequency components and live initiatives, with workshops, office hours, pairing and migration maps behind it.

From a dedicated build team to a contribution model

For the first phase, a dedicated infra team built the system in code. It gave us control and consistency while the foundations and the bulk of the library were being established. Once the library reached roughly 95% component readiness, the bottleneck moved: teams were now waiting on one small group for every new component or variant they needed.

So we changed the operating model. Product teams began contributing directly, more hands, shorter waits, and components built by the people who needed them. Governance did not move with it: the design system team still defines, reviews and approves every component, so nothing enters the system unsupervised. The contribution flow is written into our ways-of-working documentation and is the reference in every conversation with product teams.

{{ c.n }}
{{ c.title }}

{{ c.body }}

Old process: design system team works only with the DS tech lead and infra team
Before. Every step ran between the design system team and one dedicated infra team, feasibility, breakdown, grooming and QA all in one queue.
New process: contribution model with dev champions in each product team
After. The same four steps, but grooming, build and QA move to a dev champion and engineer inside the contributing team, with the design system team approving at each gate.
Video 5:11
System overview · 5:11, structure, foundations, navigation, responsive models and components, self-explanatory enough to work from without tribal knowledge.
07 · Outcomes & reflection

Measure clarity, adoption, quality and delivery, not the size of the library.

{{ o.title }}

{{ o.body }}

The screenshots suggested a component cleanup. The real redesign was organisational: how decisions were stored, communicated, implemented and maintained. The leadership job was to keep the valuable legacy knowledge while removing the accidental complexity, prioritisation, cross-functional agreement, migration planning, and an operating model that keeps the system healthy after release.

← All work Next: Platform migration & contribution model →
{{ lightboxCap }}

{{ lightboxCap }}