Designing a Design System

Designing a Design System

Employer

acquired by JP Morgan Chase

Aumni is a portfolio intelligence platform for venture capitalists, designed to manage investments, analyze trends, and benchmark private market performance.

Role

Strategy, Product Management, Research and Design

Team Members

Lead Frontend Architect

Frontend Developers

Engineering Manager

Subject Matter Experts

Duration

Dec 2023 - April 2024

Challenge

With no dedicated designer on the frontend base squad, the design system design needs were often deprioritized, leading to growing tech debt. Misalignment between design and engineering, unmet accessibility standards, and overly specific or outdated components made it difficult to scale and caused inconsistent user experiences.

Solution

A revamped design system, now called ARC (Aumni Reusable Components), introduces an improved foundational layer of clearer contribution guidelines, shared language between design and engineering, and flexible, reusable components to better support both current and future product needs.

Outcomes

🌈

Implemented color accessibility standards

Implemented color accessibility standards

80%

80%

decreased on component detachments

decreased on component detachments

🧩

Designers & Developers reported stronger understanding of component usage and contribution process

Designers & Developers reported stronger understanding of component usage and contribution process

Read Case Study

Background

In early 2020, I took on the challenge of designing and implementing Aumni’s first design system. Working closely with a few frontend developers, we laid the foundational layer by designing and building components, defining processes, and striving to bring consistency to a fast-moving organization. As the primary design point of contact, I balanced maintaining the design system while contributing across multiple product squads, though competing priorities often meant the design system needs took a back seat.


When Aumni was acquired by JP Morgan on 2023, it marked a pivotal moment. I shifted my focus on the frontend squad, partnering more closely with engineering to redesign our design system. I tackled longstanding design system challenges, took on product management responsibilities, and helped build the system for the future as the company entered a new phase of rapid growth.

A Time for Reflection

With the frontend base team, I led a brainstorming session to evaluate our current design system. The session focused on identifying what was working well, areas for improvement, and knowledge sharing, highlighting both developers and designers experiences.


As a result of this session, we identified three key problem statements and began ideating potential solutions, sparking meaningful discussions and setting the stage for actionable next steps.

Problem Statement #1

The lack of a fully developed and established philosophical and foundational layer in the design system impacts its potential for success and long-term viability.

Problem Statement #2

Unclear processes and governance leads to unregulated and unusable contributions to the design system.

Problem Statement #3

The lack of documentation leads to uncertainty regarding the usage or existence of the various layers (foundations, token, core system and components) that make up a design system.

To see a closeup, check out my FigJam

Audit & Preparation

During a tech debt sprint, another lead designer and I led a team of designers to audit and document each component, ensuring alignment between what was available in design and what existed in Storybook and code. We found that most components lacked comprehensive documentation, meaning documentation was detailed but catered exclusively to either designers or engineers, with few components offering clear guidance for both.


Additionally, as new variants and components were added over time by both designers and developers, a disconnect emerged regarding which components were the most up-to-date. This misalignment led to confusion about which components to use and the reasoning behind those choices.

A Designer’s Pulse Survey

I drafted and distributed a pulse survey to product designers to evaluate the strengths and weaknesses of the design system, which provided valuable insights to identify and prioritize areas for improvement. The survey revealed several key areas of concern:

75%

of designers reported detaching components because they felt constrained by existing ones that didn’t meet their needs.

50%

expressed uncertainty about the contribution process, highlighting a lack of clarity in how to contribute to the design system.

50%

indicated a need for better documentation to understand when to use which component and/or property and why.

These insights highlighted the critical need to address these pain points to improve the usability and effectiveness of the design system from a designer’s perspective. It also reinforced the problem statements developed during the brainstorming session, providing additional clarity and focus for prioritization.

Guiding Design System Principles

After many rounds of brainstorming with the lead frontend architect and reviews with the design team and frontend base team, we established a set of principles. These principles help guide designers, developers, and everyone else in the organization to make decisions with shared purpose, clarity, and consistency.

Accessibility

