Zum Hauptinhalt springen

Design-Systeme im Maßstab

Erfahren Sie, wie Sie ein Design-System aufbauen und pflegen, das mit Ihrer Organisation wächst und Ihr Produkt konsistent hält.

Marcus Weber Marcus Weber
10 Min. Lesezeit
Illustration: Farb-Tokens, eine Schriftgrößenskala und Abstandsstufen, die in eine Reihe von Komponenten einfließen

Ein Designsystem ist mehr als eine Komponentenbibliothek. Es ist eine gemeinsame Sprache zwischen Design und Entwicklung, die Konsistenz sicherstellt, die Entwicklung beschleunigt und die Qualität über ein gesamtes Produkt-Ökosystem hinweg sichert.

Dieser Unterschied zählt vor allem dann, wenn das System mehr als einem Team dienen muss. Eine Komponentenbibliothek kann ein begeisterter Entwickler in wenigen Wochen bauen. Ein Designsystem, auf das sich Dutzende Menschen verlassen, gleicht eher einem internen Produkt: Es hat Nutzer, eine Roadmap, Releases, Support-Anfragen und einen Ruf, den es zu schützen gilt. Dieser Artikel zeigt, was sich ändert, wenn Sie für diesen Maßstab bauen – von der Token-Architektur über Governance bis zur Versionierung.

Warum Designsysteme wichtig sind

Wenn Teams über eine Handvoll Entwickler hinauswachsen, wird es schwierig, visuelle und funktionale Konsistenz zu wahren. Ohne Designsystem legt jedes Team die Markenrichtlinien anders aus, was zu einer zersplitterten Nutzererfahrung führt. Ein gut gebautes Designsystem beseitigt dieses Problem, indem es eine einzige verlässliche Quelle bietet.

Der weniger sichtbare Vorteil ist die Wiederverwendung von Entscheidungen. Jedes Mal, wenn ein Team seinen eigenen Datumswähler baut, entscheidet es Tastaturverhalten, Fehlerzustände, Lokalisierung und Fokusbehandlung neu – und liegt meist bei einem davon falsch. Eine gemeinsame Komponente hält diese Entscheidungen einmalig fest. Produktteams können ihre Zeit dann in die Teile der Oberfläche stecken, die tatsächlich spezifisch für ihr Produkt sind.

Ein Designsystem verschafft Ihnen außerdem Hebelwirkung. Beheben Sie einen Kontrastfehler in einem gemeinsamen Token, und jede Oberfläche, die ihn nutzt, ist mit dem nächsten Release korrigiert. Ohne das System ist dieselbe Korrektur ein Suchen-und-Ersetzen über mehrere Repositorys, für dessen Koordination niemand Zeit hat.

Kernkomponenten

Jedes wirksame Designsystem beginnt mit Design Tokens – den atomaren Werten, die Farben, Abstände, Typografie und Bewegung definieren. Diese Tokens fließen in Primitives wie Buttons, Eingabefelder und Textelemente ein, die sich wiederum zu komplexeren Mustern wie Karten, Modals und Navigationsleisten zusammensetzen.

Tokens in Ebenen aufbauen

Flache Token-Listen skalieren nicht. Eine verbreitete und wirksame Struktur hat drei Ebenen:

  1. Referenz-Tokens enthalten Rohwerte ohne zugeordnete Bedeutung: blue-600, space-4, radius-md.
  2. Semantische Tokens beschreiben einen Zweck: color-surface, color-text-muted, color-border-focus, color-danger.
  3. Komponenten-Tokens decken die wenigen Stellen ab, an denen eine Komponente eine eigene Stellschraube braucht: button-padding-inline, card-radius.

Komponenten sollten semantische oder Komponenten-Tokens verwenden, niemals direkt Referenz-Tokens. Genau diese eine Regel macht Theming möglich: Dark Mode, ein Hochkontrastmodus oder eine White-Label-Marke werden zu einer anderen Zuordnung von semantischen zu Referenzwerten, ohne dass sich Komponenten ändern.

:root {
  --color-surface: var(--gray-50);
  --color-text: var(--gray-900);
  --color-border-focus: var(--blue-600);
}

