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