Beyond 1.0 - Lessons Learned and Things to Do After 1.0 Release of a Design System

This ad is not shown to multipass and full ticket holders
React Advanced
React Advanced 2026
October 23 - 26, 2026
London, UK & Online
Upcoming event
React Advanced 2026
React Advanced 2026
October 23 - 26, 2026. London, UK & Online
Bookmark
Slides
Rate this content
Sentry
Promoted
Code breaks, fix it faster

Crashes, slowdowns, regressions in prod. Seer by Sentry unifies traces, replays, errors, profiles to find root causes fast.

Get started

Yay you just launched v1.0 of your design system but now what? Launching a design system can seem like an easy task but maintaining it is what will get you. In this talk we'll discuss how your design system should mature with your company by building an extensible documentation site, thinking beyond the code, collecting component usage statistics, and much more!

This talk has been presented at React Summit US 2024, check out the latest edition of this React Conference.

FAQ

A design system is a collection of reusable components, principles, constraints, and best practices governed by clear standards. It includes a component library, guidelines for color, iconography, typography, support docs, and patterns for constructing interfaces.

S&C Electric Company chose React for their design system due to its strong community support, excellent performance for large applications, and multi-platform support through tools like React Native.

The key components include over 70 components supported on four platforms, documentation for designers, developers, and testers, and a monorepo setup for seamless integration of web and mobile components.

They use unit tests to achieve over 80% code coverage, implement a monorepo for easier management, and utilize automation testing tools like Cypress in their CI/CD pipeline to prevent bugs and ensure code quality.

They evaluated tools like Docusaurus, Box, Styleguides, and Next.js, ultimately choosing Next.js to build a comprehensive and custom design system documentation site.

They developed a custom script to parse JSX files and collect data on component usage across projects, which is then reported to a dashboard for better decision-making and communication with stakeholders.

Co-locating code improves maintainability by organizing all relevant files (tests, styles, docs) for a component in a single directory, simplifying the onboarding process and daily work for developers.

They communicate releases through messages on Teams or Slack, emails, and scheduled demos, highlighting new features and changes to stakeholders effectively.

Patterns document common interface elements like login forms and navigation layouts, providing examples and code to prevent reinventing the wheel and ensuring consistency across applications.

Ameer Sami
Ameer Sami
18 min
22 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Welcome to Beyond 1.0, a talk about scaling and maintaining design systems. A design system is a collection of reusable components, principles, constraints, and best practices governed by clear standards. We have expanded our design system over six and a half years to include over 70 components and support over 50 developers. To maintain a maintainable code base for your design system, enforce a singular code style across your entire code base through a linter. Use Next.js for a comprehensive and custom design system documentation site built with Markdown. We've improved our design system documentation by using react.gen typescript to dynamically parse out component props, allowing for more interactive and maintainable documentation.

1. Introduction to Design Systems

Short description:

Welcome to Beyond 1.0, a talk about scaling and maintaining design systems. A design system is a collection of reusable components, principles, constraints, and best practices governed by clear standards. We chose React and TypeScript for our design system, and have continuously improved it since 2018. We released versions 1.0 and 2.0, and incorporated mobile components in 2022.

Hi there, welcome to Beyond 1.0, lessons learned, things to do after the first release of a design system. By the end of this talk, I hope you can answer this one question. How can you scale and maintain your design system?

Hi there, my name is Amir Sami, I'm a senior software engineer at SNC Electric Company. In my free time, I like to bake delicious baked goods, I like to code, it's not just my profession, it's a hobby as well. I like to hike and explore nature. And I also like to lift heavy circles for some reason.

I'd also like to give a big shout out to my amazing team, without whom none of what I'm about to discuss with you would have been possible. My team and I work at SNC Electric Company, which is a global provider of equipment and services for electric power systems. We were founded in 1911 in Chicago where we design and manufacture switching and protection products. Today, our diverse global workforce develops innovative solutions for a more intelligent and resilient electrical grid. Building on this legacy of technological innovation and customer service, SNC empowers the transformation of the grid for an outage-free, sustainable electrical energy future.

Now what is a design system? A design system is a collection of reusable components, principles, constraints, and best practices governed by clear standards. There's many aspects to a design system, and one that you're most likely familiar with is a component library. There's many popular component libraries out there, such as MaterialUI, XDUI, ShadCN, and AntDesign. And basically, a component library is a set of reusable components you can use to construct an interface more effectively and efficiently. A design system expands upon a component library and includes information about what, when, and how to use color, iconography, and typography, as well as how to rate content for your application. It also includes support docs, and it also includes patterns for constructing interfaces with. This all comes together to form a design system. The role of a design system is not to constrain its users, but rather to make design and development easier, faster, and more consistent.