[data-theme="dark"] {
  --color-surface: var(--gray-950);
  --color-text: var(--gray-100);
  --color-border-focus: var(--blue-400);
}

Speichern Sie Tokens in einem plattformneutralen Format und erzeugen Sie CSS Custom Properties, native Plattformwerte und Variablen für Designwerkzeuge aus dieser einen Quelle. Die W3C Design Tokens Community Group hat genau zu diesem Zweck ein stabiles gemeinsames JSON-Format veröffentlicht (die erste stabile Version erschien im Oktober 2025), und wer früh ein strukturiertes Format einführt, kann später leichter das Werkzeug wechseln.

Primitives mit expliziten Varianten bauen

Bei den Primitives wird Konsistenz gewonnen oder verspielt. Geben Sie jedem einen kleinen, benannten Satz an Varianten und Größen und machen Sie die Zuordnung von Props zu Styles zu einer reinen Funktion, die sich ohne Rendern testen lässt:

import { cva } from 'class-variance-authority';

const button = cva('inline-flex items-center gap-2 rounded-md font-medium', {
  variants: {
    intent: { primary: '...', secondary: '...', danger: '...' },
    size: { sm: 'h-8 px-3 text-sm', md: 'h-10 px-4', lg: 'h-12 px-5 text-lg' },
  },
  defaultVariants: { intent: 'primary', size: 'md' },
});

Widerstehen Sie der Versuchung, für jede Anfrage eine Variante hinzuzufügen. Jede neue Option ist dauerhafte API-Oberfläche, die dokumentiert, getestet, mit Themes versehen und unterstützt werden muss. Wenn ein Team eine neue Variante wünscht, fragen Sie zuerst, welches Problem es lösen möchte; oft deckt eine bestehende Variante oder eine Komposition es bereits ab.

Jede Komponente hat Zustände

Eine Komponentenspezifikation ist erst vollständig, wenn sie jeden Zustand abdeckt, in dem sich die Komponente befinden kann: Standard, Hover, Fokus, aktiv, deaktiviert, Laden, leer, Fehler sowie alle ausgewählten oder aufgeklappten Zustände. Datenintensive Komponenten brauchen insbesondere gestaltete Leer-, Lade- und Fehlerzustände, denn genau diese Zustände lassen Produktteams unter Termindruck am häufigsten weg. Stellt das System sie bereit, bekommt jedes Produkt sie.

Dokumentation ist Teil der Komponente

Dokumentation ist ebenso wichtig. Jede Komponente sollte Nutzungsrichtlinien, Hinweise zur Barrierefreiheit und Codebeispiele enthalten. Werkzeuge wie Storybook oder die Container API von Astro, mit der sich Komponenten isoliert rendern lassen, machen es einfach, Komponenten für sich allein zu entwickeln und zu präsentieren.

Gute Komponentendokumentation beantwortet die Fragen, die Menschen tatsächlich stellen:

  • Wann sollte ich diese Komponente verwenden und wann etwas anderes? Ein kurzer Abschnitt „So ja, so nicht“ verhindert mehr Fehlgebrauch als jede Lint-Regel.
  • Welche Props gibt es? Erzeugen Sie die Referenz aus den Typdefinitionen, damit sie nicht veralten kann.
  • Wie verhält sie sich für Tastatur- und Screenreader-Nutzer? Dokumentieren Sie Fokusreihenfolge, Tastenbelegungen und die ARIA-Attribute, die die Komponente verwaltet.
  • Wie sieht jeder Zustand aus? Rendern Sie die Zustände, statt sie zu beschreiben.

Skalierungsstrategien

Wenn Ihre Organisation wächst, sollten Sie ein föderiertes Modell in Betracht ziehen, bei dem einzelne Teams zum Designsystem beitragen. Etablieren Sie einen klaren Beitragsprozess mit Design-Reviews und automatisierten Tests, um die Qualität zu sichern. Versionieren Sie Ihre Designsystem-Pakete sorgfältig, um inkompatible Änderungen in den nutzenden Anwendungen zu vermeiden.

Das Verantwortungsmodell bewusst wählen

