Design System Essentials

Rate this content
Bookmark
Slides

¡Yay, acaban de lanzar la versión 1.0 de su sistema de diseño, pero ahora qué? El lanzamiento de un sistema de diseño puede parecer una tarea fácil, pero mantenerlo es lo que importa. En esta charla discutiremos cómo su sistema de diseño debe madurar con su empresa mediante la construcción de un sitio de documentación extensible, pensando más allá del código, recopilando estadísticas de uso de componentes y mucho más!

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

Ameer Sami
Ameer Sami
18 min
22 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
Bienvenido a Más allá de 1.0, una charla sobre el escalado y mantenimiento de sistemas de diseño. Un sistema de diseño es una colección de componentes reutilizables, principios, restricciones y mejores prácticas gobernadas por estándares claros. Hemos expandido nuestro sistema de diseño durante seis años y medio para incluir más de 70 componentes y dar soporte a más de 50 desarrolladores. Para mantener una base de código mantenible para su sistema de diseño, aplique un estilo de código singular en todo su código mediante un linter. Utilice Next.js para un sitio de documentación de sistema de diseño completo y personalizado construido con Markdown. Hemos mejorado nuestra documentación del sistema de diseño utilizando react.gen typescript para analizar dinámicamente las propiedades de los componentes, lo que permite una documentación más interactiva y mantenible.

1. Introducción a los sistemas de diseño

Short description:

Bienvenido a Beyond 1.0, una charla sobre la escalabilidad y el mantenimiento de los sistemas de diseño. Un sistema de diseño es una colección de componentes reutilizables, principios, restricciones y mejores prácticas gobernadas por estándares claros. Elegimos React y TypeScript para nuestro sistema de diseño y lo hemos mejorado continuamente desde 2018. Lanzamos las versiones 1.0 y 2.0 e incorporamos componentes móviles en 2022.

Hola, bienvenido a Beyond 1.0, lecciones aprendidas, cosas que hacer después del primer lanzamiento de un sistema de diseño. Al final de esta charla, espero que puedas responder a esta pregunta. ¿Cómo puedes escalar y mantener tu sistema de diseño?

Hola, mi nombre es Amir Sami, soy un ingeniero de software senior en SNC Electric Company. En mi tiempo libre, me gusta hornear deliciosos productos horneados, me gusta programar, no solo es mi profesión, también es un pasatiempo. Me gusta hacer senderismo y explorar la naturaleza. Y también me gusta levantar pesas por alguna razón.

También me gustaría dar un gran agradecimiento a mi increíble equipo, sin el cual nada de lo que voy a discutir con ustedes hubiera sido posible. Mi equipo y yo trabajamos en SNC Electric Company, que es un proveedor global de equipos y servicios para sistemas de energía eléctrica. Fuimos fundados en 1911 en Chicago, donde diseñamos y fabricamos productos de conmutación y protección. Hoy en día, nuestra diversa fuerza laboral global desarrolla soluciones innovadoras para una red eléctrica más inteligente y resistente. Basándonos en este legado de innovación tecnológica y servicio al cliente, SNC impulsa la transformación de la red hacia un futuro de energía eléctrica sostenible y sin interrupciones.

Ahora, ¿qué es un sistema de diseño? Un sistema de diseño es una colección de componentes reutilizables, principios, restricciones y mejores prácticas gobernadas por estándares claros. Hay muchos aspectos en un sistema de diseño, y uno con el que probablemente estés familiarizado es una biblioteca de componentes. Hay muchas bibliotecas de componentes populares, como MaterialUI, XDUI, ShadCN y AntDesign. Básicamente, una biblioteca de componentes es un conjunto de componentes reutilizables que se pueden usar para construir una interfaz de manera más efectiva y eficiente. Un sistema de diseño amplía una biblioteca de componentes e incluye información sobre qué, cuándo, y cómo usar el color, la iconografía y la tipografía, así como cómo calificar el contenido para tu aplicación. También incluye soporte de documentación y también incluye patrones para construir interfaces. Todo esto se une para formar un sistema de diseño. El papel de un sistema de diseño no es limitar a sus usuarios, sino hacer que el diseño y el desarrollo sean más fáciles, rápidos y consistentes.