ARC ensures that our interfaces are human and accessible to a broad audience. We strive to enable all individuals with diverse needs and circumstances to use our product.

Collaboration

ARC fosters collaboration through a shared language and shared patterns, which streamline workflows through delivery for both designers and developers.

Simplicity

ARC provides clarity by reducing complexity in the product development process and user experience.

Refactoring the Color System

The original color system worked for a smaller team and product, but as needs grew, its rigid structure, unclear naming, and lack of accessibility became limiting. Designers and developers began adding ad hoc colors, resulting in a bloated and inconsistent system. I partnered with another designer focused on accessibility to lead a color revamp. Through a design team color workshop and stakeholder reviews, we created a flexible, accessible system with clear naming and token-based structure, leveraging Figma’s new token feature.

Primitive Colors

red900

red900

#491212

#491212

15.23:1

15.23:1

red800

red800

#591818

#591818

13.07:1

13.07:1

red700

red700

#741B1B

#741B1B

10.96:1

10.96:1

red600

red600

#932525

#932525

8.29:1

8.29:1

red500

red500

#B13535

#B13535

6.12:1

6.12:1

red400

red400

#C94D4D

#C94D4D

4.51:1

4.51:1

red300

red300

#DE7C7C

#DE7C7C

6.39:1

6.39:1

red200

red200

#EAA4A4

#EAA4A4

9.08:1

9.08:1

red100

red100

#F8C9C9

#F8C9C9

12.46:1

12.46:1

red50

red50

#FEF1F1

#FEF1F1

16.75:1

16.75:1

orange900

orange900

#3C1E02

#3C1E02

15.23:1

15.23:1

orange800

orange800

#592D03

#592D03

11.65:1

11.65:1

orange700

orange700

#8C4503

#8C4503

7.07:1

7.07:1

orange600

orange600

#B35B09

#B35B09

4.75:1

4.75:1

orange500

orange500

#CB6A10

#CB6A10

3.74:1

3.74:1

orange400

orange400

#DD7C22

#DD7C22

3.00:1

3.00:1

orange300

orange300

#F19B4B

#F19B4B

9.53:1

9.53:1

orange200

orange200

#F9BB80

#F9BB80

12.44:1

12.44:1

orange100

orange100

#FBE0C5

#FBE0C5

16.75:1

16.75:1

orange50

orange50

#FDF2E7

#FDF2E7

19.03:1

19.03:1

yellow900

yellow900

#3B2B07

#3B2B07

13.68:1

13.68:1

yellow800

yellow800

#503B0C

#503B0C

10.64:1

10.64:1

yellow700

yellow700

#77580D

#77580D

6.59:1

6.59:1

yellow600

yellow600

#966D0D

#966D0D

4.67:1

4.67:1

yellow500

yellow500

#BB8811

#BB8811

3.16:1

3.16:1

yellow400

yellow400

#E0A215

#E0A215

8.21:1

8.21:1

yellow300

yellow300

#F0BE4C

#F0BE4C

10.69:1

10.69:1

yellow200

yellow200

#F5D489

#F5D489

12.88:1

12.88:1

yellow100

yellow100

#FCECC5

#FCECC5

15.76:1

15.76:1

yellow50

yellow50

#FDF7E8

#FDF7E8

17.26:1

17.26:1

green900

green900

#0D3021

#0D3021

14.36:1

14.36:1

green800

green800

#0E442C

#0E442C

11.15:1

11.15:1

green700

green700

#156040

#156040

7.55:1

7.55:1

green600

green600

#1A7A50

#1A7A50

5.32:1

5.32:1

green500

green500

#1D905E

#1D905E

4.03:1

4.03:1

green400

green400

#27A56E

#27A56E

3.13:1

3.13:1

green300

green300

#38BC83

#38BC83

8.22:1

8.22:1

green200

green200

#76D6AC

#76D6AC

11.25:1

11.25:1

green100

green100

#BFEDD9

#BFEDD9

14.34:1

14.34:1

green50

green50

#EDFCF6

#EDFCF6

17.44:1

