Applying Product Thinking Principles to your Design System

Rate this content
Bookmark
Slides

You've planted the seeds of your design system. Maybe you've built out a few components and set up a basic Storybook. But where do you go from here?


It can be easy to let your inner perfectionist take over and try to cover every scenario and edge case, especially when referencing established design systems. However, a more effective approach is to treat your design system as a product that grows and evolves with your users. Ultimately, its value lies in the problems it solves and the needs it meets.


In this talk, I’ll explore how to apply product thinking principles to your design system, interweaving examples from my own experience as a design system engineering lead.

This talk has been presented at React Day Berlin 2023, check out the latest edition of this React Conference.

Watch video on a separate page

FAQ

A design system in front end engineering is not just a collection of components; it's a product designed to solve problems, similar to the products a company builds. It includes reusable components and guidelines that help maintain consistency and efficiency in product development.

Start by understanding the needs of your users, who are likely other engineers within your company. Engage with them through user research methods like surveys and shadowing to uncover their problems and requirements. Also, consider the broader business objectives, such as components that could facilitate new features or resolve customer UX complaints.

In developing a design system, an MVP (Minimum Viable Product) refers to creating the most basic version of a component that is immediately useful and addresses the majority of use cases. This approach allows you to ship quickly, gather feedback, and iterate, following the 80-20 rule—where 80% of the functionality can be achieved with 20% of the effort.

Metrics are crucial for tracking the usage and adoption of components within a design system. Tools like the React scanner package can analyze how often components are used, which assists in understanding their impact and identifying issues. These metrics help validate the effectiveness of the design system in solving user problems and can guide future improvements.

Collecting feedback after shipping a component is vital for iterative development. It helps understand how well the component meets user needs, identifies areas for improvement, and validates that the component is effectively solving the intended problems. Feedback channels can include direct user communication, surveys, and monitoring usage metrics.

Dealing with complex components involves understanding the essential features needed by most users and focusing on those first. For a table component, prioritize features like sorting and pagination, and build them into an MVP. Additional features can be added later based on user feedback and necessity, ensuring backwards compatibility.

Raymond Luong
Raymond Luong
6 min
12 Dec, 2023

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Today's Talk focuses on applying product-making principles to design systems, emphasizing prioritization, MVPs, and metrics. It highlights the importance of understanding user needs and business goals through research and data collection. The Talk also emphasizes the iterative process of building components, gathering feedback, and iterating based on user validation. Lastly, it stresses the significance of measuring progress with metrics to track usage and adoption, and to demonstrate the impact of design system efforts.

1. Introduction to Design System Principles

Short description:

Today, I'll be talking about applying product-making principles to your design system. A design system is not just a collection of components, but a product that solves problems. The principles I'll focus on are prioritization, MVPs, and metrics.

Hi, everyone. My name is Raymond and I'm a front end engineer based in San Francisco. Today, I'll be talking about applying product-making principles to your design system.

So, this is you. You are a front end engineer building out your company's design system. You have a basic storybook set up and a few components built, probably a button. Everyone always starts with a good old button. Where do you go from here? You start Googling notable libraries, bootstrap, material UI, ant design, chakra, blueprint, the list goes on. You see a ton of components, variants, props, etc. You think you need to build all this and start to feel overwhelmed. You start sweating. Has this ever happened to you? It's definitely happened to me but what's helped me is reframing how I think about a design system. It's not a comprehensive collection of perfect components that will handle every possible edge case and scenario. Instead, it's a product that exists to solve problems, much like the products your company is building. And you can use product thinking principles to help guide your path forward.

The principles I'll be focusing on today are prioritization, minimum viable products or MVPs, and metrics.

2. Prioritizing User Needs and Business Goals

Short description:

Start with your users and put on your UX research hat. Talk to them, discover their needs, find their problems, shadow them, run surveys, and collect data. Also, consider the broader product and business goals. Run code audits to gather data on current component usage. Use this information to prioritize your work.

Prioritization. There are an infinite number of things you'd be working on. Where do you start? Start with your users, of course. They're probably other engineers and probably internal, so they should be easier to reach. Put on your UX research hat. Talk to them, discover their needs, find their problems, shadow them, run surveys and collect data.

