Es gibt in jedem digitalen Produkt einen Moment, den kaum jemand gestaltet: die Sekunde nach dem Klick. Der Nutzer hat gedrückt, das System arbeitet, und auf dem Bildschirm passiert — irgendwas. Vielleicht ein Spinner. Vielleicht nichts. Vielleicht springt die halbe Seite um, wenn die Daten endlich da sind.
Diese Sekunde ist kein technischer Randfall. Sie ist der Teil deines Interfaces, den Menschen am intensivsten wahrnehmen, weil sie in genau diesem Moment nichts anderes zu tun haben als hinzusehen. Und sie ist der Teil, der in Design-Dateien fast immer fehlt: Wir gestalten den vollen Zustand, gelegentlich den leeren — aber den Zustand dazwischen liefern wir als Kommentar an die Entwicklung aus. „Hier kommt noch ein Ladeindikator hin."
Gefühlte Performance ist der Unterschied zwischen der Zeit, die eine Aktion tatsächlich dauert, und der Zeit, die sie sich anfühlt. Dieser Unterschied ist gestaltbar — und zwar erheblich. Ein Produkt, das 1,8 Sekunden braucht und währenddessen zeigt, woran es arbeitet, wirkt schneller als eines, das nach 1,2 Sekunden wortlos umspringt. In diesem Artikel geht es darum, wie du diese Zeit gestaltest: welche Zustände es gibt, wann welcher richtig ist, und warum der Ladezustand genauso ins Design System gehört wie der Button.

In den meisten Figma-Dateien existieren zwei Versionen eines Screens: leer und gefüllt. In der Realität existieren mindestens fünf: leer, ladend, teilweise geladen, gefüllt, fehlerhaft. Drei davon fallen regelmäßig unter den Tisch — und werden dann von der Entwicklung improvisiert, weil irgendetwas ja auf dem Bildschirm stehen muss.
Das Ergebnis kennst du: Ein Spinner mitten im leeren Viewport, drei Sekunden lang, und danach ein Layout, das sich noch zweimal neu sortiert, während Bilder nachladen. Technisch ist alles korrekt. Gestalterisch ist es ein Blindflug.
Der Denkfehler liegt in der Annahme, Ladezeit sei ein Performance-Problem, das die Entwicklung löst, und Design komme danach. Tatsächlich ist es umgekehrt: Performance-Arbeit hat harte Grenzen — irgendwann ist die Antwortzeit des Servers das, was sie ist. Gefühlte Performance hat diese Grenze nicht. Sie hängt daran, ob Menschen verstehen, was gerade passiert.
- Objektive Dauer: wie lange die Antwort braucht. Messbar, begrenzt optimierbar, teuer.
- Wahrgenommene Dauer: wie lange es sich anfühlt. Hängt an Feedback, Erwartung und Beschäftigung — und ist mit Designmitteln erstaunlich weit dehnbar.
- Toleranz: wie lange jemand bereit ist zu warten. Steigt, wenn der Vorgang erkennbar wertvoll ist, und fällt ins Bodenlose, wenn unklar bleibt, ob überhaupt etwas passiert.
Faustregel: Ungewisses Warten fühlt sich länger an als gewisses. Die wichtigste Information in einem Ladezustand ist deshalb nicht „wie lange noch", sondern „es läuft, und zwar dieses hier".
Dazu kommt ein zweiter Effekt, der oft als reines Technikthema abgelegt wird: das Umspringen des Layouts. Wenn Inhalte nachladen und dabei alles nach unten schieben, entsteht nicht nur ein schlechter Messwert, sondern ein handfestes Bedienproblem — der Knopf, auf den jemand gerade zielt, ist beim Klick woanders. Wer entscheidet, wie viel Platz ein Element im Ladezustand einnimmt, entscheidet damit über die Bedienbarkeit während des Ladens. Diese Entscheidung trifft niemand außer dem Design.
Das ist dieselbe Logik, die schon bei leeren Zuständen greift: Ein Bildschirm ohne Inhalt ist kein Loch im Produkt, sondern eine Gelegenheit, etwas zu erklären. Beim Ladezustand ist es genauso — nur mit noch mehr Aufmerksamkeit auf deiner Seite.
Die Wahrnehmungsforschung liefert hier ungewöhnlich klare Kanten. Drei Zeitschwellen strukturieren praktisch jede Entscheidung über Ladezustände:

