Wie man eine Web‑App für Vorfallverfolgung & Postmortems baut
Ein praxisorientierter Plan zum Entwerfen, Bauen und Starten einer Web‑App für Vorfallverfolgung und Postmortems — von Workflows über Datenmodellierung bis zur UX.

Ziele, Nutzer und Erfolgskriterien klären
Bevor Sie Bildschirme skizzieren oder eine Datenbank wählen, einigen Sie sich darauf, was Ihr Team unter einer Incident‑Tracking‑Web‑App versteht — und was „Postmortem‑Management“ erreichen soll. Teams verwenden dieselben Begriffe oft unterschiedlich: Für die einen ist ein Vorfall jedes kundenrelevante Problem; für andere ist es nur ein Sev‑1‑Ausfall mit On‑Call‑Esklation.
„Incident Tracking" für Ihr Team definieren
Schreiben Sie eine kurze Definition, die beantwortet:
- Was qualifiziert als Vorfall (Kundenimpact, nur intern, Sicherheitsereignisse, verfehlte SLAs)?
- Wann beginnt und endet ein Vorfall (erster Alarm vs. erste Bestätigung; vollständig behoben vs. überwacht)?
- Welche Daten sind zwingend (betroffener Service, Severity, Owner, Zeitstempel, Status‑Updates)?
Diese Definition steuert Ihren Incident‑Response‑Workflow und verhindert, dass die App entweder zu strikt (niemand nutzt sie) oder zu locker (inkonsistente Daten) wird.
„Postmortem‑Management" definieren (und warum)
Entscheiden Sie, was ein Postmortem in Ihrer Organisation ist: eine kurze Zusammenfassung für jeden Vorfall oder ein vollständiges RCA nur für hochkritische Ereignisse. Machen Sie klar, ob das Ziel Lernen, Compliance, Verringerung wiederkehrender Vorfälle oder alle drei ist.
Eine nützliche Regel: Wenn Sie erwarten, dass ein Postmortem Veränderung bewirkt, muss Ihr Tool Action‑Items‑Tracking unterstützen, nicht nur Dokumentenablage.
Die Probleme auflisten, die Sie lösen wollen
Die meisten Teams bauen diese App, um ein paar wiederkehrende Schmerzpunkte zu beheben:
- Sichtbarkeit: „Was passiert gerade?“ „Wie oft fällt dieser Service aus?“
- Koordination: klare Ownership, Übergaben und eine gemeinsame Vorfalls‑Timeline
- Lernen: konsistente RCA‑Vorlagen und ein Review‑Prozess, der wirklich stattfindet
- Nachverfolgung: Action‑Items verschwinden nicht nach dem Meeting
Halten Sie die Liste kompakt. Jedes Feature sollte mindestens auf eines dieser Probleme einzahlen.
Erfolgskriterien wählen, die Verhalten messen
Wählen Sie einige Metriken, die Sie automatisch aus dem Datenmodell ableiten können:
- Time to detect, acknowledge, mitigate und resolve (Ihre Vorfalls‑Timeline sollte diese erfassen)
- Häufigkeit nach Severity, Service und Root‑Cause‑Kategorie
- Action‑Item‑Closure‑Rate und mittlere Time‑to‑Close
- Qualitätsindikatoren: Anteil der Vorfälle mit abgeschlossenem Postmortem innerhalb von N Tagen; Anteil mit klarem Owner und Status‑Updates
Diese werden zu Ihren Betriebsmetriken und zur "Definition of Done" für das erste Release.
Ihre Nutzer klären (und was jeder braucht)
Die gleiche App bedient verschiedene Rollen im On‑Call‑Betrieb:
- On‑Call‑Engineer: schneller Intake, minimale Felder, einfache Status‑Updates
- Incident Commander: Koordinationsansicht, aktueller Zustand, Owner, Checkpoints
- Manager: Trends, wiederkehrende Probleme, Nachverfolgung von Action‑Items
- Stakeholder: klare Status‑Updates ohne internen Lärm
Wenn Sie für alle gleichzeitig designen, entsteht eine überladene UI. Wählen Sie stattdessen einen Primärnutzer für v1 — sorgen Sie aber dafür, dass alle anderen später über angepasste Views, Dashboards und Berechtigungen das Nötige bekommen.
Den Incident‑Workflow und Rollen entwerfen
Ein klarer Workflow verhindert zwei häufige Fehlermodi: Vorfälle, die stecken bleiben, weil niemand weiß „was als Nächstes“, und Vorfälle, die als „erledigt“ aussehen, aber kein Lernen erzeugen. Beginnen Sie mit einer vollständigen Lifecycle‑Abbildung und hängen Sie dann Rollen und Berechtigungen an jeden Schritt.
Den Vorfalls‑Lifecycle abbilden
Die meisten Teams folgen einem einfachen Bogen: detect → triage → mitigate → resolve → learn. Ihre App sollte das mit einer kleinen Menge vorhersehbarer Schritte abbilden, nicht mit einem endlosen Menü.
Definieren Sie, was für jede Phase „done“ bedeutet. Beispiel: Mitigation kann bedeuten, dass der Kundenimpact gestoppt ist, obwohl die Root‑Cause noch unbekannt ist.
Rollen und Verantwortlichkeiten definieren
Halten Sie Rollen explizit, damit Menschen ohne Meetings handeln können:
- Reporter: erstellt einen Vorfall, fügt ersten Kontext hinzu, hängt Links/Logs an.
- Responder: untersucht, fügt Updates hinzu, führt Mitigations aus.
- Incident Commander: verantwortet Koordination, weist Responder zu, genehmigt Severity, steuert Stakeholder‑Updates.
- Reviewer: führt die Nachbesprechung, sichert Postmortem‑Qualität.
Ihre UI sollte den „aktuellen Owner" sichtbar machen, und der Workflow sollte Delegation unterstützen (Umschreiben, weitere Responder hinzufügen, Commander rotieren).
Zustände und Transitionen
Wählen Sie erforderliche Zustände und erlaubte Übergänge, z. B. Investigating → Mitigated → Resolved. Fügen Sie Guardrails hinzu:
- Severity vor dem Verlassen der Triage verpflichtend
- Lösungszusammenfassung erforderlich, bevor auf Resolved gesetzt wird
- Verhindern Sie „Resolved → Investigating“, es sei denn, ein Reopen‑Grund wird erfasst
Kommunikationskanäle planen
Trennen Sie interne Updates (schnell, taktisch, können unordentlich sein) von stakeholder‑gerichteten Updates (klar, zeitgestempelt, kuratiert). Bauen Sie zwei Update‑Ströme mit unterschiedlichen Templates, Sichtbarkeiten und Freigaberegeln — oft ist der Commander der einzige, der Stakeholder‑Updates veröffentlicht.
Daten modellieren: Entitäten, Beziehungen und Historie
Ein gutes Incident‑Tool wirkt im UI „einfach“, weil das zugrunde liegende Datenmodell konsistent ist. Entscheiden Sie vor den Bildschirmen, welche Objekte existieren, wie sie zusammenhängen und was historisch korrekt sein muss.
Kernentitäten (die Objekte, die Sie speichern)
Beginnen Sie mit einer kleinen Menge erstklassiger Objekte:
- Incident: der Container für alles, was passiert ist.
- Service: was Sie betreiben (API, Datenbank, Mobile App), genutzt für Impact und Reporting.
- Update: menschenlesbare Status‑Updates (intern & extern).
- Timeline Event: präzise, zeitgestempelte Fakten ("Alert fired", "Rollback durchgeführt", "Mitigation angewendet").
- Action Item: Nachfolgen mit Owner und Fälligkeitsdatum.
- Postmortem: strukturierter Bericht (Impact, Root Cause, Learnings, Links).
Beziehungen und Identifikatoren
Die meisten Beziehungen sind One‑to‑Many:
- Ein Incident → viele Updates / Timeline Events / Action Items
- Ein Incident → ein (oder kein) Postmortem
- Ein Incident ↔ viele Services (meist Many‑to‑Many über ein "affected_services"‑Join)
Verwenden Sie stabile Identifikatoren (UUIDs) für Incidents und Events. Menschen brauchen trotzdem einen freundlichen Key wie INC‑2025‑0042, den Sie aus einer Sequenz erzeugen können.
Metadaten, die Sie später brauchen
Modellieren Sie diese früh, damit Sie filtern, suchen und reporten können:
- Severity, Status (open/mitigated/resolved), Tags
- Start‑Zeit, End‑Zeit, Detection‑Zeit
- Incident Commander, Owner‑Team, On‑Call‑Rotation (optional)
- Betroffene Services, Kundenimpact‑Zusammenfassung
Historie, Aufbewahrung und Auditierbarkeit
Vorfallsdaten sind sensibel und werden oft später geprüft. Behandeln Sie Änderungen als Daten — nicht als Überschreibungen:
- Speichern Sie created_at/created_by auf jedem Datensatz.
- Bei Änderungen führen Sie ein Audit‑Log (Feldänderungen + Actor + Zeitstempel) oder versionieren Sie wichtige Dokumente (Postmortem, Updates).
- Entscheiden Sie die Aufbewahrung im Vorfeld (z. B. Incidents für immer behalten, Chat‑Transkripte nach N Tagen löschen).
Diese Struktur macht spätere Features — Suche, Metriken, Berechtigungen — leichter implementierbar, ohne großen Refactor.
Incident‑Intake, Updates und Timeline bauen
Wenn etwas ausfällt, ist die Aufgabe der App, Tipparbeit zu reduzieren und Klarheit zu erhöhen. Dieser Abschnitt behandelt den „Write‑Path": wie Menschen einen Vorfall erstellen, aktuell halten und später rekonstruieren.
Incident‑Intake: minimale Felder, intelligente Defaults
Halten Sie das Intake‑Formular kurz genug, dass es beim Troubleshooten ausgefüllt werden kann. Gute Standard‑Pflichtfelder sind:
- Titel (klar formuliert: „Checkout‑Fehler in der Mobile‑App")
- Service/System (Auswahl aus Liste, um Schreibvarianten zu vermeiden)
- Severity (voreingestellt je nach Service oder Zeit, aber editierbar)
- Reporter (automatisch vom eingeloggten Nutzer vorausgefüllt)
Alles andere optional bei Erstellung (Impact, Kunden‑Ticket‑Links, vermutete Ursache). Nutzen Sie smarte Defaults: Start‑Zeit auf „jetzt“ setzen, das On‑Call‑Team des Nutzers vorwählen und eine Ein‑Tap‑Aktion „Erstellen & Incident‑Room öffnen“ anbieten.
Schnelle Updates: Status, Impact, nächste Schritte
Ihre Update‑UI sollte für wiederkehrende, kleine Änderungen optimiert sein. Bieten Sie ein kompaktes Update‑Panel mit:
- Status (Investigating / Identified / Mitigated / Resolved)
- Impact‑Zusammenfassung (ein bis zwei Sätze)
- Kern‑Notizen (Was sich seit dem letzten Update geändert hat)
- Nächste Schritte (Was als Nächstes getan wird, von wem)
Machen Sie Updates als Append‑friendly: jedes Update wird zu einem zeitgestempelten Eintrag, nicht zum Überschreiben des vorherigen Textes.
Timeline: automatische Historie plus manuelle Events
Bauen Sie eine Timeline, die mischt:
- Auto‑erfasste Events: Feldänderungen (Severity, Status), Zuweisungen, hinzugefügte Links, Resolution‑Zeit
- Manuelle Events: „Hotfix deployed", „Rollback durchgeführt", „DB Failover gestartet"
So entsteht eine verlässliche Erzählung, ohne dass Leute sich daran erinnern müssen, jeden Klick zu protokollieren.
Für Geschwindigkeit auf Mobilgeräten designen
Während eines Ausfalls laufen viele Updates vom Handy. Priorisieren Sie einen schnellen, wenig aufwändigen Screen: große Touch‑Targets, eine einzelne scrollbare Seite, offline‑fähige Entwürfe und Ein‑Tap‑Aktionen wie „Update posten“ und „Incident‑Link kopieren".
Severity, Checklists und unterstützender Kontext
Severity ist der „Speed‑Dial“ der Incident‑Response: sie sagt, wie dringend gehandelt werden muss, wie breit kommuniziert wird und welche Trade‑offs akzeptabel sind.
Severity‑Level definieren (und was sie implizieren)
Vermeiden Sie vage Labels wie „hoch/mittel/niedrig“. Lassen Sie jedes Severity‑Level klare operative Erwartungen abbilden — besonders Antwortzeit und Kommunikationsrhythmus.
Beispiel:
- SEV1 (Kritisch): user‑sichtiger Ausfall oder großes Sicherheitsrisiko. Sofort page, Incident‑Bridge/Chat öffnen, Stakeholder alle 15–30 Minuten updaten, ggf. öffentliches Status‑Update.
- SEV2 (Major): partielle Ausfälle oder starke Degradation. Schnell reagieren, in Chat koordinieren, Stakeholder alle 30–60 Minuten updaten.
- SEV3 (Minor): begrenzte Auswirkungen, Workaround vorhanden. Falls passend während der Geschäftszeiten bearbeiten, Updates bei Meilensteinen.
- SEV4 (Info): kein unmittelbarer Impact; als Betriebsproblem tracken.
Machen Sie diese Regeln im UI sichtbar, wo immer die Severity gewählt wird, damit Responders nicht in Dokumenten suchen müssen.
Responder‑Checklists, die zum Workflow passen
Checklists reduzieren kognitive Belastung unter Stress. Halten Sie sie kurz, handlungsorientiert und rollenbezogen.
Ein nützliches Muster sind einige Sektionen:
- Triage: Kundenimpact bestätigen, Blast‑Radius identifizieren, Severity setzen, Incident‑Lead zuweisen.
- Mitigation: Rollback/Feature‑Flag‑Aktionen validieren, Recovery‑Signale prüfen, Monitoring auf Regression setzen.
- Comms: Support benachrichtigen, internes Update posten, Entscheidung über /status‑Update, kundenorientierte Nachricht erfassen.
Machen Sie Checklist‑Items zeitgestempelt und attribuierbar, so werden sie Teil des Incident‑Records.
Unterstützende Artefakte verlinken (Kontext bewahren)
Vorfälle leben selten in einem Tool. Ihre App sollte Respondern erlauben, Links anzuhängen zu:
- Dashboards und spezifischen Charts
- Log‑Queries
- Tickets/Issues
- Chat‑Threads oder War‑Room‑Kanälen
- Runbooks und Playbooks
Bevorzugen Sie „typisierte“ Links (z. B. Runbook, Ticket), damit sie später filterbar sind.
SLA/SLO‑Impact erfassen, wenn relevant
Wenn Ihre Organisation Zuverlässigkeitsziele verfolgt, fügen Sie leichte Felder hinzu wie SLO affected (ja/nein), geschätzter Error‑Budget‑Burn und Kunden‑SLA‑Risiko. Halten Sie sie optional — aber leicht ausfüllbar während oder kurz nach dem Vorfall, wenn Details frisch sind.
Postmortem‑Vorlagen und Review‑Flow erstellen
Ein gutes Postmortem ist leicht zu beginnen, schwer zu vergessen und konsistent über Teams. Der einfachste Weg: eine Standardvorlage (mit minimalen Pflichtfeldern) bereitstellen und aus dem Incident‑Record auto‑befüllen, sodass Menschen Zeit mit Denken statt Tippen verbringen.
Praktische Postmortem‑Vorlage (Was dazugehört)
Ihre eingebaute Vorlage sollte Struktur und Flexibilität ausbalancieren:
- Summary: Was passiert ist, in einfachen Worten (2–5 Sätze).
- Impact: Wen/was es getroffen hat, Dauer, sichtbare Symptome, Business‑Impact (Bestellungen verzögert, Error‑Rate, SLA‑Verletzungen).
- Root Cause: Primäre technische/Prozessursache. Sachlich, nicht beschuldigend.
- Contributing Factors: Sekundäre Probleme (Monitoring‑Lücken, unklare Ownership, riskantes Timing einer Änderung).
- What went well / what went wrong / where we got lucky: Prompts für ehrliche, umsetzbare Reflexionen.
Machen Sie „Root Cause“ anfangs optional, wenn schnelleres Publizieren gewünscht ist, aber fordern Sie es vor der Final‑Freigabe.
Postmortem automatisch an die Incident‑Timeline hängen
Das Postmortem sollte kein separates, lose verknüpftes Dokument sein. Wenn ein Postmortem erstellt wird, hängen Sie automatisch an:
- Die Incident‑Timeline (wichtige Updates, Status‑Änderungen, Mitigations)
- Teilnehmer (Incident Commander, Responder, Comms)
- Artefakte (verwandte Tickets, Dashboards, Log‑Links — als Referenzen)
Nutzen Sie diese, um Postmortem‑Sektionen vorzufüllen. Beispiel: Der Abschnitt „Impact" kann mit Start/End‑Zeiten und aktueller Severity beginnen; „What we did" kann aus Timeline‑Einträgen gezogen werden.
Review‑ und Freigabe‑Flow, der Lernen fördert
Fügen Sie einen leichtgewichtigen Workflow hinzu, damit Postmortems nicht stocken:
- Draft (automatisch bei Incident‑Close erstellt oder manuell)
- In Review (zugeordnete Reviewer — oft IC + Service‑Owner)
- Approved (gesperrte Zusammenfassung + Entscheidungsnotizen)
- Published (intern geteilt; optional mit Kunden‑Update verlinkt)
Erfassen Sie bei jedem Schritt Entscheidungsnotizen: was geändert wurde, warum und wer es genehmigt hat. Das verhindert „stille Änderungen“ und erleichtert spätere Audits oder Lern‑Reviews.
Wenn Sie die UI simpel halten wollen, behandeln Sie Reviews wie Kommentare mit klaren Outcomes (Approve / Request changes) und speichern die finale Genehmigung als unveränderlichen Eintrag.
Für Teams, die es brauchen, koppeln Sie „Published“ an Ihren Status‑Updates‑Workflow (siehe /blog/integrations-status-updates), ohne Inhalte manuell zu duplizieren.
Action Items bis zum Abschluss nachverfolgen
Postmortems reduzieren zukünftige Vorfälle nur, wenn Folgearbeit tatsächlich erledigt wird. Behandeln Sie Action Items als erstklassige Objekte in Ihrer App — nicht als Absatz am Dokumentenende.
Action Items als strukturierte Datensätze definieren
Jedes Action Item sollte konsistente Felder haben, damit es verfolgt und gemessen werden kann:
- Owner (eine verantwortliche Person, auch wenn die Ausführung geteilt ist)
- Due date (und optional "start not before")
- Priority (z. B. P0–P3 oder Hoch/Mittel/Niedrig)
- Status (Open, In progress, Blocked, Done, Won’t do)
- Verification criteria (wie bestätigt wird, dass die Lösung wirkt)
Fügen Sie hilfreiche Metadaten hinzu: Tags (z. B. „monitoring“, „docs“), Komponente/Service und "created from" (Incident‑ID und Postmortem‑ID).
Arbeit über Vorfälle hinweg leicht auffindbar machen
Fangen Sie Action Items nicht in einer einzelnen Postmortem‑Seite ein. Bieten Sie:
- Globale Suche nach Owner, Service, Tag und Status
- Filter wie „überfällig“, „diese Woche fällig“, „blocked“, „high priority"
- Einfache Reports: Counts nach Team/Service, Abschlussrate, durchschnittliche Time‑to‑Close
So wird Nacharbeit zu einer operativen Queue statt zu verstreuten Notizen.
Wiederkehrende Arbeit und externe Links (optional)
Manche Tasks wiederholen sich (vierteljährliche Game Days, Runbook‑Reviews). Unterstützen Sie eine Recurring‑Vorlage, die neue Items nach Zeitplan erzeugt, während jede Instanz eigenständig nachverfolgbar bleibt.
Wenn Teams bereits ein anderes Ticket‑Tool nutzen, erlauben Sie, ein Action Item mit einer externen Referenz und externer ID zu versehen, während Ihre App die Source für Incident‑Verknüpfungen und Verifikation bleibt.
Erinnerungen und Eskalationsregeln
Bauen Sie leichte Erinnerungen ein: Benachrichtigungen, wenn Fälligkeit naht, Markierung überfälliger Items an Team‑Leads und Aufzeigen chronisch überfälliger Muster in Reports. Halten Sie Regeln konfigurierbar, damit Teams sie an ihren On‑Call‑Betrieb anpassen können.
Berechtigungen, Zugriffskontrolle und Auditierbarkeit
Incidents und Postmortems enthalten oft sensible Details — Kunden‑IDs, interne IPs, Sicherheitsbefunde oder Vendor‑Probleme. Klare Zugriffsregeln halten das Tool kollaborativ, ohne es zur Datenquelle für Leaks zu machen.
Berechtigungslevels definieren
Beginnen Sie mit einer kleinen, verständlichen Menge an Rollen:
- View‑only (Stakeholder): können Incident‑Summaries, Timelines und finale Postmortems lesen, aber nicht bearbeiten. Geeignet für Führung, Support und Partner.
- Editors (Responder): können Incidents erstellen, Updates hinzufügen, Timelines managen und Postmortems entwerfen.
- Admins (Owner): können Rollen verwalten, Templates konfigurieren, Integrationen verbinden und Zugriffsstreitigkeiten lösen.
Bei mehreren Teams sollten Sie Rollen nach Service/Team scopebar machen (z. B. „Payments Editors") statt globale Zugriffe zu vergeben.
Was privat vs. teilbar ist
Klassifizieren Sie Inhalte früh, bevor Nutzer Gewohnheiten bilden:
- Internal‑only‑Felder: Kunden‑PII, Security‑Notes, rohe Logs, interne Chat‑Transkripte
- Teilbare Felder: high‑level Impact, Start/End‑Zeiten, Mitigations, öffentliche Status‑Updates
Ein praxisnahes Muster: Sektionen als Intern oder Teilbar markieren und das in Exporten und Status‑Seiten erzwingen. Sicherheitsvorfälle können einen eigenen Incident‑Typ mit strengeren Defaults benötigen.
Vertrauenswürdige Audit‑Logs
Für jede Änderung an Incidents und Postmortems protokollieren Sie: wer hat geändert, was wurde geändert und wann. Schließen Sie Änderungen an Severity, Zeitstempeln, Impact und finalen Genehmigungen ein. Machen Sie Audit‑Logs durchsuchbar und nicht editierbar.
Authentifizierung und Session‑Sicherheit
Bieten Sie starke Auth‑Optionen out of the box: E‑Mail + MFA oder Magic Link, und fügen Sie SSO (SAML/OIDC) hinzu, wenn Nutzer es erwarten. Nutzen Sie kurzlebige Sessions, sichere Cookies, CSRF‑Schutz und automatische Session‑Widerrufe bei Rollenänderungen. Für Rollout‑Überlegungen siehe /blog/testing-rollout-continuous-improvement.
UX: Dashboards, Suche und Navigation
Bei einem aktiven Vorfall wird gescannt — nicht gelesen. Ihre UX muss den aktuellen Zustand in Sekunden sichtbar machen und gleichzeitig Responders ermöglichen, ohne Verlorengehen ins Detail zu bohren.
Kern‑Screens zuerst gestalten
Beginnen Sie mit drei Screens, die die meisten Workflows abdecken:
- Incident‑Liste (Dashboard): Tabelle oder Kartenliste mit Status‑Badge, Severity, Titel, betroffenen Services, Owner/Incident‑Commander, letzter Update‑Zeit und Dauer.
- Incident‑Detail: Homebase für alles zu einem Vorfall — Zusammenfassung, aktueller Status, Key‑Links, Teilnehmer und Action‑Panel.
- Timeline‑View: chronologischer Feed von Updates und Events (Alarme, manuelle Notizen, Status‑Änderungen) mit großen, gut lesbaren Zeitstempeln.
Regel: Die Incident‑Detail‑Seite sollte oben „Was passiert gerade?“ beantworten und darunter „Wie sind wir hierher gekommen?".
Filtering und Suche, die Responders wirklich nutzen
Incidents stapeln sich schnell — machen Sie Discovery flink und fehlertolerant:
- Quick‑Filter: Service, Severity, Status (open/mitigating/resolved/postmortem due), Tag, Zeitraum, Owner.
- Suche über: Titel, Incident‑ID, betroffene Komponenten und Tags.
Bieten Sie gespeicherte Views wie Meine offenen Incidents oder Sev‑1 diese Woche, damit On‑Call‑Engineers nicht bei jedem Shift Filter neu bauen.
Status‑Badges und Konsistenz des „aktuellen Zustands"
Nutzen Sie konsistente, farbsichere Badges in der ganzen App (vermeiden Sie subtile Schattierungen, die unter Stress nicht unterscheiden). Halten Sie dieselbe Status‑Vokabel überall: Liste, Detail‑Header und Timeline‑Events.
Auf einen Blick sollten Responders sehen:
- Aktueller Status + Severity
- Zeit des letzten Updates (und wer es gepostet hat)
- Nächster Checkpoint (z. B. „Nächstes Update in 8 Min", falls Sie Update‑Cadence unterstützen)
Lesbarkeit unter Druck
Priorisieren Sie Scannability:
- Große Zeitstempel und klare Abschnittsüberschriften
- Sticky Incident‑Header beim Scrollen
- Einklappbare Sektionen für laute Daten (rohe Alerts, lange Logs)
- Tastaturfreundliche Navigation (/, n/p für nächstes/prev Incident)
Designen Sie für den schlimmsten Moment: wenn jemand schlaftrunken sein Telefon bedient, sollte die UI ihn trotzdem schnell zur richtigen Aktion führen.
Integrationen: Alerts, Chat, Ticketing und Status‑Updates
Integrationen verwandeln ein Incident‑Tracker von „Notizablage" in das System, in dem Ihr Team Vorfälle tatsächlich managt. Listen Sie zuerst die Systeme, die Sie anbinden müssen: Monitoring/Observability (PagerDuty/Opsgenie, Datadog, CloudWatch), Chat (Slack/Teams), E‑Mail, Ticketing (Jira/ServiceNow) und eine Status‑Seite.
Integrationsstil wählen
Meist entsteht eine Mischung:
- Inbound Webhooks für Alerts und Chat‑Commands (schnell, near‑real‑time, geringe Betriebskosten)
- Polling, wenn ein Tool nicht pushen kann; Intervalle konservativ halten und cachen
- Manuelles Verknüpfen als Fallback (Alert‑URL einfügen, Ticket‑Key anhängen), nützlich, wenn APIs ausfallen
Duplikate verhindern (Idempotenz)
Alarme sind laut, werden retried und kommen oft ungeordnet an. Definieren Sie einen stabilen Idempotency‑Key pro Provider‑Event (z. B. provider + alert_id + occurrence_id) und speichern Sie ihn mit einer Unique‑Constraint. Für Deduplication legen Sie Regeln fest wie „gleicher Service + gleiche Signatur innerhalb von 15 Minuten" → an bestehendes Incident anhängen.
Grenzen und Ausfallmodi definieren
Seien Sie explizit, was Ihre App übernimmt versus was im Quelltool bleibt:
- Ihre App kann den Incident‑Record, Timeline, Rollen und Postmortem besitzen.
- Das Ticket‑System kann Work Execution und Approvals besitzen.
Wenn eine Integration ausfällt, degrade gracil: retries in die Queue, Warnung im Incident anzeigen ("Slack‑Posting verzögert") und stets manuelle Fortführung erlauben.
Status‑Updates ohne Mehraufwand
Behandeln Sie Status‑Updates als erstklassiges Output: eine strukturierte "Update"‑Aktion im UI sollte in der Lage sein, in Chat zu posten, die Incident‑Timeline zu erweitern und optional auf der Status‑Seite zu synchronisieren — ohne die Antwortperson dreimal dasselbe schreiben zu lassen.
Architektur und Tech‑Stack‑Entscheidungen
Ihr Incident‑Tool ist ein "during‑an‑outage"‑System — bevorzu̱gen Sie Einfachheit und Zuverlässigkeit vor Neuheiten. Der beste Stack ist oft der, den Ihr Team nachts um zwei Uhr debuggen und betreiben kann.
Einen Stack wählen, den Ihr Team betreiben kann
Starten Sie mit dem, was Ihre Engineers schon in Produktion einsetzen. Ein etabliertes Web‑Framework (Rails, Django, Laravel, Spring, Express/Nest, ASP.NET) ist meist sicherer als ein brandneues Framework, das nur eine Person versteht.
Für Datenspeicherung eignet sich eine relationale DB (PostgreSQL/MySQL): Incidents, Updates, Participants, Action Items und Postmortems profitieren von Transaktionen und klaren Relationen. Redis nur einsetzen, wenn Caching, Queues oder ephemere Locks nötig sind.
Hosting kann einfach als Managed‑Platform (Render/Fly/Heroku‑ähnlich) oder Ihre Cloud (AWS/GCP/Azure) erfolgen. Bevorzugen Sie managed Databases und Backups, wenn möglich.
Echtzeit: WebSockets vs. periodisches Refresh
Aktive Vorfälle profitieren von Echtzeit, aber Sie brauchen nicht immer WebSockets am ersten Tag.
- Periodisches Refresh (Polling) ist einfacher zu implementieren und zu betreiben. Für viele Teams ist ein Timeline‑Refresh alle 10–30 Sekunden ausreichend.
- WebSockets/SSE lohnen sich bei vielen gleichzeitigen Zuschauern, schnellen Updates oder chat‑ähnlicher Kollaboration.
Praktisch: API/Events so designen, dass Sie mit Polling starten und später auf WebSockets upgraden können, ohne die UI neu zu schreiben.
Observability für das Incident‑Tool selbst
Wenn diese App während eines Vorfalls ausfällt, wird sie Teil des Vorfalls. Fügen Sie hinzu:
- Strukturierte Logs (wer hat was geändert, mit Request‑Kontext)
- Metriken (Latenz, Fehlerquote, Queue‑Depth, WebSocket‑Verbindungen)
- Error‑Tracking (uncaught Exceptions, Frontend‑Crash‑Reporting)
Backups, Migrationen und eigenes Disaster Recovery
Behandeln Sie das wie ein Produktionssystem:
- Tägliche automatisierte Backups (und regelmäßige Restore‑Tests)
- Sichere Schema‑Migrationen (expand/contract Muster, Migration CI‑Checks)
- Ein minimales DR‑Plan: wie in einer neuen Region/Account hochfahren, und wie Daten zugänglich sind, wenn die Primärumgebung down ist
Schneller Prototyping‑Weg (ohne falsche Bindung)
Wenn Sie Workflows und Screens validieren wollen, ohne sich festzulegen, kann ein Vibe‑Coding‑Ansatz gut funktionieren: Nutzen Sie ein Tool wie Koder.ai, um aus einer detaillierten Chat‑Spezifikation einen funktionierenden Prototyp zu generieren, und iterieren Sie mit Responders während Tabletop‑Übungen. Da Koder.ai echte React‑Frontends mit Go + PostgreSQL‑Backends erzeugen kann (und Source‑Code‑Export unterstützt), können frühe Versionen als "throwaway prototypes" oder als Ausgangspunkt genutzt werden — ohne die gewonnenen Erkenntnisse zu verlieren.
Testen, Rollout und kontinuierliche Verbesserung
Die App ohne Generalprobe live zu schalten, ist ein Risiko. Die besten Teams behandeln das Tool wie jedes andere Betriebssystem: testen kritische Pfade, führen realistische Drills durch, rollen schrittweise aus und passen aufgrund echten Nutzungsverhaltens an.
Kritische Pfade End‑to‑End testen
Konzentrieren Sie sich zuerst auf Flows, auf die sich Menschen in Stress verlassen:
- Incident erstellen, Severity setzen und Responder benachrichtigen
- Updates posten (inkl. Status‑Änderungen), Reihenfolge in der Timeline prüfen, Edit‑Markierungen sicherstellen
- Incident lösen und schließen, dann Postmortem aus dem finalen Zustand generieren
- Links und Referenzen (Services, Owner, Tickets, Chat) intakt halten
Fügen Sie Regressionstests hinzu, die unveränderliche Eigenschaften prüfen: Zeitstempel, Zeitzonen und Event‑Ordering. Incidents sind Erzählungen — wenn die Timeline falsch ist, ist Vertrauen weg.
Berechtigungen und Auditierbarkeit verifizieren
Bugs bei Berechtigungen sind Betriebs‑ und Sicherheitsrisiken. Schreiben Sie Tests, die beweisen:
- Nur autorisierte Rollen können Severity ändern, Schlüssel‑Felder editieren oder Incidents schließen
- View‑only Nutzer können keine eingeschränkten Incidents sehen
- Jede sensitive Aktion hinterlässt eine Audit‑Spur (wer, was, wann), und das Audit‑Log ist nicht editierbar
Testen Sie auch „Nahe‑Misses“, z. B. ein Nutzer verliert mitten im Vorfall den Zugriff oder ein Team‑Reorg ändert Gruppenzugehörigkeiten.
Tabletop‑Übungen mit echten Responders durchführen
Vor breitem Rollout führen Sie Tabletop‑Simulationen durch, bei denen Ihre App die Quelle der Wahrheit ist. Wählen Sie Szenarien, die Ihre Org kennt (z. B. Partial‑Outage, Datenverzögerung, Drittanbieter‑Fehler). Achten Sie auf Reibungspunkte: verwirrende Felder, fehlender Kontext, zu viele Klicks, unklare Ownership.
Sammeln Sie Feedback sofort und verwandeln Sie es in kleine, schnelle Verbesserungen.
Pilot‑Rollout mit Feedback‑Loop
Starten Sie mit einem Pilot‑Team und ein paar vorgefertigten Templates (Incident‑Typen, Checklists, Postmortem‑Formate). Bieten Sie kurze Trainings und eine einseitige "How we run incidents"‑Anleitung aus der App verlinkt (z. B. /docs/incident-process).
Messen Sie Adoption‑Metriken und iterieren Sie an Reibungspunkten: Time‑to‑Create, % Incidents mit Updates, Postmortem‑Abschlussrate und Action‑Item‑Closure‑Time. Behandeln Sie diese als Produktmetriken — nicht nur Compliance‑Zahlen — und verbessern Sie kontinuierlich mit jedem Release.
FAQ
Wie definieren wir einen „Vorfall“, damit die App nicht unbrauchbar oder inkonsistent wird?
Beginnen Sie damit, eine konkrete Definition zu verfassen, auf die sich Ihre Organisation einigt:
- Was qualifiziert als Vorfall (Kundenimpact, Sicherheit, SLA/SLO-Verstoß, rein intern)?
- Wann beginnt/endet er (erster Alarm vs. Bestätigung; behoben vs. überwacht)?
- Welche Felder sind Pflicht (Service, Schweregrad, Verantwortlicher, Zeitstempel, Status)?
Diese Definition sollte direkt auf Ihre Workflow‑Zustände und Pflichtfelder abbilden, damit die Daten konsistent bleiben, ohne unnötig zu belasten.
Was sollte „Postmortem‑Management“ in einem v1‑Produkt enthalten?
Behandle Postmortems als einen Workflow, nicht als bloßes Dokument:
- Entscheiden Sie, für welche Vorfälle ein Postmortem nötig ist (alle vs. nur Sev‑1/2)
- Verwenden Sie eine Standardvorlage und füllen Sie sie automatisch aus Incident‑Daten (Timeline, Teilnehmer, Artefakte)
- Fügen Sie einen Review‑Status hinzu (Draft → In Review → Approved → Published)
- Machen Sie Action Items zu erstklassigen Objekten, damit Nachverfolgung messbar wird
Wenn Sie echte Veränderung erwarten, brauchen Sie Action‑Item‑Tracking und Erinnerungen — nicht nur Ablage.
Was sind die Muss‑Features für den ersten Release einer Vorfallverfolgungs‑Web‑App?
Ein praktisches V1-Set umfasst:
- Incident‑Intake (Titel, Service, Severity, Reporter; alles andere optional)
- Schnelle Updates (Status, Impact‑Zusammenfassung, Kurznotizen, nächste Schritte)
- Kombinierte Timeline (automatisch erfasste Änderungen + manuelle Events)
- Basis‑Rollen / Ownership (Commander/Owner sichtbar)
- Postmortem‑Erzeugung verknüpft mit Incident‑Schließung
- Action Items mit Owner, Fälligkeitsdatum, Status
Fortgeschrittene Automatisierung kann warten, bis diese Flows unter Stress zuverlässig funktionieren.
Wie sollten wir Incident‑Zustände und Transitionen gestalten?
Nutzen Sie eine kleine Anzahl vorhersehbarer Stadien, die dem tatsächlichen Vorgehen der Teams entsprechen:
- Detect → Triage → Mitigate → Resolve → Learn
Definieren Sie für jede Phase, was „done“ bedeutet, und fügen Sie Guardrails hinzu:
- Severity vor dem Verlassen der Triage erforderlich
- Zusammenfassung der Lösung erforderlich vor Markieren als Resolved
- Für Resolved → Investigating muss ein Wiederöffnungsgrund erfasst werden
Das verhindert hängende Vorfälle und verbessert spätere Analysen.
Welche Rollen sollte die App unterstützen und wie halten wir Verantwortlichkeiten klar?
Modellieren Sie wenige klare Rollen und koppeln Sie sie an Berechtigungen:
- Reporter: erstellt den Vorfall und liefert erste Kontextinfos
- Responder: fügt Updates, Timeline‑Events und Mitigations hinzu
- Incident Commander: weist Responder zu, genehmigt Severity, steuert Stakeholder‑Updates
- Reviewer: sorgt für Postmortem‑Qualität und Approval
Machen Sie aktuellen Owner/Commander im UI deutlich sichtbar und ermöglichen Sie Delegation (Neuzuweisung, Commander‑Rotation).
Welche Datenentitäten sollten wir modellieren und welche Beziehungen sind am wichtigsten?
Halten Sie das Datenmodell klein, aber strukturiert:
- Incident
- Service
- Update (internal vs. stakeholder‑facing)
- Timeline Event (zeitgestempelte Fakten)
- Action Item
- Postmortem
Verwenden Sie stabile Identifikatoren (UUIDs) plus einen menschenlesbaren Key (z. B. INC‑2025‑0042). Behandeln Sie Änderungen als Historie mit created_at/created_by und einem Audit‑Log für Änderungen.
Wie gehen wir mit internen Notizen versus stakeholder‑gerechten Status‑Updates um?
Trennen Sie Update‑Ströme und wenden Sie unterschiedliche Regeln an:
- Interne Updates: taktisch, hohe Frequenz, dürfen unordentlicher sein
- Stakeholder‑Updates: kuratiert, zeitgestempelt, oft vom Commander freigegeben
Implementieren Sie unterschiedliche Templates/ Sichtbarkeiten und speichern Sie beides im Incident‑Datensatz, damit Entscheidungen später rekonstruiert werden können, ohne sensible Details zu leaken.
Wie sollten wir Severity‑Levels in der App definieren und verwenden?
Definieren Sie Schweregrade mit klaren Erwartungen (Antwortgeschwindigkeit und Kommunikationsrhythmus). Beispiel:
- SEV1: sofort page; Updates alle 15–30 Minuten
- SEV2: schnelle Reaktion; Updates alle 30–60 Minuten
- SEV3: begrenzte Auswirkungen; Meilenstein‑Updates
- SEV4: informativ
Zeigen Sie die Regeln im UI dort an, wo die Severity gewählt wird, damit Responders während eines Ausfalls keine externen Docs suchen müssen.
Wie stellen wir sicher, dass Postmortem‑Action‑Items tatsächlich abgeschlossen werden?
Behandeln Sie Action Items als strukturierte Datensätze, nicht als Fließtext:
- Owner (eine verantwortliche Person)
- Fälligkeitsdatum
- Priorität
- Status (Open/In progress/Blocked/Done/Won’t do)
- Verifikationskriterien
Bieten Sie globale Ansichten (überfällig, diese Woche fällig, nach Owner/Service) und leichte Erinnerungen/Eskalationen, damit Nachverfolgung nicht nach dem Review‑Meeting verschwindet.
Wie verhindern wir, dass Integrationen (Alerts/Webhooks) doppelte Incidents erzeugen?
Verwenden Sie anbieterspezifische Idempotency‑Keys und Dedup‑Regeln:
- Speichern Sie einen eindeutigen Key wie
provider + alert_id + occurrence_id - Legen Sie Regeln fest, wann ein neuer Alert an ein bestehendes Incident angehängt oder ein neues erstellt wird (z. B. gleicher Service + Signatur innerhalb von 15 Minuten)
- Machen Sie die Webhook‑Verarbeitung idempotent, um Out‑of‑Order‑oder Retry‑Stürme zu handhaben
Ermöglichen Sie immer manuelles Verknüpfen als Fallback, wenn APIs/Integrationen ausfallen.