Es gibt drei grundlegende Modelle, und die meisten Organisationen wechseln im Lauf der Zeit zwischen ihnen:

  • Zentralisiert. Ein eigenes Team baut alles und ist für alles verantwortlich. Qualität und Konsistenz sind hoch, doch das Team wird mit wachsender Nachfrage zum Engpass.
  • Föderiert. Designer und Entwickler aus den Produktteams tragen bei, während ein kleines Kernteam Standards setzt und prüft. Das skaliert besser, erfordert aber strenge Review-Disziplin.
  • Hybrid. Ein Kernteam verantwortet Grundlagen und Primitives; Produktteams verantworten übergeordnete Muster, die den Regeln des Systems folgen. In der Praxis landen viele ausgereifte Systeme hier.

Wofür Sie sich auch entscheiden, halten Sie es schriftlich fest. Unklarheit darüber, wem eine Komponente gehört, ist der Weg zu drei leicht unterschiedlichen Modals.

Beiträge zu einem definierten Weg machen

Ein Beitragsprozess, den Menschen tatsächlich nutzen, ist kurz und vorhersehbar:

  1. Vorschlagen. Eröffnen Sie ein Issue, das das Problem, die Produkte, die es betrifft, und bereits geprüfte bestehende Komponenten beschreibt.
  2. Sich auf die Form einigen. Ein kurzes Design- und API-Review, bevor Code geschrieben wird, erspart die teuerste Art von Nacharbeit.
  3. Nach Standard bauen. Nur Tokens, alle Zustände, Barrierefreiheitsprüfungen, Tests und Dokumentation.
  4. Prüfen und veröffentlichen. Das Kernteam prüft anhand einer Checkliste und liefert den Beitrag mit dem nächsten Release aus.

Veröffentlichen Sie die Checkliste. Beitragende sollten im Voraus genau wissen, was „fertig“ bedeutet, statt es erst aus Review-Kommentaren zu erfahren.

Sorgfältig versionieren und veröffentlichen

Behandeln Sie die Pakete des Systems wie jede öffentliche Bibliothek und halten Sie sich strikt an semantische Versionierung. Ein geänderter Prop-Name, eine entfernte Variante oder ein Token-Wert, der das Layout verschiebt, ist eine inkompatible Änderung, selbst wenn die TypeScript-Typen weiterhin kompilieren.

  • Liefern Sie lieber kleine, häufige Releases als große, seltene; sie lassen sich leichter übernehmen und leichter zurückrollen.
  • Markieren Sie als veraltet, bevor Sie entfernen. Halten Sie die alte API mindestens eine Major-Version lang mit einer Konsolenwarnung und einem dokumentierten Migrationspfad funktionsfähig.
  • Stellen Sie nach Möglichkeit Codemods für mechanische Migrationen wie umbenannte Props bereit.
  • Pflegen Sie ein Changelog, das für die Nutzer geschrieben ist, keine Liste von Commit-Nachrichten.
/** @deprecated Verwenden Sie stattdessen `intent="danger"`. Entfällt in v5. */
destructive?: boolean;

Den Qualitätsanspruch automatisieren

In großem Maßstab können Sie sich nicht darauf verlassen, dass Reviewer alles finden. Verankern Sie den Standard in Werkzeugen:

  • Visuelle Regressionstests für jeden Komponentenzustand, damit eine unbeabsichtigte Änderung an einem gemeinsamen Token vor dem Release auffällt.
  • Automatisierte Barrierefreiheitsprüfungen in Komponententests, ergänzt durch regelmäßige manuelle Tests mit Tastatur und Screenreader.
  • Lint-Regeln, die rohe Farbwerte, fest codierte Abstände oder Importe veralteter Komponenten in nutzenden Anwendungen melden.
  • Kontrastprüfungen für Token-Paare, ausgeführt für jedes Theme, damit keine neue Palette mit unlesbaren Kombinationen ausgeliefert werden kann.

Die Verbreitung messen