Cuando estábamos trabajando en nuestro sistema de diseño, evaluamos muchas bibliotecas, seleccionando finalmente React. Por eso estoy hablando en la React Summit. Elegimos React debido a su increíble soporte y comunidad, su excelente rendimiento para aplicaciones grandes y complejas, así como su soporte multiplataforma a través de cosas como React Native. Decidimos usar TypeScript en conjunto con React para asegurarnos de que nuestro código del sistema de diseño fuera lo más seguro posible en cuanto a tipos. Originalmente comenzamos a trabajar en nuestro sistema de diseño en 2018 cuando mi gerente y yo nos dimos cuenta de que estábamos recreando los mismos componentes una y otra vez en varios proyectos y también estábamos respondiendo las mismas preguntas relacionadas con el diseño. Después de esta realización, comenzamos nuestra investigación sobre los sistemas de diseño a principios de 2018, documentando los requisitos para nuestro propio sistema de diseño y teniendo un prototipo inicial listo para finales de 2018. A lo largo de 2019, continuamos mejorando e iterando en este prototipo, lanzando finalmente nuestra versión 1.0 a finales de 2019. En 2020, continuamos trabajando en nuestra versión 1.0 y comenzamos a planificar nuestra versión 2.0, que fue una revisión y renovación importante tanto de los componentes del sistema de diseño como de la documentación. En 2021, continuamos iterando en eso, y a principios de 2022, lanzamos nuestra primera versión 2.0 de nuestro sistema de diseño. Desde entonces, casi de inmediato comenzamos a trabajar en el desarrollo de componentes móviles y a descubrir cómo incorporar eso junto con nuestros componentes web que ya habíamos construido. Continuamos iterando en nuestros componentes web y lanzándolos, lanzando finalmente nuestros componentes móviles junto con ellos a finales de 2022 con la versión 22.1, que fue una renovación y revisión importante de nuestro sistema de diseño.

2. Desarrollo y mantenimiento de un sistema de diseño

Short description:

Hemos expandido nuestro sistema de diseño durante seis años y medio para incluir más de 70 componentes y brindar soporte a más de 50 desarrolladores. Proporcionamos documentación específica para diseñadores, desarrolladores y probadores. La refactorización de nuestro código en un monorepo nos permitió incorporar sin problemas componentes web, móviles y de escritorio, utilidades y variables CSS. Para evitar errores, implementamos pruebas unitarias, logramos una cobertura de código del 80% y agregamos aplicaciones de ejemplo con pruebas automatizadas. La colocación conjunta del código ayuda a gestionar la complejidad a medida que crece su sistema de diseño.

Continuamos iterando en nuestro sistema de diseño en los años siguientes, llegando finalmente a la versión más reciente, que es la 24.6. El sitio de documentación inicial de nuestro sistema de diseño lucía así, incluyendo información básica y pautas sobre cómo usar el color, la tipografía y la iconografía, entre muchas otras cosas, así como un pequeño conjunto de componentes de React que los desarrolladores podían usar para construir interfaces. Nuestra versión actual del sitio de documentación de nuestro sistema de diseño se ve así. A medida que crecimos, hubo más contenido y más componentes.

Me enorgullece decir que hemos trabajado en nuestro sistema de diseño durante más de seis años y medio. Durante esos seis años y medio, lo hemos expandido para incluir más de 70 componentes y brindar soporte a más de 50 desarrolladores internamente, y ahora brindamos soporte a más de cuatro plataformas, como web y móvil, a través de React y React Native. Es importante comprender quiénes son los usuarios de su sistema de diseño, ya que pueden abordar de manera más precisa y específica sus necesidades. Para nosotros, hemos identificado tres tipos de usuarios: diseñadores, desarrolladores y probadores. Al identificar estos tres tipos de usuarios, hemos podido crear documentación específica para cada uno. Para los diseñadores, proporcionamos información como herramientas y recursos para crear diseños de manera más fácil y rápida. Para los desarrolladores, son pautas y orientación sobre cómo configurar su entorno y cómo usar nuestros componentes. Y por último, para los probadores, es una guía sobre cómo probar aplicaciones construidas con nuestro sistema de diseño.

No hace falta decir que tenemos mucha experiencia en el desarrollo y mantenimiento de nuestro sistema de diseño, y me gustaría centrarme y discutir cuatro áreas con ustedes hoy, siendo la primera la arquitectura del proyecto. Cuando comenzamos a trabajar en nuestro sistema de diseño, el alcance se limitaba solo a los componentes web. Pero muy rápidamente después del lanzamiento de la primera versión, comenzamos a recibir preguntas sobre cómo incorporar otros aspectos como componentes móviles, componentes de escritorio, utilidades y variables CSS, entre muchas otras cosas. Y descubrir cómo incorporar todo esto de manera fluida mientras compartimos la mayor cantidad de código y estilos en nuestro sistema de diseño fue una tarea bastante difícil. En última instancia, decidimos refactorizar todo el código de nuestro sistema de diseño en un monorepo.