- Bis etwa 100 Millisekunden: Die Reaktion wirkt unmittelbar. Was hier passiert, wird als direkte Folge der eigenen Handlung erlebt — Hover, Toggle, Tastendruck. Hier gehört kein Ladeindikator hin. Ein Spinner, der nach 80 Millisekunden aufblitzt und wieder verschwindet, erzeugt Unruhe, wo vorher Ruhe war.
- Bis etwa eine Sekunde: Der Gedankenfluss reißt noch nicht ab, aber die Verzögerung ist spürbar. Hier reicht meist eine dezente Zustandsänderung — der Button wird inaktiv, das Element bekommt eine leichte Transparenz. Kein Overlay, keine Blockade.
- Ab etwa zehn Sekunden: Die Aufmerksamkeit wandert ab. Ab hier brauchst du einen echten Fortschritt, eine Aussage über die Dauer und einen Weg heraus. Wer ohne diese drei Dinge über zehn Sekunden geht, verliert Menschen — nicht weil sie ungeduldig sind, sondern weil sie berechtigterweise annehmen, dass etwas kaputt ist.
Praktisch wichtiger als die exakten Zahlen ist die daraus folgende Regel: Ladezustände brauchen eine Verzögerung, bevor sie erscheinen. Wenn du einen Skeleton sofort bei jeder Anfrage einblendest, flackert er bei schnellen Antworten — und dieses Flackern kostet mehr Vertrauen, als der Indikator einbringt. Ein Delay von 200 bis 400 Millisekunden, bevor der Ladezustand überhaupt gezeigt wird, löst das. Antwortet das System vorher, sieht niemand einen Indikator und es fühlt sich sofort an.
Die Gegenprobe gehört dazu: Wenn ein Ladezustand erst einmal sichtbar ist, sollte er auch eine Mindestdauer stehenbleiben — sonst tauschst du das Flackern nur gegen ein Zucken.
Zwei Zahlen, die in jedem Ticket stehen sollten: ab wann der Ladezustand erscheint (Delay) und wie lange er mindestens bleibt (Mindeststandzeit). Ohne sie entscheidet der Zufall der Netzwerklatenz, wie dein Produkt sich anfühlt.
Die drei gängigen Antworten auf Wartezeit sind nicht austauschbar. Sie beantworten unterschiedliche Fragen.

- Der Spinner sagt: „Etwas passiert." Mehr nicht. Er ist richtig, wenn du über Struktur und Dauer nichts aussagen kannst — bei einem Login etwa, oder wenn das Ergebnis eine völlig andere Ansicht ist. Er ist falsch als Dauerlösung für Inhaltsflächen, weil er den Bildschirm leer lässt und das Auge nichts vorbereiten kann.
- Der Skeleton sagt: „Etwas passiert, und es wird ungefähr so aussehen." Er zeigt die künftige Struktur als graue Platzhalter. Sein echter Vorteil ist nicht die Optik, sondern das ausbleibende Umspringen: Wenn der Platz schon reserviert ist, ruckelt beim Eintreffen der Daten nichts mehr. Richtig ist er überall dort, wo die Struktur vorhersehbar ist — Listen, Karten-Raster, Detailansichten, Datentabellen.
- Gar nichts ist die richtige Antwort unterhalb der 100-Millisekunden-Schwelle und bei Hintergrundvorgängen, die niemanden blockieren. Ein automatischer Speichervorgang braucht keinen Spinner. Er braucht höchstens eine kleine, ruhige Statusangabe, wenn er fertig ist.
Bei Skeletons gibt es zwei Fehler, die ich regelmäßig sehe. Der erste: Der Skeleton sieht dem Endzustand nicht ähnlich genug — drei gleich lange graue Balken, wo später eine Überschrift, zwei Textzeilen und ein Preis stehen. Dann springt beim Laden doch wieder alles um, und der Skeleton hat nur Zeit gekostet. Der zweite: Der Skeleton ist zu detailliert und animiert zu stark. Ein Platzhalter, der schimmert, pulsiert und gleichzeitig einfliegt, zieht mehr Aufmerksamkeit auf sich als der Inhalt danach.
Test für jeden Skeleton: Screenshot vom Ladezustand und vom fertigen Zustand übereinanderlegen. Wenn sich Blockgrenzen und Höhen nicht decken, ist der Skeleton nicht fertig.
Es gibt eine Nebenwirkung, die man kennen sollte: Ein gut gemachter Ladezustand nimmt den Druck aus der Performance-Diskussion. Wenn das Warten hübsch aussieht, fällt weniger auf, dass drei Sekunden gewartet wird — und aus „wir müssen die Abfrage optimieren" wird „läuft doch". Gefühlte Performance ersetzt keine echte. Sie kauft dir Zeit und Wohlwollen, und beides solltest du investieren, statt es auszugeben.
Der praktische Umgang damit ist simpel: Halte die tatsächlichen Antwortzeiten sichtbar, auch wenn der Ladezustand sie kaschiert. Wenn ein Abruf dauerhaft über einer Sekunde liegt, ist das ein Thema fürs Backlog — unabhängig davon, wie elegant der Platzhalter aussieht.
Ein dritter Weg, der oft übersehen wird: gestaffeltes Laden. Statt auf alles zu warten, zeigst du zuerst das, was sofort da ist — Überschrift, Navigation, Filterleiste — und lädst die teuren Teile nach. Das fühlt sich fast immer schneller an als ein sauberer Gesamtladezustand, weil der erste sichtbare Inhalt früher kommt. Voraussetzung ist, dass die nachrückenden Teile ihren Platz bereits reserviert haben.
Die radikalste Form gefühlter Performance ist, gar nicht erst zu warten. Bei Optimistic UI zeigt das Interface das Ergebnis einer Aktion sofort an — und korrigiert sich nur, falls der Server widerspricht.