17.44:1

teal900

teal900

#082F30

#082F30

14.38:1

14.38:1

teal800

teal800

#0E4749

#0E4749

10.41:1

10.41:1

teal700

teal700

#106265

#106265

7.10:1

7.10:1

teal600

teal600

#0D797D

#0D797D

5.18:1

5.18:1

teal500

teal500

#108F93

#108F93

3.90:1

3.90:1

teal400

teal400

#13A5AA

#13A5AA

3.00:1

3.00:1

teal300

teal300

#30BBC0

#30BBC0

8.22:1

8.22:1

teal200

teal200

#73D0D3

#73D0D3

10.53:1

10.53:1

teal100

teal100

#AEE8EA

#AEE8EA

13.82:1

13.82:1

teal50

teal50

#E0F9FA

#E0F9FA

16.78:1

16.78:1

blue900

blue900

#0A2547

#0A2547

15.34:1

15.34:1

blue800

blue800

#0D3263

#0D3263

12.70:1

12.70:1

blue700

blue700

#144990

#144990

8.80:1

8.80:1

blue600

blue600

#1961BE

#1961BE

6.00:1

6.00:1

blue500

blue500

#2073DF

#2073DF

4.58:1

4.58:1

blue400

blue400

#5095EE

#5095EE

3.05:1

3.05:1

blue300

blue300

#7EB0F1

#7EB0F1

8.23:1

8.23:1

blue200

blue200

#A0C6F8

#A0C6F8

10.47:1

10.47:1

blue100

blue100

#C7DDF9

#C7DDF9

13.30:1

13.30:1

blue50

blue50

#ECF4FD

#ECF4FD

16.19:1

16.19:1

magenta900

magenta900

#38203C

#38203C

14.58:1

14.58:1

magenta800

magenta800

#4C2A51

#4C2A51

11.95:1

11.95:1

magenta700

magenta700

#6C3974

#6C3974

8.48:1

8.48:1

magenta600

magenta600

#864D8F

#864D8F

6.04:1

6.04:1

magenta500

magenta500

#9A5CA3

#9A5CA3

4.73:1

4.73:1

magenta400

magenta400

#B277BB

#B277BB

3.36:1

3.36:1

magenta300

magenta300

#C292C9

#C292C9

8.24:1

8.24:1

magenta200

magenta200

#D0AED5

#D0AED5

10.69:1

10.69:1

magenta100

magenta100

#E4CFE7

#E4CFE7

14.37:1

14.37:1

magenta50

magenta50

#F4EAF5

#F4EAF5

17.93:1

17.93:1

purple900

purple900

#201448

#201448

16.73:1

16.73:1

purple800

purple800

#2E1C69

#2E1C69

14.12:1

14.12:1

purple700

purple700

#422C8C

#422C8C

10.65:1

10.65:1

purple600

purple600

#5538B2

#5538B2

8.09:1

8.09:1

purple500

purple500

#6E50CE

#6E50CE

5.67:1

5.67:1

purple400

purple400

#8B72DA

#8B72DA

3.80:1

3.80:1

purple300

purple300

#A48FE5

#A48FE5

6.71:1

6.71:1

purple200

purple200

#BCADEB

#BCADEB

9.06:1

9.06:1

purple100

purple100

#D7CEF2

#D7CEF2

12.30:1

12.30:1

purple50

purple50

#EEEBFA

#EEEBFA

15.72:1

15.72:1

grey950

grey950

#121417

#121417

18.45:1

18.45:1

grey900

grey900

#25282C

#25282C

14.80:1

14.80:1

grey800

grey800

#373C43

#373C43

11.11:1

11.11:1

grey700

grey700

#515967

#515967

7.05:1

7.05:1

grey600

grey600

#6C7689

#6C7689

4.57:1

4.57:1

grey500

grey500

#8791A1

#8791A1

3.18:1

3.18:1

grey400

grey400

#CBCFD8

#CBCFD8

11.21:1

11.21:1

grey300

grey300

#E1E4EA

#E1E4EA

