Skip to main content
Engineering10 min read

Fehlerbehandlung, die Ihre Benutzer respektiert

Ihre Benutzer interessieren sich nicht für Stack-Traces. Sie wollen wissen, was schiefgelaufen ist und was als Nächstes zu tun ist. So gestalte ich Fehlererlebnisse, die helfen statt frustrieren.

Part ofProduct Systems->
By Jason TeixeiraAugust 25, 2025
Error HandlingUXTypeScriptReactBest Practices
Share:
On this page

Die meiste Fehlerbehandlung ist für die Entwicklerin geschrieben, die das System bereits kennt.

Das ist falsch herum.

Die Nutzerin interessiert sich nicht dafür, dass ein Stripe-Webhook eine Zeitüberschreitung hatte, eine Supabase-Richtlinie die Zeile abgelehnt hat oder ein Modellanbieter einen 429 zurückgegeben hat. Sie interessiert sich für drei Dinge:

  • was passiert ist
  • ob ihre Arbeit sicher ist
  • was sie als Nächstes tun kann

Wenn die Oberfläche diese Fragen nicht beantworten kann, hilft die Fehlermeldung nicht. Sie gibt nur Implementierungsdetails preis.

Beginnen Sie mit der Aufgabe der Nutzerin, nicht mit der Ausnahme

Der erste Entwurf einer Fehlermeldung klingt meist wie der Codepfad:

Fehler beim Erstellen der Checkout-Sitzung.

Das mag stimmen, ist aber nicht hilfreich. Eine bessere Version beginnt mit der Absicht der Nutzerin:

Wir konnten den Checkout nicht öffnen. Ihre Projektdetails wurden gespeichert. Versuchen Sie es erneut, oder buchen Sie einen Anruf, und wir erledigen es manuell.

Diese Nachricht erfüllt vier Aufgaben:

  • benennt die fehlgeschlagene Aktion
  • bestätigt, ob Daten gespeichert wurden
  • gibt einen nächsten Schritt vor
  • vermeidet, die Nutzerin zu beschuldigen

Der interne Fehler kann weiterhin mit dem Anbieter, dem Statuscode, der Anfrage-ID und dem Stacktrace protokolliert werden. Die Nutzerin braucht das alles nicht.

Trennen Sie Nutzertexte von technischer Telemetrie

Die Produktoberfläche und die Beobachtbarkeitsoberfläche sollten nicht dieselbe Nutzlast tragen.

Respektvoller FehlerablaufOberfläche -> Telemetrie
NutzeraktionFehlergrenzeNutzertextTelemetrie

Die Nutzerin sieht einen klaren Wiederherstellungspfad. Das System behält den Stacktrace, die Anfrage-ID, die Anbieterantwort und die Alarmweiterleitung für die Operatorin.

In der Produktion möchte ich zwei Ausgaben von demselben Fehler:

  • eine menschenlesbare Nachricht auf der Seite
  • ein maschinenlesbares Ereignis in Logs, Analysen und Alarmierungen

Der Nutzertext sollte ruhig und spezifisch sein. Die Telemetrie darf, falls nötig, dicht und hässlich sein. Beides zu vermischen erzeugt entweder nutzlose Logs oder feindselige Oberflächen.

Gute Fehlerzustände beantworten fünf Fragen

Wenn ich einen Fehlerzustand überprüfe, gehe ich diese Checkliste durch.

Wenn die Antwort Nein ist, ist der Zustand nicht fertig.

Ein Lead-Formular-Fehler sollte beispielsweise nicht 500 Interner Serverfehler sagen. Er sollte eher so lauten:

Wir konnten die Nachricht nicht senden. Ihr Browser blieb auf dieser Seite, also ging nichts verloren. Versuchen Sie es erneut oder mailen Sie die Projektdetails direkt.

Dann sollten die Serverlogs die eigentliche Ursache enthalten: Validierungsfehler, Resend-Timeout, Supabase-Insert-Fehler oder Webhook-Ablehnung.

Entwerfen Sie den Fallback, bevor das System ausfällt

Teams fügen Fallback-Zustände normalerweise nach dem ersten Produktionsvorfall hinzu. Das ist teuer, weil der Fehler bereits öffentlich ist.

Für wichtige Abläufe definiere ich den Fallback gerne während der Entwicklung der Funktion:

