Select Page

Creating a Scalable Design System

Creating a scalable design system

Problem Statement

We have a robust design system, but how can we mature it so that we can scale it up, to both be usable by more designers on our core product (by creating usable tools), as well as themeable so we can promote it for use for all internal corporate applications.

Introduction

This project started with a conversation between myself and an accessibility lead. The idea was that our framework has robust accessibility built in, and with new regulations of making products for employees more strict than for customers, the company was facing a high risk by not ensuring all employee facing products are accessible. Combined with the fact that React is a code base that is already themable, we can open our code base to internal company applications to use in creating their products.

NOTE: Right clicking on an image below and selecting “open image in new tab” will bypass opening the image in the lightbox and allow zooming into full detail.

Project Details

Client Wells Fargo Commercial
Timeline 2 Years (ongoing)
Contribution Key Instigator / Lead UX Designer

Phase 1: Identifying the current roadblocks to being scalable

Current Blockers

The first step was identifying the major road blocks for being scalable. With the help of product, I was able to narrow it down to these:

  • The current design system and pattern library was not built to be used by any application other than our one main application
  • Theming our application had to be done at the component level as global variables did not exist
  • Product designers were did not understand how to use components, and were creating new specs for framework components confusing developers
  • Product designers were creating their own base files/toolkits which were inaccurate

Steps to resolve

With the steps identified, it was not clearer what the next steps we needed to take to create a scalable design system

  • Identify nested components in order to reduce redundant specifications and design debt
  • Identify global tokens across the design system and framework based on atomic design
  • Identify and expose tokens at the component level that we would allow to be changed
  • Create a themeable design kit for designers
Existing component structure

Phase 2: Making it Scalable

Identifying atomic design to nested components

The first step of making sure our framework is scalable is knowing how both the design system and components relate to one another. This is important for finding values that should be controlled globally. It will also allow us to bring our toolkit in parallel with the code, so that when we change the value on one component, it will cascade down into the other components that are made up of atoms.

Nested styles

Nested styles in our framework

Storybook code POC

Unthemed

Proof of concept: Storybook (code)

I asked a developer resource to create a quick POC so that I would be able to better show to design and business the base concept.

Rethemed

Nested styles

Speccing nested elements

Cleaning up our documentation

Part of the issue was with our documentation, past design effort did not think in atomic design, so whenever a nested component was used in another component, it was fully spec’d out. This lead to design debt and developers not sure if they should match the specs or the code. So I went through and any time a nested component was used, replaced the absolute values for that component with what component it is, what props it uses, and only calling out CSS when it was an override.

Phase 3: Identifying the global tokens

Audit of existing tokens

Tokens already existed on the back end, but they were always values that development identified on their own. There had never been any engagement with design in the past to align the values between development, design, with the brand in mind. I was about to change that.

I began by identifying tokens to create as global tokens. Also used a naming convention based on use rather than names based on color. And identified which tokens to deprecate, which to change the name of, and what to add net new.

Storybook code POC

Token documentation

Storybook code POC
Storybook code POC

Identifying our global color palette

We had a color palette that was about 10 years old. It had never been documented well, some colors fallen out of use, others introduced, nothing ever documented. The first step was going through and identifying what those values are as that translates to the global styles.

While this only shows colors, it was also done for font styles, border thickness, rounded corners, and drop shadows. Spacing would come later.

Implementation by design, development, and QA

Once the tokens are created, we need a way to make them work for design, development, and QA, who all have different needs. For this, as our specs are in confluence, the token part was created as a confluence excerpt to be included anywhere a token is spec’d out for developers. This is important because QA was running their process on post-build code and comparing to our specs, and thus getting hex values, not tokens.

Storybook code POC
Socializing tokens
Socializing tokens

Socializing the new system

So we’ve created a product. But what is this product? How are people supposed to use it? We’re a large company, and we have a product we want teams across the organization, including other parts of the bank that we may never interact with. So for this, we’ve created a couple of posters that can be shared digitally in different cross organization platforms.

Phase 4: Creating a design toolkit and aligning with tokens

Creating a design kit to be used by all design

There was no single source of truth for a toolkit. For a team of about 30 product designers, designs were usually started by picking up old sketch files, or from designers creating their own small libraries. This lead to a lot of inaccuracies which ended up with developers not knowing what to build, and QA being confused when the final build didn’t match the design.

Built from scratch, this design kit was built to match the code as much as possible, including built in spacing for components and nested components, as well as all the react props and methods as sketch symbol overrides.

This started as a side project by myself, and once I made the case of it’s value to the design heads, was allowed to bring on a contractor to help, and later another contractor was brought on to manage the maintenance of the kit

Sketch design kit
Sketch design kit

Symbols in Sketch File – Screen Templates

Sketch design kit

Symbols in Sketch File – Buttons Resize

Sketch design kit

Symbols in Sketch File – Tables with states

Sketch design kit

Symbols in Sketch File – Symbols

Theming in Sketch POC

Theme 1 in Sketch POC

Theming in Sketch POC
Theming in Sketch POC

Theme 2 in Sketch POC

Theming in Sketch POC

Proof of concept: Making the toolkit themable

This is a proof of concept we created for Sketch, to show that when the files are set up correctly, we can quickly and easily create new themes using our toolkit files. No need to spend days designing a new system from scratch, and then weeks creating new toolkits for every theme. By doing the advance work of setting up our files correctly, this work can be done quickly to create entirely new themes, or even a low fidelity prototyping kit.

Use cases emerge!

Before the project even launches, we already have 2 use cases for being able to quickly theme the toolkit.

  • A low fidelity toolkit for use with interaction and low fi wireframing
  • Design explorations for a company rebrand

This was made possible and easy because it was planned out and thought out, and care was taken to set up the design kit to make it scalable, just like our code base also now is.

Storybook code POC

Low Fidelity Toolkit – Themed

Storybook code POC

Tables themed for medium fidelity toolkit

Storybook code POC

An unthemed example wireframe from our core application

Storybook code POC

And rethemed!

Conclusion

The design kit it being widely adopted by our core design teams. The code is starting to gain traction and looks like it will be adopted by other teams. Design was a part of that process. Care was taken that the brand would properly represented no matter what the theme. The accessibility written into our code would come with the use of our framework. Our toolkit is also just as easily themed as our code is, and can be easily picked up to created themed versions by any teams that also adopt our framework.