Skip to content

Personas & User Stories

Multi-view by design: MIM fireground (doers), Stakeholder 10k-ft (watchers), Executive 30k-ft (deciders).


Major Incident Manager (MIM / IC)

  • As a MIM, I need to open an incident in <10s with only severity, summary, affected systems, and bridge link so that command starts before engineers context-switch.
  • As a MIM, I need to assign roles (MIM, Ops, Comms, Service Manager, Customer Ops) with join/leave history so that span-of-control is explicit during handoffs.
  • As a MIM, I need milestone drafts auto-cut from the timeline every N minutes so that I only edit for tone before publishing.
  • As a MIM, I need cadence nudges when last update > commitment so that execs never ping for status first.

Operations / Technical Recovery Lead

  • As an Ops Lead, I need active recovery paths with owner, timer, and outcome (pass/fail/abandon) so that parallel tracks stay visible and timeboxed.
  • As an Ops Lead, I need branch task queues (Infra / App / Cloud) so that I can direct work without stepping on other teams.
  • As an Ops Lead, I need a “current bet” field surfaced to stakeholders so that leadership knows what we’re trying right now.

Comms / Public Information Officer

  • As a Comms Lead, I need templates per severity and channel (email, Slack/Teams, status page) so that I can publish in <2 minutes without rewriting.
  • As a Comms Lead, I need distribution lists scoped by persona (stakeholder vs exec) so that the right people get the right fidelity automatically.
  • As a Comms Lead, I need an immutable comms log with timestamps so that post-incident reviews have a complete send history.

Service Manager / System Owner

  • As a Service Manager, I need to confirm or override customer-impact numbers so that public statements stay accurate.
  • As a Service Manager, I need to attach validation checklists per app/service so that resolution gating is explicit.

Executive Leader (30k ft)

  • As an Executive, I need a single-page brief showing phase, severity, impact, ETA to next update, and confidence so that I can decide whether to intervene.
  • As an Executive, I need risk-level and business-impact fields translated to business language so that I can update other leaders without technical mediation.

Internal Stakeholder (10k ft) / Support Manager

  • As a Stakeholder, I need a milestone feed with “last update” and “next update ETA” badges so that I don’t have to join the bridge.
  • As a Stakeholder, I need a way to subscribe/unsubscribe per incident so that I only get noise for things I own.

On-call Engineer / Responder

  • As a Responder, I need a minimal “what’s needed now” panel (lead, cadence, current bet, blockers) so that I can act without backscrolling chat.
  • As a Responder, I need to log timeline events with one keyboard shortcut so that the timeline stays accurate without slowing work.

KPI Source of Truth (cross-persona)

KPIs should live once and feed all views and scorecards.

  • Authoritative store: Add a KpiDefinition table in D1 with fields slug, name, description, owner, formula, units, targets (per severity/role), data_sources, and visibility flags. Keep the schema in migrations/ and mirror TypeScript types in apps/web/src/types/.
  • Recorded values: Add a KpiObservation table keyed by kpi_slug, incident_id, timestamp, value, source (manual, worker), confidence. Workers or the UI write to this; scorecards read from it.
  • Single publication point: Expose GET /kpis (definitions) and GET /incidents/:id/kpis (values) from the Worker API. All downstream scorecards (exec, stakeholder, responder readiness) consume these endpoints instead of recomputing locally.
  • Docs: Keep human-readable definitions and acceptance criteria in governance/kpis.md as the narrative source; keep the D1 schema + types as the technical source of truth. Link KPIs into personas here only for context.
  • Backfill & QA: Provide a CLI task mim kpi backfill --kpi mttr to recompute historical values from timeline events, with idempotent writes to KpiObservation for auditability.