Ablauf Nutzer-Fallback Operator-Signal
Checkout Route speichern, Buchungslink anbieten Zahlungsanbieterfehler mit Sitzungsmetadaten
Kontaktformular Nachricht auf dem Bildschirm behalten, direkte E-Mail anzeigen Lead-Erfassungsfehler mit Quelle und Payload-Form
KI-Generierung Prompt erhalten, Wiederholung anbieten Anbieter, Modell, Latenz und Token-Metadaten
Datei-Upload Dateilimit und Wiederholungspfad anzeigen Speicherfehler, Größe, MIME-Typ, Organisations-ID

Der Fallback muss nicht ausgefallen sein. Er muss die Dynamik erhalten.

Lassen Sie nicht jeden Fehler gleich klingen

Allgemeine Nachrichten lassen das Produkt nachlässig wirken:

  • Etwas ist schiefgelaufen.
  • Versuchen Sie es später noch einmal.
  • Ein unerwarteter Fehler ist aufgetreten.

Manchmal sind diese als letzte Auffangnetze akzeptabel, aber sie sollten nicht die einzige Fehlersprache im Produkt sein.

Verschiedene Fehler benötigen unterschiedliche Wiederherstellungspfade:

  • Validierungsfehler: Zeigen Sie das genaue Feld und das erwartete Format an
  • Berechtigungsfehler: Erklären Sie, welche Rolle oder welches Konto erforderlich ist
  • Ratenbegrenzung: Sagen Sie, wann ein erneuter Versuch möglich ist, oder bieten Sie eine leichtere Aktion an
  • Abhängigkeitsfehler: Bewahren Sie die Arbeit der Nutzerin und zeigen Sie einen alternativen Pfad
  • Fehler bei destruktiven Aktionen: Geben Sie klar an, was sich nicht geändert hat

Das Ziel ist nicht, das System perfekt aussehen zu lassen. Das Ziel ist, die Nutzerin orientiert fühlen zu lassen, wenn es das nicht ist.

Die Operatorin braucht eine andere Oberfläche

Respektvolle nutzerseitige Texte funktionieren nur, wenn die Operatorin trotzdem die echten Beweise erhält.

Das bedeutet Protokollierung von:

  • Route und Aktion
  • Anfrage-ID oder Trace-ID
  • Nutzer-/Organisations-ID, wenn verfügbar
  • Anbieter und Statuscode
  • sichere Payload-Form
  • Zeitmessung
  • Anzahl der Wiederholungen

Es bedeutet auch, keine Geheimnisse, rohen Tokens, Zahlungskartendaten, privaten Dokumente oder vollständigen Prompts zu protokollieren, wenn diese Prompts Kundendaten enthalten könnten.

Gute Fehlerbehandlung ist keine weichere Protokollierung. Es ist eine schärfere Trennung.

Das Muster, das ich auszuliefern versuche

Für jede wichtige Aktion möchte ich diese Form:

  1. Frühzeitig validieren und feldbezogene Anleitung zeigen.
  2. Die Serveraktion/API-Route in eine strukturierte Fehlerbehandlung einwickeln.
  3. Eine stabile Nutzernachricht und einen stabilen Maschinencode zurückgeben.
  4. Den vollständigen, für die Operatorin sicheren Kontext protokollieren.
  5. Den Fehler als Produktereignis verfolgen, wenn er die Konversion beeinflusst.
  6. Nutzereingaben wo immer möglich erhalten.

Das ist keine glamouröse Arbeit, aber es ist Teil des Premium-Gefühls. Die Seite, die Ihre Arbeit speichert und Ihnen sagt, was als Nächstes zu tun ist, wirkt vertrauenswürdiger als die Seite, die ein rotes Kästchen aufblitzen lässt und Sie von vorne beginnen lässt.

Reader route

article -> proof -> offer

ReadClusterProofScope

cluster

Product Systems

intent

Engineering

route

next step

What to do with this

Turn the note into a build path.

If this topic maps to a real business problem, keep reading the cluster, study the academy path, or route the work into a scoped engagement.

Jason Teixeira
Written by
Jason Teixeira
Founder, Sage Ideas Studio · Principal Engineer
livebuild 5d6c8652026-08-05 06:00Z
// solo studio// no analytics resold// every commit human-reviewed