Was Sie nicht sehen, können Sie nicht verbessern. Erfassen Sie, welche Produktoberflächen die Komponenten des Systems nutzen und welche lokale Entsprechungen, von welchen Versionen jede Anwendung abhängt und wie oft Teams Styles überschreiben. Ein statischer Scan der Import-Anweisungen über alle Repositorys liefert Ihnen den Großteil davon. Steigende Überschreibungszahlen sind ein frühes Signal dafür, dass das System einen Bedarf nicht erfüllt, und es lohnt sich, dem nachzugehen, bevor daraus ein Fork wird.

Die Menschen unterstützen, die es nutzen

Ein Designsystem steht und fällt damit, ob Produktteams sich dafür entscheiden, es zu nutzen, und das hängt stark davon ab, wie sich die Zusammenarbeit mit dem Team dahinter anfühlt. Betrachten Sie Support als Teil der Arbeit, nicht als Unterbrechung:

  • Betreiben Sie einen einzigen, gut sichtbaren Support-Kanal, in dem Fragen öffentlich beantwortet werden, damit die nächste Person mit derselben Frage die Antwort findet.
  • Bieten Sie regelmäßige Sprechstunden an, in die Teams laufende Entwürfe mitbringen und Rat einholen können, bevor sie etwas bauen, das das System bereits bietet.
  • Machen Sie aus wiederkehrenden Fragen Dokumentation. Wenn dieselbe Frage dreimal auftaucht, fehlt in der Dokumentation etwas.
  • Begleiten Sie die frühe Einführung. Für ein Team, das ein großes Produkt migriert, bewirkt ein für einen Sprint eingebundenes Mitglied des Kernteams oft mehr als jede Anleitung.
  • Veröffentlichen Sie die Roadmap. Teams warten weit bereitwilliger auf eine Komponente, wenn sie wissen, dass sie kommt und ungefähr wann.

Ansprechbar zu sein verschafft Ihnen außerdem bessere Informationen. Die Teams, die das System täglich nutzen, sagen Ihnen, wo es zu kurz greift – solange es einfach ist, Ihnen das mitzuteilen.

Häufige Fallstricke

Designsysteme im großen Maßstab scheitern meist auf vorhersehbare Weise:

  • Bauen, bevor man zuhört. Ein System, das losgelöst von den Produkten entworfen wird, denen es dienen soll, wird ignoriert. Beginnen Sie mit einer Bestandsaufnahme dessen, was Teams bereits gebaut haben, und standardisieren Sie die wiederkehrenden Muster.
  • Es als Projekt behandeln. Ein Designsystem hat keine Ziellinie. Ohne fortlaufende Finanzierung und Verantwortung verfällt es in dem Moment, in dem das Launch-Team weiterzieht.
  • Überkonfigurierbare Komponenten. Ein Button mit zwanzig Props ist ein Zeichen dafür, dass das System versucht, die lokale Komponente jedes Teams zugleich zu sein. Setzen Sie lieber auf Komposition.
  • Auseinanderdriften von Design und Code. Wenn Designdateien und programmierte Komponenten nicht übereinstimmen, vertrauen Menschen derjenigen Quelle, die sie zuerst sehen. Erzeugen Sie beide aus denselben Tokens und prüfen Sie sie gemeinsam.
  • Migrationskosten ignorieren. Jede inkompatible Änderung bedeutet Arbeit für jedes nutzende Team. Planen Sie sie ein, helfen Sie dabei und bündeln Sie sie.

Fazit

Die Investition in ein Designsystem zahlt sich langfristig aus. Teams liefern schneller, Designer verbringen weniger Zeit damit, Entscheidungen erneut zu treffen, und Nutzer erleben an jedem Berührungspunkt ein stimmiges Ganzes.

Um dorthin zu gelangen, kommt es im großen Maßstab weniger auf eine einzelne Komponente an als auf das System um die Komponenten herum: geschichtete Tokens, die Theming günstig machen, Primitives mit kleinen und expliziten APIs, Dokumentation, die echte Fragen beantwortet, ein Beitragsweg, dem Menschen folgen können, und Releases, die Rücksicht auf die Teams nehmen, die von Ihnen abhängen. Wenn diese Grundlagen stimmen, kann die Zahl der Komponenten wachsen, ohne dass die Qualität sinkt.

Diesen Artikel teilen
design-systems user-experience teamwork