Desde mi propia experiencia, esta no fue una tarea divertida, y sugiero encarecidamente que comiences con un monorepo en lugar de migrar a uno en el futuro. Tener un monorepo desde el primer día te brinda la flexibilidad para crecer a medida que crecen las necesidades de tu sistema de diseño. Como puedes ver, nuestro sistema de diseño es bastante grande y complejo, con múltiples componentes en movimiento. Y como probablemente sepas, en cualquier software, aplicación o proyecto de software, aparecerán errores. Hemos hecho todo lo posible para mitigar y prevenir errores escribiendo la mayor cantidad de pruebas unitarias que podemos, logrando finalmente una cobertura de código superior al 80%, pero eso simplemente no fue suficiente para nosotros. Para prevenir aún más errores, decidimos expandir el alcance de nuestro sistema de diseño y nuestro monorepo para incluir dos paquetes adicionales de uso interno, una aplicación móvil de ejemplo y una aplicación web de ejemplo. Como sugiere el nombre, estas son aplicaciones de ejemplo que proporcionan ejemplos de nuestros componentes en uso entre sí. A través del poder de los paquetes de enlace automático en un monorepo, pudimos implementar estas aplicaciones localmente y probar los cambios que hemos realizado y buscar regresiones o nuevos defectos. Hemos llevado esto un paso más allá al implementar e integrar herramientas de pruebas de automatización como Cypress para probar automáticamente estas aplicaciones en busca de esas regresiones y defectos. Además, estas herramientas de pruebas de automatización se ejecutan como parte de nuestro pipeline de CI/CD para verificar automáticamente estos elementos y fallar las compilaciones si se encuentran defectos o regresiones, notificando al equipo para que podamos detectarlos antes de que se complete y realice una versión.

Ahora, cuando comienzas a trabajar inicialmente en la base de código de tu sistema de diseño, es muy fácil ubicar archivos de manera desordenada en todo el código. Pero a medida que crece en complejidad y tamaño, gestionar estos diferentes archivos y carpetas se vuelve innecesariamente complejo. Sugiero que muevas esta complejidad a un lado y, en su lugar, coloques conjuntamente la mayor cantidad de código posible.

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

Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
React Advanced 2021React Advanced 2021
47 min
Sistemas de Diseño: Caminando la Línea Entre Flexibilidad y Consistencia
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.
Construir un Sistema de Diseño con React y Tailwind CSS
React Summit 2022React Summit 2022
27 min
Construir un Sistema de Diseño con React y 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.
Caminando en la línea entre la flexibilidad y la consistencia en las bibliotecas de componentes
React Summit 2022React Summit 2022
27 min
Caminando en la línea entre la flexibilidad y la consistencia en las bibliotecas de componentes
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.
Descubre si tu sistema de diseño es mejor que nada
React Summit 2022React Summit 2022
20 min
Descubre si tu sistema de diseño es mejor que nada
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.
Dilemas de los diálogos y travesuras modales: Un análisis profundo de las ventanas emergentes
JSNation 2023JSNation 2023
10 min
Dilemas de los diálogos y travesuras modales: Un análisis profundo de las ventanas emergentes
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.
Estilo Seguro para Paquetes de Componentes React: Vanilla Extract CSS
React Advanced 2023React Advanced 2023
19 min
Estilo Seguro para Paquetes de Componentes React: 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

Desarrollo Rápido de UI en React: Aprovechando Bibliotecas de Componentes Personalizadas y Sistemas de Diseño
React Advanced 2022React Advanced 2022
118 min
Desarrollo Rápido de UI en React: Aprovechando Bibliotecas de Componentes Personalizadas y Sistemas de Diseño
Workshop
Richard Moss
Richard Moss
En este masterclass, recorreremos los enfoques más efectivos para construir componentes de UI escalables que mejoren la productividad y felicidad del desarrollador :-) Esto implicará una combinación de ejercicios prácticos y presentaciones, que cubrirán los aspectos más avanzados de la popular biblioteca styled-components, incluyendo la tematización e implementación de utilidades styled-system a través de props de estilo para un desarrollo rápido de UI, y culminando en cómo puedes construir tu propia biblioteca de componentes personalizada y escalable.
Nos enfocaremos tanto en el escenario ideal, donde trabajas en un proyecto nuevo, como en tácticas para adoptar incrementalmente un sistema de diseño y enfoques modernos para el estilo en una base de código existente con algo de deuda técnica (¡que suele ser el caso!). Al final del masterclass, deberías sentir que comprendes los compromisos entre diferentes enfoques y sentirte seguro para comenzar a implementar las opciones disponibles para avanzar hacia el uso de una biblioteca de componentes basada en un sistema de diseño en la base de código en la que trabajas.
Prerrequisitos: - Familiaridad y experiencia trabajando en grandes bases de código de React- Una buena comprensión de los enfoques comunes para el estilo en React