Design System Entwicklung als Subscription
Wann brauchen Sie ein Design System?
Ein Design System ist keine Sammlung von Buttons und Farben. Es ist ein lebendiges System aus Prinzipien, Komponenten und Patterns das sicherstellt, dass Ihr Produkt konsistent aussieht und sich konsistent anfühlt, egal wer daran arbeitet.
Die typischen Symptome ohne Design System
- Inkonsistente UI: Jede Seite sieht anders aus. Verschiedene Abstände, verschiedene Farben, verschiedene Button-Stile
- Langsame Entwicklung: Jedes Feature erfordert Custom-Styling. Kein Entwickler nutzt existierende Komponenten weil sie nicht dokumentiert sind
- Design-Dev Ping-Pong: Designer liefern Mockups, Entwickler bauen sie unterschiedlich um. Endlose Review-Zyklen
- Accessibility-Lücken: Jede Komponente implementiert Accessibility anders, oder gar nicht
- Onboarding-Probleme: Neue Entwickler brauchen Wochen um den visuellen Standard zu verstehen
Der ROI eines Design Systems
| Investition | Ohne Design System | Mit Design System |
|---|---|---|
| Neue Seite bauen | 3-5 Tage | 0,5-1 Tag |
| Design Review | 2-3 Runden pro Feature | 0-1 Runde |
| Onboarding neuer Entwickler | 4 Wochen | 1 Woche |
| Redesign/Rebranding | 3-6 Monate | 2-4 Wochen (Token-Wechsel) |
| Accessibility Audit | Monate an Nacharbeit | Bereits eingebaut |
| Bug Reports "sieht komisch aus" | Wöchentlich | Fast nie |
Faustregel: Ab 3 Entwicklern und 20+ Screens lohnt sich ein Design System. Ab 5 Entwicklern ist es unverzichtbar. Die Investition amortisiert sich typischerweise nach 3-4 Monaten.
Von Figma zum Code: Unser Prozess
Design Tokens als Foundation
Design Tokens sind die atomaren Einheiten Ihres Design Systems. Farben, Abstände, Schriftgrößen, Schatten, Border-Radii, alles als Variablen definiert.
Vorteile von Design Tokens:
- Single Source of Truth: Figma und Code nutzen dieselben Werte
- Theming: Light Mode, Dark Mode, White-Label mit einem Token-Wechsel
- Konsistenz: Kein Entwickler erfindet Farben oder Abstände. Alles kommt aus dem Token-Set
- Automatisierung: Token-Änderungen in Figma propagieren automatisch in den Code
Unsere Token-Architektur
tokens/
├── global/
│ ├── colors.json # Basis-Palette (blue-500, gray-100, etc.)
│ ├── spacing.json # 4px Grid (xs, sm, md, lg, xl)
│ ├── typography.json # Font Families, Sizes, Weights
│ ├── shadows.json # Elevation System
│ └── radii.json # Border Radii
├── semantic/
│ ├── colors.json # primary, secondary, success, error, etc.
│ ├── spacing.json # component-padding, page-margin, etc.
│ └── typography.json # heading-1, body-text, caption, etc.
└── component/
├── button.json # Button-spezifische Tokens
├── input.json # Input-spezifische Tokens
└── card.json # Card-spezifische Tokens
Drei Ebenen: Global (Rohwerte) → Semantic (Bedeutung) → Component (Kontext). Eine Änderung auf Global-Ebene propagiert durch alle Ebenen.
Figma-Integration
Wir synchronisieren Figma und Code bidirektional:
- Designer definiert Tokens als Figma Variables
- Token Studio exportiert Tokens als JSON
- Style Dictionary transformiert Tokens in CSS Custom Properties und Tailwind Config
- CI/CD deployed Token-Änderungen automatisch
- Storybook zeigt die aktuelle Token-Dokumentation
Component Library Architektur
Headless Components mit Radix UI
Wir trennen Verhalten von Styling. Radix UI liefert zugängliche, keyboard-navigierbare, screen-reader-freundliche Primitives. Wir stylen sie mit Tailwind CSS.
Warum Headless?
- Accessibility eingebaut: WAI-ARIA konform ohne manuelle Implementierung
- Keyboard Navigation: Tab, Enter, Escape, Arrow Keys, alles funktioniert
- Styling-Freiheit: Kein Überschreiben von Framework-Styles nötig
- Composable: Kleinere Primitives lassen sich zu komplexen Komponenten zusammenbauen
Komponenten-Kategorien
| Kategorie | Beispiele | Komplexität |
|---|---|---|
| Primitives | Button, Badge, Avatar, Separator | Niedrig |
| Form Controls | Input, Select, Checkbox, Radio, Switch, DatePicker | Mittel |
| Feedback | Toast, Alert, Dialog, Popover, Tooltip | Mittel |
| Navigation | Tabs, Breadcrumbs, Sidebar, CommandPalette | Mittel |
| Data Display | Table, DataGrid, Chart, KPI Card | Hoch |
| Layout | Stack, Grid, Container, Divider | Niedrig |
| Composite | FileUpload, SearchWithFilters, UserCard | Hoch |
Varianten-System
Jede Komponente unterstützt konsistente Varianten:
- Size:
sm,md,lg(manche auchxsundxl) - Variant:
default,outline,ghost,destructive - State:
default,hover,active,focus,disabled,loading - Color: Semantische Farben aus den Design Tokens
Wir nutzen CVA (Class Variance Authority) oder Tailwind Variants für die Varianten-Implementierung. Das garantiert typsichere Varianten mit TypeScript Autocomplete.
Storybook: Die lebende Dokumentation
Jede Komponente wird in Storybook dokumentiert. Storybook ist die interaktive Bibliothek die Designer, Entwickler und Product Owner nutzen um Komponenten zu finden, zu verstehen und zu testen.
Was jede Story enthält
- Alle Varianten: Jede Size, jeder Variant, jeder State in einer Übersicht
- Interactive Controls: Props live ändern und das Ergebnis sehen
- Code Snippets: Copy-paste-fertiger Code für jede Variante
- Accessibility Checks: Automatische a11y-Tests pro Story
- Responsive Preview: Mobile, Tablet, Desktop in einem Klick
- Design Tokens: Welche Tokens die Komponente verwendet
Chromatic für Visual Regression Testing
Jeder PR wird automatisch auf visuelle Veränderungen geprüft:
- Chromatic rendert jede Story als Screenshot
- Vergleich mit der vorherigen Version (Pixel-für-Pixel)
- Unbeabsichtigte Änderungen werden im PR als Review markiert
- Designer können visuelle Änderungen in Chromatic approven
Ergebnis: Kein CSS-Change bricht versehentlich eine Komponente in einem anderen Teil der App.
Tailwind CSS vs CSS-in-JS: Unsere Entscheidung
Wir haben jahrelang Styled Components und Emotion genutzt. Seit 2022 setzen wir ausschließlich auf Tailwind CSS. Hier ist warum:
Der Vergleich
| Kriterium | Tailwind CSS | CSS-in-JS (Styled Components) |
|---|---|---|
| Performance | Zero Runtime | Runtime-Overhead (Bundle + Rendering) |
| Bundle Size | ~10KB (Purged) | 15-30KB Library + generierte Styles |
| Server Components | Kompatibel | Nicht kompatibel (Client-only) |
| Developer Experience | Utility-Klassen im JSX | Separate Styled-Dateien |
| Design Tokens | tailwind.config.ts | Theme Provider |
| Dark Mode | dark: Prefix | Theme-Wechsel im Provider |
| Responsive | sm:, md:, lg: | Media Queries in JS |
| Co-Location | Styles direkt an der Komponente | Separate Dateien oder Template Literals |
| Onboarding | 1-2 Tage Eingewöhnung | Sofort verständlich |
| IDE Support | Tailwind IntelliSense (exzellent) | Weniger IDE-Support |
| Tree-Shaking | Automatisch (nur genutzte Klassen) | Nicht möglich |
Warum Tailwind gewinnt: Performance (Zero Runtime), Server Component Compatibility, und schnellere Entwicklung nach der Eingewöhnungsphase. Der einzige Nachteil, lange Klassennamen, wird durch CVA und Component-Abstraktion gelöst.
Warum nicht beide?
Einige Teams kombinieren Tailwind mit CSS-in-JS. Wir raten davon ab. Zwei Styling-Systeme bedeuten zwei mentale Modelle, inkonsistente Patterns und doppelten Bundle-Overhead. Wählen Sie eines und bleiben Sie dabei.
Accessibility: Kein Afterthought
Accessibility (a11y) ist kein Feature das man am Ende einbaut. Es ist ein Qualitätsmerkmal das von Anfang an in jeder Komponente stecken muss.
WCAG 2.2 Level AA
Jede Komponente die wir bauen erfüllt WCAG 2.2 Level AA:
- Perceivable: Ausreichende Kontrastverhältnisse (4.5:1 für Text, 3:1 für UI), Alt-Texte, Beschriftungen
- Operable: Vollständige Keyboard-Navigation, keine Zeitlimits, Skip-Links
- Understandable: Konsistente Navigation, klare Fehlermeldungen, vorhersagbares Verhalten
- Robust: Semantisches HTML, korrekte ARIA-Attribute, Screen-Reader getestet
Automatisierte a11y-Tests
- Storybook a11y Addon: Axe-Core Tests für jede Story
- Playwright a11y: Automatisierte Accessibility-Tests in der CI/CD Pipeline
- Lighthouse: Accessibility-Score als Quality Gate (Minimum 95)
- Screen-Reader Testing: Manuelles Testing mit VoiceOver (macOS) und NVDA (Windows)
Fokus-Management
Fokus-Management ist der am häufigsten übersehene Accessibility-Aspekt:
- Focus Trap: In Dialogen und Modals bleibt der Fokus innerhalb
- Focus Restore: Nach dem Schließen eines Modals kehrt der Fokus zum Trigger zurück
- Focus Visible:
:focus-visiblestatt:focusfür Keyboard-only Styling - Skip to Content: Überspringt Navigation für Screen-Reader und Keyboard-Nutzer
- Logical Tab Order: Die Tab-Reihenfolge folgt dem visuellen Layout
Design System für mehrere Produkte
Wenn Ihr Unternehmen mehrere Produkte hat, ist ein geteiltes Design System der Schlüssel zu Konsistenz und Effizienz.
Multi-Brand Architektur
packages/
├── design-tokens/
│ ├── brand-a/ # Tokens für Produkt A
│ ├── brand-b/ # Tokens für Produkt B
│ └── shared/ # Geteilte Tokens (Spacing, Typography Scale)
├── ui-primitives/ # Headless Components (brand-agnostisch)
├── ui-brand-a/ # Brand A styled Components
└── ui-brand-b/ # Brand B styled Components
- Primitives: Verhalten ist identisch über alle Brands
- Tokens: Jede Brand hat eigene Farben, Schriften, Radii
- Themed Components: Derselbe Button, unterschiedliches Aussehen
White-Label Support
Für SaaS-Produkte die von Kunden gebrandet werden:
- CSS Custom Properties: Runtime-Theming ohne Rebuild
- Token Override API: Kunden laden ihre Tokens, das System passt sich an
- Logo, Favicon, Fonts: Konfigurierbar pro Mandant
- Preview: Kunden sehen ihre Anpassungen live vor dem Speichern
Design System Maintenance
Ein Design System ist nie fertig. Es wächst mit Ihrem Produkt.
Governance
- Contribution Guidelines: Wie wird eine neue Komponente vorgeschlagen und eingebaut?
- Breaking Change Policy: Semantic Versioning, Migration Guides, Deprecation Warnings
- Design Review: Jede neue Komponente wird von Design und Engineering reviewed
- Usage Analytics: Welche Komponenten werden wie oft genutzt? Welche nicht?
Versionierung und Distribution
- NPM Package: Das Design System wird als internes NPM-Paket published
- Semantic Versioning: Major für Breaking Changes, Minor für neue Komponenten, Patch für Fixes
- Changelog: Automatisch generiert aus Conventional Commits
- Migration Guides: Für jede Major-Version eine Schritt-für-Schritt-Anleitung
So arbeiten wir an Ihrem Design System
1. Audit des Ist-Zustands
Wir analysieren Ihre bestehende UI: wie viele verschiedene Button-Stile gibt es? Wie viele Farben? Wie viele Schriftgrößen? Das Ergebnis ist eine Component Inventory die zeigt wo Inkonsistenzen liegen.
2. Token-Definition
Gemeinsam mit Ihrem Design-Team definieren wir das Token-System: Farben, Spacing, Typography, Shadows, Radii. In Figma und als JSON.
3. Core Components
Die ersten 15-20 Komponenten die 80% der UI abdecken: Button, Input, Select, Checkbox, Radio, Switch, Dialog, Toast, Card, Table, Badge, Avatar, Tabs, Sidebar, Form.
4. Storybook & Dokumentation
Jede Komponente mit interaktiver Dokumentation, Code-Beispielen und a11y-Tests in Storybook.
Unser Prozess im Detail: Development as a Subscription
5. Integration
Die Component Library wird in Ihre bestehenden React oder Next.js Projekte integriert. Schrittweise Migration von Custom-Styles zu Design-System Komponenten.
6. Maintenance
Neue Komponenten bei Bedarf, Token-Updates bei Redesign, Dependency-Updates, Storybook-Aktualisierungen. Alles in Ihrer Subscription enthalten.
Häufige Fragen zum Design System
Ab welcher Teamgröße lohnt sich ein Design System?
Ab 3 Entwicklern die am selben Produkt arbeiten. Darunter reicht eine gut organisierte Komponentenbibliothek ohne die volle Design-System-Infrastruktur (Tokens, Storybook, Chromatic).
Wie lange dauert der Aufbau eines Design Systems?
Die Core Components (15-20 Stück) dauern 4-6 Wochen. Ein vollständiges Design System mit 50+ Komponenten, Dark Mode, Responsive, und Accessibility: 3-4 Monate. Danach wächst es kontinuierlich mit Ihrem Produkt.
Können wir ein bestehendes Design System nutzen (Shadcn, MUI)?
Ja, aber mit Bedacht. Wir empfehlen shadcn/ui als Ausgangspunkt: es ist Copy-Paste (kein Dependency-Lock), Tailwind-basiert und nutzt Radix UI Primitives. MUI empfehlen wir nicht, zu viel Framework-Vendor-Lock-in und Runtime-Overhead.
Design System vs Component Library, was ist der Unterschied?
Eine Component Library ist Code. Ein Design System ist Code plus Design Tokens, Design Principles, Usage Guidelines, Contribution Workflow und Governance. Die Library ist ein Teil des Systems, nicht das Ganze.
Was kostet ein Design System?
Der Aufbau: 2-4 Monate Subscription (ab Scale 150 empfohlen). Die Maintenance: ein kleiner Teil Ihrer laufenden Subscription. Der ROI: ab Monat 3-4 positiv. Vergleich der Modelle: Freelancer vs Agentur vs Subscription.
Brauche ich einen Designer oder liefern Sie das Design mit?
Idealerweise haben Sie einen Designer der die Figma-Seite pflegt. Wir übersetzen Design in Code. Wenn Sie keinen Designer haben, können wir mit etablierten Design-Systemen (wie Shadcn oder eigenen Tokens) arbeiten, aber die besten Ergebnisse entstehen in der Zusammenarbeit von Design und Engineering.
Verwandte Leistungen
- React Entwicklung: Die Apps die Ihr Design System nutzen
- Next.js Entwicklung: Server Components mit Design System
- TypeScript: Typsichere Komponenten-Props und Varianten
- Mobile Entwicklung: Konsistentes Design von Web bis Mobile
- Cloud & DevOps: CI/CD für Storybook und Chromatic
Kostenrechner
Vergleich: proreactware vs. vergleichbare interne Kapazität
3 Items gleichzeitig
~2.5 Entwickler intern
€30.000
pro Monat (Gehalt + AG + Tools + Büro)
Advanced 300
€9.995
pro Monat (fix, kein Recruiting/Onboarding)
Ersparnis: €20.005/Monat (67%)
€240.060/Jahr, plus eingesparte Recruiting-Kosten (~€15.000 pro Stelle)
Kalkulation basiert auf Ø €12.000 Gesamtkosten/Monat pro Senior-Entwickler in Deutschland (€8.000 Gehalt + ~21% AG-Anteile + Tools + anteilig Recruiting/Onboarding/Büro). Tatsaechliche Kosten variieren je nach Standort und Seniorität.