14.48:1

14.48:1

grey200

grey200

#F0F2F5

#F0F2F5

16.45:1

16.45:1

grey100

grey100

#F6F7F9

#F6F7F9

17.21:1

17.21:1

grey50

grey50

#FCFCFD

#FCFCFD

17.99:1

17.99:1

grey0

grey0

#FFFFFF

#FFFFFF

18.45:1

18.45:1

Designed a color system with intuitive naming conventions and accessible contrast ratios

Color Roles

Text Palette

Primary

Grey 950

Secondary

Grey 800

Tertiary

Grey 600

Primary

Grey 0

Secondary

Grey 400

Tertiary

Grey 500

Inverted Text Palette

Light

Grey 50

Dark

Grey 900

Background UI

Default

Blue 400

Weakest

Blue 50

Informational

Default

Red 400

Weakest

Red 50

Urgent

Default

Green 400

Weakest

Green 50

Success

Warning

Default

Orange 400

Weakest

Orange 50

A high-level view of some assigned color roles for a token-based foundation

Key Functionalities

Using Design Tokens

When Figma introduced its variables feature, we transitioned from styles to design tokens. This shift helped align our design system more closely with our code and Storybook implementation, while providing better clarity around color and spacing usage across the app. This allows us to track and update any color or spacing easily. We designed the tokens to represent fundamental decisions with predictable and clear intended usage. Here's how we structured our naming conventions:


Type: color, size, spacing

Category: background, font-size, radius, border

Instance: warning, error, success

Emphasis: strongest, stronger, strong, default, weak, weaker, weakest

Variant: primary, secondary, tertiary

State: resting, focus, hover, selected, disabled, in-range (for inputs), pressing/active

Establishing a System of Governance

While about half of designers and developers understood the design system's contribution process, this level of clarity wasn't good enough. We aimed for the process to be crystal clear and truly collaborative. After all, the design system isn’t controlled solely by the frontend base squad, it is a system that is continuously evolving through contributions from the entire team. Below is a high level overview of the four stage process of contributing to the ARC Design System.

1

2

3

4

1

Proposal

Proposals help the Design System team understand what product squads want to achieve. Before submitting a proposal, consider:


Does something similar already exist?

If so, does it fulfill the needed requirements?


If existing components meet your needs, use those. Otherwise, fill out and submit an ARC Contribution Ticket with details about your problem, proposed solution, and any relevant references. The frontend base squad reviews proposals for completeness and basic requirements.

2

Draft & Consideration

Once a champion is assigned, the proposer and champion work together to create a detailed specification that outlines the problem and solution. For component proposals, this includes but not limited to defining the API, required attributes, visual design (rough mockups are acceptable), and component states. The proposal can only advance when there is clear agreement on how it will be implemented in both code and design.

3

Implementation & Review

The proposal is built in code and Figma, with tests, documentation, and proof of concept implementations. Working group members review these POCs to validate functionality and edge cases. The implementation must meet all requirements for accessibility, responsiveness, themes, and browser support.


A rollout plan is created at this stage, including any needed deprecation plans for existing components.

4

Release

Once all requirements are met with no issues, the proposal is considered complete, released, and ready for widespread use within the design system. Any future changes would require a new proposal.

Refactoring Components for More Flexibility

Following a component library audit, we partnered with the frontend base team to quickly refactor easy fixes through pairing sessions. Feedback from the pulse survey and Figma analytics showed designers often detached components due to limited flexibility. To address this, I introduced slot components, an approach from Figma Config 2023, that allowed flexible content changes within components while maintaining structural integrity. This was especially effective for components with evolving or uncertain variations.

Reflection

Although I decided to leave Aumni/JPM before the full implementation of the ARC design system, early rollouts showed strong adoption and traction. Feedback from designers and developers confirmed the system’s value, not only in improving product consistency, but also in enhancing team efficiency, cross-functional alignment, and scalability.

Want to work together? Let’s chat!

Want to work together? Let’s chat!

Want to work together? Let’s chat!

Want to work together? Let’s chat!