When we were working on our design system, we evaluated many libraries, ultimately selecting React. Hence, why I'm speaking at React Summit. We selected React due to its amazing support and community, its great performance for large and complex applications, as well as its multi-platform support through things such as React Native. We decided to use TypeScript in conjunction with React to make sure that our design system codebase was as type-safe as possible. We originally began working on our design system way back in 2018 when my manager and I realized that we were recreating the same components over and over again across multiple projects and we were answering the same design-related questions as well. After this realization, we began our research into design systems in early 2018, documenting requirements for our own design system, and we had an initial prototype ready by the end of 2018. Over the course of 2019, we continued to improve and iterate upon this prototype, eventually launching our version 1.0 at the end of 2019. In 2020, we continued to work on our version 1.0 and began planning for our version 2.0, which was a major revamp and overhaul of both the design system components and documentation. In 2021, we continued to iterate upon that, and in early 2022, we released our first version 2.0 of our design system. By then, we almost immediately began working on our mobile component development and figuring out how to incorporate that alongside our web components that we had already built. We continued to iterate upon our web components and release those, ultimately launching our mobile components beside them at the end of 2022 with the version 22.1, which was a major revamp and overhaul of our design system.

2. Developing and Maintaining a Design System

Short description:

We have expanded our design system over six and a half years to include over 70 components and support over 50 developers. We provide user-specific documentation for designers, developers, and testers. Refactoring our codebase into a monorepo allowed us to seamlessly incorporate web, mobile, desktop components, utilities, and CSS variables. To prevent bugs, we implemented unit tests, achieved 80% code coverage, and added example applications with automated testing. Co-locating code helps manage complexity as your design system grows.

We continued to iterate upon our design system in the coming years, ultimately landing on the most recent version, which is 24.6. The initial version of our design system documentation site looked like this, including some basic information and guidelines on how to use color, typography, and iconography, among many other things, as well as a small set of React components that developers could use to construct interfaces. Our current version of our design system documentation site looks like this. As we expanded, it was more content and more components.

I'm proud to say that we've worked on our design system for over six and a half years. And over those six and a half years, we've expanded it to include over 70 components and supported over 50 developers internally, and we now support over four platforms, such as web and mobile, through React and React Native. It's important to understand who the users of your design system are as they're able to more accurately and specifically address their needs. For us, we've identified three user types, designers, developers, and testers. By identifying these three user types, we've been able to create user-specific documentation. For designers, we provide information such as tools and resources to more easily and quickly create designs. For developers, it's guidelines and guidance on how to set up your environment and how to use our components. And lastly, for testers, it's guidance on how to test applications built using our design system.

Needless to say, we have quite a bit of experience developing and maintaining our design system, and there's four areas I'd like to focus on and discuss with you today, the first being project architecture. When we began working on our design system, the scope of it was limited to just web components. But very quickly after the first version release, we began receiving questions about how we would incorporate other aspects such as mobile components, desktop components, utilities, and CSS variables, among many other things. And figuring out how to incorporate all these seamlessly while sharing as much code and styles across our design system was quite a task. Ultimately, we decided to refactor our entire design system codebase to a monorepo.

From my own experience, this was not a fun task, and I highly suggest that you start off as a monorepo as opposed to migrating over to one in the future. Having a monorepo from day one provides you the flexibility to grow as the needs of your design system grow as well. As you can see, our design system is quite large and complex with multiple moving parts. And as you most likely know, in any software, application, or software project, bugs will pop up. We've done our best to mitigate and prevent bugs by writing as many unit tests as we can, ultimately achieving over 80% code coverage, but that simply was not enough for us. To prevent even more bugs, we decided to expand the scope of our design system and our monorepo to include two additional internally facing packages, an example mobile app and an example web app. Like the name suggests, these are example applications that provide examples of our components in use with one another. Through the power of auto-linking packages in a monorepo, we were able to deploy these applications locally and test out the changes we've made and look for regressions or new defects. We've taken that a step further by implementing and integrating automation testing tools such as Cypress to automatically test these applications for those regressions and defects. We additionally have those automation testing tools run as part of our CI and CD pipeline to automatically check for those items and fail builds if any defects or regressions are found, notifying the team, and we can catch those before a release is completed and conducted. Now, when you initially begin working on your design system code base, it's very easy to haphazardly locate files all over the code base. But as it grows in complexity and in size, managing these different files and folders becomes very complex unnecessarily. I suggest you move this complexity to the side and instead co-locate as much of the code as possible.

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.
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
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.
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.

Workshops on related topic

From Chaos to Clarity: Managing Agentic System Complexity in Cloud-Native FinTech
TechLead Conference 2025: AI in OrgsTechLead Conference 2025: AI in Orgs
49 min
From Chaos to Clarity: Managing Agentic System Complexity in Cloud-Native FinTech
Workshop
Sibasis Padhi
Sibasis Padhi
Overview:        AI adoption brings system complexity, especially when autonomy, orchestration, and cloud-native microservices collide. Based on my published research and enterprise experience, this workshop breaks down the complexity of deploying agentic systems responsibly. This workshop is aimed at senior engineers who are navigating cloud-native architectures while introducing autonomous AI components, without a clear blueprint.Contents:1. The New Complexity Stack    a) Microservices, AI, and third-party code generators    b) Where system chaos starts and why it escalates
2. Understanding Agentic AI Behavior    a) Autonomy, memory, and hallucination risk    b) Real-world examples from financial decision support
3. Design Patterns for Clarity    a) Guardrails for system observability    b) Tradeoffs: orchestration vs code generation
4. Scalability Without Burnout    a) What senior engineers must lead: governance, ethics, reliability     b) Designing systems that scale safely under load
5. Takeaways    a) Agentic adoption roadmap    b) How to test and monitor non-deterministic AI    c) Alignment with team velocity and business outcomes
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