Das Herz-Symbol, das sofort füllt. Die Aufgabe, die sofort abgehakt ist. Die Nachricht, die sofort in der Liste steht. Technisch läuft die Anfrage im Hintergrund weiter; gefühlt ist die Aktion in null Millisekunden erledigt.
Das funktioniert gut — unter drei Bedingungen:
- Die Aktion muss fast immer gelingen. Optimistisch ist nur sinnvoll, wenn der Fehlerfall die Ausnahme ist. Bei einer Aktion, die in einem Fünftel der Fälle scheitert, baust du eine Lügenmaschine.
- Der Rückweg muss gestaltet sein. Was passiert, wenn der Server ablehnt? Der Zustand springt zurück — und das muss erklärt werden, sichtbar und an der Stelle, an der die Aktion stattfand. Ein stiller Rücksprung ist schlimmer als drei Sekunden Warten.
- Die Konsequenz muss reversibel sein. „Gelesen" markieren: gern optimistisch. Eine Zahlung auslösen, ein Konto löschen, ein Angebot verschicken: niemals. Je schwerer die Aktion zurückzunehmen ist, desto mehr Recht hat der ehrliche Ladezustand.
Der dritte Punkt ist der, an dem die meisten Diskussionen im Team hängenbleiben, und er lohnt eine klare Haltung: Optimistic UI verschiebt Risiko vom Server zum Nutzer. Das Produkt behauptet etwas, das noch nicht stimmt, und wettet darauf, dass es gleich stimmen wird. Bei einem Herz-Symbol ist der Einsatz null. Bei allem, was Geld, Termine oder verbindliche Daten betrifft, ist er hoch — und dann ist eine ehrliche Sekunde Wartezeit das bessere Design.
Zwischen „sofort tun" und „warten" liegt ein häufig nützlicher Mittelweg: der schwebende Zustand. Die Zeile erscheint sofort, aber sichtbar blasser oder mit einem kleinen Statuspunkt, bis die Bestätigung da ist. Der Nutzer bekommt die unmittelbare Reaktion und trotzdem eine ehrliche Auskunft über den Stand der Dinge. Das ist häufig die bessere Wahl in Produkten, in denen Daten verbindlich sind — in einer Fachanwendung etwa, in der Eingaben dokumentiert werden, wäre ein Häkchen, das später stillschweigend verschwindet, ein echtes Problem.
Alles über zehn Sekunden ist eine andere Disziplin. Export, Upload, Import, Rechenlauf, Generierung: Hier reicht kein Indikator mehr, hier brauchst du eine Dramaturgie.
- Fortschritt statt Bewegung. Ein Balken, der einen echten Anteil abbildet, schlägt jede Endlosanimation. Wenn du den Anteil nicht kennst, zeig stattdessen die Etappe: „Datei wird gelesen", „Datensätze werden geprüft", „Ergebnis wird aufgebaut". Eine Abfolge benannter Schritte macht ungewisses Warten zu gewissem.
- Ehrlich bleiben. Ein Balken, der bei 90 Prozent stehenbleibt, verbrennt mehr Vertrauen, als er vorher aufgebaut hat. Lieber langsam und wahr als schnell und falsch. Wenn der letzte Schritt lange dauert, sag das.
- Nicht blockieren, wenn es nicht sein muss. Viele lange Vorgänge brauchen die volle Aufmerksamkeit gar nicht. Ein Export darf im Hintergrund laufen, während weitergearbeitet wird — mit einer dezenten Anzeige, die den Stand zeigt, und einer Benachrichtigung am Ende. Wie diese Benachrichtigung aussehen sollte, ohne zu nerven, ist ein eigenes Thema.
- Einen Ausgang anbieten. Abbrechen muss möglich sein, und zwar sichtbar. Wer keinen Abbruch findet, schließt den Tab — und weiß danach nicht, ob der Vorgang trotzdem gelaufen ist.
Bei Uploads kommt ein eigener Fallstrick dazu: Der Fortschrittsbalken zeigt oft nur, wie viel gesendet wurde — die Verarbeitung auf dem Server danach ist unsichtbar. Für den Nutzer sieht das so aus, als hinge das Produkt bei 100 Prozent fest. Die Lösung ist keine Technik, sondern Beschriftung: Übertragung und Verarbeitung als zwei benannte Etappen zeigen, statt beide in einen Balken zu pressen.
Dazu gehört der Fall, den fast niemand gestaltet: die Zeitüberschreitung. Irgendwann muss das Produkt zugeben, dass es nicht weitergeht. Ein Ladezustand, der unbegrenzt weiterdreht, ist kein Ladezustand mehr, sondern ein Aufhänger. Definiere eine Obergrenze, und definiere, was danach auf dem Bildschirm steht: was schiefging, ob die Daten verloren sind, und welcher Knopf den nächsten Versuch startet. Dieser Zustand ist selten — und genau deshalb der, an dem sich zeigt, wie ernst ein Produkt gemeint ist.
Auch das Tempo der Übergänge zählt hier mit. Wenn Inhalte nach dem Laden einfach erscheinen, wirkt der Wechsel hart; wenn sie zu langsam einblenden, hast du der gemessenen Ladezeit noch einmal Zeit hinzugefügt. Kurze Übergänge im Bereich von 150 bis 250 Millisekunden reichen — mehr dazu im Artikel über Bewegung im Interface.
Ladezustände sind ein blinder Fleck der Barrierefreiheit, weil sie visuell so offensichtlich sind, dass man das Nicht-Visuelle vergisst. Wer mit einem Screenreader arbeitet, sieht den Skeleton nicht — für diese Nutzer:innen passiert nach dem Klick schlicht gar nichts.
- Statuswechsel ankündigen. Ein Bereich, der sich nachträglich füllt, braucht eine Live-Region, die den Wechsel meldet: dass geladen wird, und dass das Ergebnis da ist. Ohne diese Meldung ist die Suche, die gerade 40 Treffer geladen hat, für Screenreader-Nutzer:innen dieselbe Seite wie vorher.
- Nicht zu viel ankündigen. Das Gegenteil ist genauso schlecht: Eine Live-Region, die bei jedem Tastenanschlag „12 Ergebnisse, 8 Ergebnisse, 8 Ergebnisse" ruft, macht die Eingabe unbenutzbar. Entprellen und nur den Endstand melden — ein Punkt, der bei Suchfeldern mit Autocomplete regelmäßig unterschätzt wird.
- Fokus nicht verlieren. Wenn ein Bereich während des Ladens ausgetauscht wird, darf der Tastaturfokus nicht ins Nichts fallen. Nach dem Laden gehört er an eine sinnvolle Stelle — meist an den Anfang des neuen Inhalts, nicht zurück an den Seitenkopf.
- Bewegung reduzierbar halten. Schimmernde Skeletons und pulsierende Indikatoren fallen unter reduzierte Bewegung. Es braucht eine ruhige Variante: derselbe Platzhalter, nur ohne Animation. Das ist eine Zeile CSS und trotzdem eine der am häufigsten vergessenen.
- Kontrast auch im Platzhalter. Graue Balken auf hellgrauem Grund sehen in der Design-Datei elegant aus und verschwinden auf einem Laptop bei Sonnenlicht vollständig. Der Ladezustand darf nicht der einzige Zustand sein, für den kein Kontrastwert festgelegt wurde.
Wenn der Ladezustand pro Feature neu erfunden wird, bekommst du in genau dem Teil des Produkts Uneinheitlichkeit, der am meisten über Qualität aussagt. Dann dreht sich in der einen Ansicht ein Spinner, in der anderen schimmert ein Skeleton, in der dritten friert die Seite kurz ein.
Was dafür ins System gehört, ist überschaubar:
- Skeleton-Bausteine statt Skeleton-Screens. Platzhalter für Textzeile, Überschrift, Bildfläche, Kachel — daraus baut sich jede Ansicht ihren eigenen Ladezustand zusammen. Fertige Skeleton-Screens veralten, sobald sich das Layout ändert.
- Feste Werte für Timing. Delay bis zum Erscheinen, Mindeststandzeit, Übergangsdauer, Zeitüberschreitung. Als Tokens, nicht als Zahlen im Code verstreut.
- Der Ladezustand als Variante jeder Komponente. Ein Button hat einen ladenden Zustand, eine Tabelle hat einen, eine Karte hat einen. Wenn das in der Komponente sitzt, muss niemand daran denken.
- Eine Seite Dokumentation mit einer Entscheidungshilfe. Wann Spinner, wann Skeleton, wann nichts, wann optimistisch. Drei Absätze reichen — sie ersparen dir Dutzende Einzelentscheidungen und die Diskussion darüber im Review.
Das ist dieselbe Arbeit, die auch sonst ein System trägt: nicht mehr Komponenten bauen, sondern die Entscheidung einmal treffen. Wie viel Systematik ein kleines Team wirklich stemmen kann, habe ich in Design System entwickeln beschrieben — für Ladezustände gilt die knappe Version: lieber vier robuste Platzhalter-Bausteine und eine klare Regel als eine Bibliothek, die niemand pflegt.
Und noch eine Kleinigkeit, die sich auszahlt: Nimm die Ladezustände mit in die Design-Datei auf, nicht nur in die Dokumentation. Ein Screen-Set, das neben „voll" und „leer" auch „lädt" und „fehlgeschlagen" zeigt, verändert die Gespräche im Team. Plötzlich wird über den mittleren Zustand gesprochen, bevor er gebaut ist — und nicht erst, wenn er im Testsystem auffällt.
Kleiner Praxistest fürs nächste Review: Öffne das Produkt mit gedrosselter Verbindung in den Entwicklerwerkzeugen und geh die fünf wichtigsten Abläufe durch. Was du dort siehst, ist der Zustand, in dem viele Menschen dein Produkt tatsächlich erleben — nicht der aus der Design-Datei.
Ladezustände sind kein Restposten der Entwicklung, sondern ein eigener Teil der Gestaltung. Sie entscheiden darüber, ob ein Produkt als schnell, ehrlich und beherrschbar wahrgenommen wird — und das oft stärker als die tatsächliche Ladezeit.
- Warten ist gestaltbar. Der Unterschied zwischen gemessener und gefühlter Dauer ist groß, und er liegt auf deiner Seite des Tisches.
- Die Schwellen kennen. Unter 100 Millisekunden kein Indikator, bis eine Sekunde eine dezente Zustandsänderung, ab zehn Sekunden echter Fortschritt mit Ausgang.
- Den richtigen Zustand wählen. Spinner, wenn du nichts über die Struktur sagen kannst. Skeleton, wenn du sie kennst. Nichts, wenn niemand blockiert ist. Optimistisch nur, wenn die Aktion fast immer gelingt und reversibel ist.
- Ehrlich bleiben. Ein Fortschritt, der lügt, und ein Indikator, der ewig dreht, kosten mehr Vertrauen, als eine längere Wartezeit je gekostet hätte.
- Einmal entscheiden, überall nutzen. Timing-Werte, Platzhalter-Bausteine und eine kurze Entscheidungsregel gehören ins Design System — sonst wird jeder Ladezustand neu verhandelt.
Der beste Einstieg ist unspektakulär: Nimm den wichtigsten Ablauf deines Produkts, drossle die Verbindung und sieh dir an, was zwischen Klick und Ergebnis passiert. In den meisten Produkten ist dort noch nie jemand hingeschaut — und genau deshalb liegt dort so viel gefühlte Geschwindigkeit herum.