Everbridge · xMatters · 2020 – 2022

xMatters Design System

A design system nobody asked for.

When I joined, the team had no curated, central pattern library. Nobody was going to prioritize building one — there were features to ship. So I started it on the side, and shipped enough of it, often enough, that it became a funded project with management behind it.

Information architecture diagram for the design system. On the left, fonts, defined colors and icons feed into text styles, layer styles and icon symbols. Those feed a basic component, which builds into a compound component, then patterns, then templates. Spanning the whole diagram above are five bands: accessibility guidelines across everything, brand guidelines and content strategy, spacing rules, and usage rules.
The row along the bottom is a component library. The five bands across the top are what make it a system.

At a glance

Role
Founded and led the design system — architecture, tokens, governance, adoption
Team
UX, front-end engineering, product communications
Started as
A side project, unprioritized and unfunded
Ended as
A high-priority project with stakeholder and management buy-in

Context

A design system is a framework and a rulebook. It facilitates design and it guides design, and if it is any good it lets a team collaborate, work more efficiently, and ship faster without the interface drifting apart behind them.

xMatters did not have one. Components existed, but they were distributed and disconnected, so design was inefficient, error-prone and impossible to scale.

Problem

I framed it as three debts, because three debts get budget and “inconsistent UI” does not.

  • Design debt. Production was slow and mistakes were easy. Components lived in different files with no relationship to each other, so work was inconsistent and nothing was reusable. Without modularity, files did not scale.
  • Technical debt. The same components and styles were being built twice and used twice, in code.
  • Product inconsistency. Designs differed between features, and implementation differed from design. Both gaps were widening.

Getting permission

Nobody was going to fund this at the start, so the strategy was to make it undeniable rather than to ask for it. I delivered automated components continuously — small, useful, immediately time-saving — and I promoted every one of them, constantly.

I pitched it wherever there was an audience: design reviews, lunch and learns, hackathons, quarterly retros — to the UX team, the engineering team, and the product communications team. Each audience got the version of the argument that was about them.

Internally: efficiency, because the team could think bigger, iterate faster and spend less time in QA. Quality, because a consistent interface is a more usable and more accessible one. Scale, because a system is what keeps design entropy at bay as a product grows. Unity, because it gives designers and engineers one thing to point at.

Externally: consistency and usability, since familiarity is most of what makes an interface easy. Brand cohesion and trust, since a common visual language across the product supports conversion and loyalty. And accessibility, since building it into the components is the only version of accessibility that survives growth.

It worked. The design system was eventually recognized as a high-priority project with real stakeholder and management support. The part I did not anticipate was cultural: designers and engineers started collaborating differently because they finally had shared objects to argue about.

What I actually built

A design system is more than a component library. This one had a component library — design components, development components, design tokens — a pattern library of content structures, layouts and templates, and style guides for brand, UX and content.

Scalability against ease of use

Two artifacts, doing opposite jobs. A shared library containing only symbols and styles — lean by design, and leaning hard on style overrides to cut the number of symbols dramatically. Then a design toolkit: a sticker sheet, worked examples of the override options, UI patterns and page templates, with usage notes, spacing rules and content guidelines.

The library is what you design with. The toolkit is what you learn from. Collapsing them into one thing is how design systems become either unusable or unmaintainable.

Consistency against flexibility

A master library defined every color, font, layer style and basic component. Sub libraries handled specialized problems — a unique feature, a platform-specific solution — and every one of them linked back to the master.

Diagram of the library structure. A master library sits at the center defining colors, fonts, layer styles and basic components. Several sub libraries branch off it for specialized and platform-specific work, each linked back to the master.
Specialized work gets somewhere to go that is not “detach from the symbol.”

Tokens, and who gets to decide

Design tokens are usually treated as color and type. Ours also covered line height, spacing, border style, opacity, radius, box shadow and media queries.

Graduating a decision from a component into a token is a one-way door — once it is a token, everybody’s work depends on it. So I did that deliberately and slowly, invited the whole team to propose tokens, and kept the roles of curator and gatekeeper myself. I also engaged the front-end developers from the very beginning, so that naming and token architecture stayed in sync between design and code rather than being reconciled later.

Governance

A design system without a governance process is a snapshot. I built a two-phase process for contribution and change, which is what the system needs the moment somebody wants to add to it, or a component gets them ninety percent of the way and not the last ten, or a new person joins, or two teams need the same thing.

Two-phase governance diagram. Phase one runs left to right: use the system, request a change, make the change, review and approval, update the system — with a bug-fix path that skips review, and a loop back to use. Phase two runs right to left underneath: update live components, test components, sign off, documentation and pre-release, new version released, and back into use. A colored band on each box shows which disciplines own that step, drawn from a legend of UX, Dev, QA and ProdComm.
Written down, the process is dull; not written down, it is whoever asks loudest. The band across the top of each box is the part that mattered — of the ten steps, only three are UX alone, and four have no designer in them at all.

Adoption

Sparkbox has surveyed design systems every year since 2018, and adoption is reliably in the top three reasons companies fail at them. Building it is not the hard part.

  • The whole UX team, continuously. Everyone included, with constant sync-ups, so nobody had a version of the system in their head that had stopped being true.
  • The engineering community, directly. Engaged them and demoed to them, rather than handing off and hoping.
  • Toolkit and templates. The single biggest success. It flattened the learning curve to the point where using the system was easier than not using it.
  • Early access and a soft roll-out. I released the proof-of-concept library early so the team could form new habits before the official launch, instead of being asked to change how they worked on a launch date.

Tradeoffs I made

Started it as a side project instead of fighting for a budget.

It meant carrying the work on top of a full product load, and it meant the system had no formal owner for the period when it was becoming load-bearing.

What I gave up: resourcing, and a certain amount of my own time. What I got: a working system to argue from. Asking for budget for a design system in the abstract loses. Asking for budget for a design system the team is already using wins.

Kept myself as the token gatekeeper.

A single point of approval is a bottleneck, and it makes contribution feel like asking permission.

What I gave up: throughput, and some goodwill. What I got: a token set that stayed small enough to hold in your head. Tokens are the hardest part of a system to take back once released.

What I’d change

Everything I built was still running on my personal capacity when I left. The three things I had queued up were all attempts to fix that: templates to design from and workshops to teach with, so adoption did not depend on me being available; design reviews that actually examined adoption, and a framework to reinforce best practice, so leadership carried some of it; and — the one that mattered most — moving the design system onto the main Jira board so product management could see it, and getting the work accounted for in planning.

I had made the same call at Brighterion a couple of years earlier, building that design system in parallel with the platform it served. Both systems worked. Both of them were structurally dependent on one person choosing to absorb them, which is not a design system strategy — it is a design system with a single point of failure.