Design Systems y Componentes UI: Guía Completa para Equipos de Desarrollo

Todo lo que necesitas saber sobre design systems. Componentes, documentación, implementación y mantenimiento para consistencia y eficiencia.

¿Qué Es un Design System?

Un design system es un conjunto de estándares, componentes reutilizables y guidelines que permiten a los equipos crear productos digitales consistentes y eficientes. Es más que una librería de componentes - es un lenguaje común entre diseñadores y desarrolladores.

Componentes de un Design System

1. Design Tokens

  • Colores
  • Tipografía
  • Espaciado
  • Sombras
  • Border radius
  • 2. Component Library

  • Componentes UI reutilizables
  • Codificados y documentados
  • Versionado
  • 3. Pattern Library

  • Patrones de interacción
  • Templates de layout
  • Flujos comunes
  • 4. Documentación

  • Guidelines de uso
  • Do's and don'ts
  • Ejemplos de código
  • 5. Governance

  • Procesos de actualización
  • Guidelines de contribución
  • Gestión de versiones
  • Por Qué Es Importante

    1. Consistencia

  • Experiencia uniforme cross-product
  • Reconocimiento de marca
  • Carga cognitiva reducida para usuarios
  • 2. Eficiencia

  • No reinventas la rueda
  • Desarrollo más rápido
  • Menos bugs por repetición
  • 3. Escalabilidad

  • Más fácil escalar equipos
  • Onboarding más rápido
  • Mantenimiento centralizado
  • 4. Colaboración

  • Lenguaje común diseñador-desarrollador
  • Handoff más fluido
  • Mejor feedback loop
  • ROI Típico

  • 47% más rápido desarrollo de nuevas features
  • 34% reducción en inconsistencias UI
  • 25% menos tiempo de design review
  • Ahorro de costes: $1M+/año para enterprise
  • Design Tokens

    Qué Son

    Los valores atómicos que definen el aspecto visual. Son la base de todo el sistema.

    Categorías

    Color:

    css
    

    / Nombrado semántico /

    --color-primary: #2563eb;

    --color-primary-hover: #1d4ed8;

    --color-secondary: #64748b;

    --color-success: #22c55e;

    --color-warning: #f59e0b;

    --color-error: #ef4444;

    / Escala neutral /

    --color-gray-50: #f8fafc;

    --color-gray-100: #f1f5f9;

    --color-gray-900: #0f172a;

    Tipografía:

    css
    

    / Familias tipográficas /

    --font-sans: 'Inter', system-ui, sans-serif;

    --font-mono: 'JetBrains Mono', monospace;

    / Tamaños /

    --font-size-xs: 0.75rem;

    --font-size-sm: 0.875rem;

    --font-size-base: 1rem;

    --font-size-lg: 1.125rem;

    --font-size-xl: 1.25rem;

    / Pesos /

    --font-weight-regular: 400;

    --font-weight-medium: 500;

    --font-weight-bold: 700;

    / Alturas de línea /

    --line-height-tight: 1.25;

    --line-height-normal: 1.5;

    --line-height-relaxed: 1.75;

    Espaciado:

    css
    

    / Unidad base 4px /

    --space-1: 0.25rem; / 4px /

    --space-2: 0.5rem; / 8px /

    --space-3: 0.75rem; / 12px /

    --space-4: 1rem; / 16px /

    --space-6: 1.5rem; / 24px /

    --space-8: 2rem; / 32px /

    --space-12: 3rem; / 48px /

    --space-16: 4rem; / 64px /

    Otros Tokens:

    css
    

    / Sombras /

    --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);

    --shadow-md: 0 4px 6px rgba(0,0,0,0.1);

    --shadow-lg: 0 10px 15px rgba(0,0,0,0.1);

    / Border radius /

    --radius-sm: 0.25rem;

    --radius-md: 0.375rem;

    --radius-lg: 0.5rem;

    --radius-full: 9999px;

    / Transiciones /

    --transition-fast: 150ms ease;

    --transition-normal: 300ms ease;

    Herramientas para Tokens

  • Style Dictionary (Amazon): Transforma tokens a cualquier formato
  • Theo (Salesforce): Gestión de tokens
  • Figma Tokens: Sincroniza Figma ↔ Code
  • Tokens Studio: Plugin avanzado de Figma
  • Component Library

    Anatomía de un Componente

    1. Props/API

  • Qué se puede personalizar
  • Types y validación
  • Defaults sensatos
  • 2. Variantes

  • Variaciones visuales
  • Opciones de tamaño
  • Estilos de estado
  • 3. Estados

  • Default
  • Hover
  • Focus
  • Active
  • Disabled
  • Loading
  • Error
  • 4. Accesibilidad

  • Atributos ARIA
  • Navegación por teclado
  • Soporte screen reader
  • Ejemplo: Componente Button

    tsx
    

    // Button.tsx

    interface ButtonProps {

    variant?: 'primary' | 'secondary' | 'ghost' | 'danger';

    size?: 'sm' | 'md' | 'lg';

    isLoading?: boolean;

    isDisabled?: boolean;

    leftIcon?: React.ReactNode;

    rightIcon?: React.ReactNode;

    children: React.ReactNode;

    onClick?: () => void;

    }

    export const Button: React.FC = ({

    variant = 'primary',

    size = 'md',

    isLoading = false,

    isDisabled = false,

    leftIcon,

    rightIcon,

    children,

    onClick,

    }) => {

    return (

    className={cn(

    'button',

    button--${variant},

    button--${size},

    isLoading && 'button--loading'

    )}

    disabled={isDisabled || isLoading}

    onClick={onClick}

    aria-busy={isLoading}

    >

    {isLoading && }

    {leftIcon && {leftIcon}}

    {children}

    {rightIcon && {rightIcon}}

    );

    };

    Componentes Esenciales

    Layout:

  • Container
  • Grid
  • Stack (vertical/horizontal)
  • Flex
  • Divider
  • Tipografía:

  • Heading
  • Text
  • Link
  • Code
  • Formularios:

  • Input
  • Textarea
  • Select
  • Checkbox
  • Radio
  • Switch
  • Form Field (wrapper)
  • Botones:

  • Button
  • IconButton
  • ButtonGroup
  • Feedback:

  • Alert
  • Toast/Notification
  • Progress
  • Skeleton
  • Spinner
  • Visualización de Datos:

  • Avatar
  • Badge
  • Card
  • List
  • Table
  • Overlay:

  • Modal/Dialog
  • Drawer
  • Tooltip
  • Popover
  • Dropdown Menu
  • Navegación:

  • Tabs
  • Breadcrumb
  • Pagination
  • NavLink
  • Documentación

    Qué Documentar

    Por Componente:

  • Descripción y caso de uso
  • Tabla de Props API
  • Ejemplos de código
  • Do's and don'ts
  • Notas de accesibilidad
  • Componentes relacionados
  • General:

  • Getting started
  • Instalación
  • Theming/personalización
  • Guidelines de contribución
  • Changelog
  • Herramientas de Documentación

    Storybook:

  • Estándar de la industria
  • Playground interactivo
  • Múltiples frameworks
  • Ecosistema de addons
  • Docusaurus:

  • Basado en Markdown
  • Versionado integrado
  • Búsqueda incluida
  • Custom:

  • Soporte MDX
  • Ejemplos de código en vivo
  • Docs de design tokens
  • Configuración de Storybook

    tsx
    

    // Button.stories.tsx

    import { Button } from './Button';

    export default {

    title: 'Components/Button',

    component: Button,

    argTypes: {

    variant: {

    control: 'select',

    options: ['primary', 'secondary', 'ghost', 'danger'],

    },

    size: {

    control: 'radio',

    options: ['sm', 'md', 'lg'],

    },

    },

    };

    export const Primary = {

    args: {

    variant: 'primary',

    children: 'Button',

    },

    };

    export const Secondary = {

    args: {

    variant: 'secondary',

    children: 'Button',

    },

    };

    export const AllVariants = () => (

    );

    Implementación

    Enfoques

    1. Construir desde Cero

  • Control completo
  • Perfectamente adaptado a necesidades
  • Gran inversión de tiempo
  • Mejor para: Empresas grandes, productos maduros
  • 2. Extender Librería Existente

  • Empezar con Radix, Headless UI, etc.
  • Personalizar styling
  • Accesibilidad out of the box
  • Mejor para: Mayoría de proyectos
  • 3. Usar Framework CSS

  • Tailwind, Bootstrap
  • Desarrollo rápido
  • Menos único
  • Mejor para: MVPs, proyectos con deadlines ajustados
  • Stack Recomendado 2025

    Base:

  • React/Vue/Svelte
  • TypeScript (imprescindible)
  • CSS Modules o CSS-in-JS
  • Headless Components:

  • Radix UI
  • Headless UI
  • React Aria
  • Styling:

  • Tailwind CSS
  • Vanilla Extract
  • Panda CSS
  • Build:

  • Turborepo (monorepo)
  • tsup/Rollup (bundling)
  • Changesets (versionado)
  • Estructura Monorepo

    
    

    packages/

    ├── design-tokens/

    │ ├── tokens.json

    │ └── build.js

    ├── ui/

    │ ├── src/

    │ │ ├── Button/

    │ │ ├── Input/

    │ │ └── ...

    │ ├── package.json

    │ └── tsconfig.json

    ├── icons/

    │ └── ...

    └── docs/

    └── storybook/

    apps/

    ├── web/

    └── mobile/

    package.json (root)

    turbo.json

    Mantenimiento y Governance

    Versionado

    Semantic Versioning:

  • Major: Breaking changes
  • Minor: Nuevas features, retrocompatibles
  • Patch: Bug fixes
  • Changelog:

  • Generado automáticamente con Changesets
  • Guías de migración claras para breaking changes
  • Proceso de Contribución

    1. Propuesta

  • Documento RFC
  • Design review
  • Technical review
  • 2. Desarrollo

  • Branch desde main
  • Tests requeridos
  • Documentación requerida
  • 3. Review

  • Code review
  • Design review
  • Accessibility review
  • 4. Release

  • Merge a main
  • Actualización changelog
  • Version bump
  • Publicación
  • Seguimiento de Adopción

    Métricas:

  • Uso de componentes entre productos
  • Puntuaciones de consistencia
  • Satisfacción de desarrolladores
  • Tiempo de integración
  • Herramientas:

  • Analytics en Storybook
  • Reglas de linting
  • Informes automatizados
  • Design Systems Populares

    Open Source

    Material UI (Google):

  • Componentes React
  • Material Design
  • Muy completo
  • Puede ser pesado
  • Ant Design (Alibaba):

  • Enfocado en enterprise
  • React/Vue/Angular
  • Excelentes componentes de tabla/formulario
  • Chakra UI:

  • Excelente DX
  • Accesible por defecto
  • Altamente personalizable
  • Radix:

  • Primitivos sin estilos
  • Accesibilidad completa
  • Compón tu propio diseño
  • Enterprise (Referencia)

    Carbon (IBM):

  • Guidelines completas
  • Implementación React
  • Kits Sketch/Figma
  • Polaris (Shopify):

  • Enfocado en e-commerce
  • Componentes React
  • Excelente documentación
  • Lightning (Salesforce):

  • Optimizado para CRM
  • Web components
  • Estándar de design tokens
  • Anti-Patrones

    1. Over-Engineering Temprano

    Problema: Design system completo antes de tener productos.

    Solución:

  • Empieza con lo que necesitas ahora
  • Extrae patrones de productos existentes
  • Itera basándote en uso real
  • 2. Demasiadas Variantes

    Problema: Botón con 15 variantes diferentes.

    Solución:

  • Restringe opciones
  • Composición sobre variantes
  • Menos es más
  • 3. Acoplamiento Fuerte

    Problema: Componentes dependen demasiado unos de otros.

    Solución:

  • Componentes independientes
  • Props para personalización
  • Patrones slots/children
  • 4. Ignorar Accesibilidad

    Problema: "Lo añadimos después."

    Solución:

  • A11y desde el inicio
  • Usa primitivos probados
  • Auditorías regulares
  • 5. Sin Governance

    Problema: Todo el mundo añade lo que quiere.

    Solución:

  • Proceso de contribución claro
  • Requisitos de review
  • Propiedad centralizada
  • Conclusión

    Un design system bien implementado transforma la forma en que los equipos construyen productos digitales. La inversión inicial se amortiza rápidamente a través de eficiencia y consistencia.

    Principios clave:

  • Empieza pequeño, crece orgánicamente
  • La documentación no es opcional
  • Accesibilidad desde el primer día
  • La governance mantiene la calidad

Pasos de implementación:

1. Audita el UI existente

2. Extrae patrones comunes

3. Define tokens

4. Construye componentes core

5. Documenta todo

6. Establece governance

---

El equipo DGI ofrece servicios de diseño e implementación de design systems. Contáctanos para discutir las necesidades de tu equipo.

Compartir artículo:
Volver al Blog