Also, think about the broader product and business goals. Is there a new component that would accelerate a major feature release that would unblock new sales? Are customers writing in about UX issues for a major product area? Even though your work is generally internal, it is important not to lose sight of the broader business. You can also run code audits to get data on current component usage. I like using the React scanner package, which scans your codebase and gives you numbers on component instances, prop usage, etc. From here, you'll probably see patterns. What do engineers commonly complain about? What do they use often? What do they find hard to use? What is important to the business? Use all this information to prioritize what to work on.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Design Systems: Walking the Line Between Flexibility and Consistency
React Advanced 2021React Advanced 2021
47 min
Design Systems: Walking the Line Between Flexibility and Consistency
Top Content
The Talk discusses the balance between flexibility and consistency in design systems. It explores the API design of the ActionList component and the customization options it offers. The use of component-based APIs and composability is emphasized for flexibility and customization. The Talk also touches on the ActionMenu component and the concept of building for people. The Q&A session covers topics such as component inclusion in design systems, API complexity, and the decision between creating a custom design system or using a component library.
Build a Design System with React and Tailwind CSS
React Summit 2022React Summit 2022
27 min
Build a Design System with React and Tailwind CSS
Top Content
This Talk discusses design systems and how to build one using React and Tailwind CSS. Tailwind CSS provides utility classes for building complex layouts without writing CSS rules. Custom colors can be added to the Tailwind CSS config file, and font styles and text sizes can be customized. The entire Tailwind CSS configuration can be customized to meet specific requirements. Base styles can be added to the config file itself using a plugin. Reusable components can be created with Tailwind CSS, allowing for easy customization of size and color.
Walking the Line Between Flexibility and Consistency in Component Libraries
React Summit 2022React Summit 2022
27 min
Walking the Line Between Flexibility and Consistency in Component Libraries
This Talk discusses the comparison between Polaris and Material UI component libraries in terms of consistency and flexibility. It highlights the use of the action list pattern and the customization options available for the action list component. The Talk also emphasizes the introduction of a composite component to improve API flexibility. Additionally, it mentions the importance of finding the right balance between flexibility and consistency and the use of types to enforce specific child components.
Find Out If Your Design System Is Better Than Nothing
React Summit 2022React Summit 2022
20 min
Find Out If Your Design System Is Better Than Nothing
Building a design system without adoption is a waste of time. Grafana UI's adoption is growing consistently over time. The factors affecting design system adoption include the source mix changing, displacement of Homebrew components by Grafana UI, and the limitations of Grafana UI's current state. Measuring adoption is important to determine the success of a design system. The analysis of code through static code analysis tools is valuable in detecting and tracking component usage.
Dialog Dilemmas and Modal Mischief: A Deep Dive Into Pop-Ups
JSNation 2023JSNation 2023
10 min
Dialog Dilemmas and Modal Mischief: A Deep Dive Into Pop-Ups
The Talk discusses the use of dialogues and popovers in web development. Dialogues can be modal or non-modal and are now accessibility-supported. Popovers are versatile and can be added to any element without JavaScript. They provide suggestions, pickers, teaching UI, list boxes, and action menus. Modal and non-modal dialogues and popovers have different behaviors and dismissal methods. Browser support for these features is expanding, but there are still open questions about positioning, semantics, and other use cases.
Type-safe Styling for React Component Packages: Vanilla Extract CSS
React Advanced 2023React Advanced 2023
19 min
Type-safe Styling for React Component Packages: Vanilla Extract CSS
Watch video: Type-safe Styling for React Component Packages: Vanilla Extract CSS
Today's Talk introduces Vanilla Extract CSS, a type-safe styling method for React applications. It combines the benefits of scoped styling, zero runtime overhead, and a great developer experience. Vanilla Extract generates a static CSS file at build time, resulting in better performance. It is framework agnostic and offers a powerful toolkit, including Sprinkles for utility classes and CSS utils for calculations. With type safety and the ability to define themes and variants, Vanilla Extract makes it easy to create efficient, scalable, and maintainable design system component packages.

Workshops on related topic

Rapid UI Development in React: Harnessing Custom Component Libraries & Design Systems
React Advanced 2022React Advanced 2022
118 min
Rapid UI Development in React: Harnessing Custom Component Libraries & Design Systems
Workshop
Richard Moss
Richard Moss
In this workshop, we'll take a tour through the most effective approaches to building out scalable UI components that enhance developer productivity and happiness :-) This will involve a mix of hands-on exercises and presentations, covering the more advanced aspects of the popular styled-components library, including theming and implementing styled-system utilities via style props for rapid UI development, and culminating in how you can build up your own scalable custom component library.
We will focus on both the ideal scenario---where you work on a greenfield project---along with tactics to incrementally adopt a design system and modern approaches to styling in an existing legacy codebase with some tech debt (often the case!). By the end of the workshop, you should feel that you have an understanding of the tradeoffs between different approaches and feel confident to start implementing the options available to move towards using a design system based component library in the codebase you work on.
Prerequisites: - Familiarity with and experience working on large react codebases- A good understanding of common approaches to styling in React