Onset Killer-App Sprint Pre-mortem¶
Status: living doc. Reference at start of every sprint planning meeting. Last updated: 2026-05-23
Purpose¶
Stop building features in isolation. Every change should map to neutralizing one of the failure modes below. If you cannot map a proposed feature to one of them, defer it.
Failure modes (ranked by probability × damage)¶
1. Clinics try once and never invite a patient¶
Symptom: Practitioner signs up, lands on dashboard, clicks "Send your first protocol in 60 seconds," gets dropped into protocol builder, realizes they need a patient first, gives up.
Root causes (current state):
- Empty dashboard pushes protocol-first while assigning needs a patient first.
- Starter templates aren't seeded until a separate /templates visit.
- Supplement names are typed by hand despite a catalog existing.
- ?source=paste and ?source=scan query params on /protocols/new are silently ignored.
Neutralizers in this sprint: clinic-quickstart, clinic-seed-templates, clinic-autocomplete, clinic-fast-path-fixes.
2. iOS first-runners bounce before the paywall converts¶
Symptom: User opens app post-onboarding, sees a sparse Today tab, decides this isn't a real product, deletes.
Root causes:
- streakAndProgress, tomorrowPreviewCard, prepModeLauncher, expanded dailyJournalPanel, and protocolManagementPanel are built in TodayView.swift but not mounted.
- No insights surface on home.
- Practitioner status hidden in More tab.
Neutralizers: ios-mount-today, ios-practitioner-pill, ios-insights-card, ios-empty-copy.
3. Free practitioner-bypass users never convert to Pro¶
Symptom: Clinic-connected free users use the app daily and never see Pro value. Consumer revenue line stays flat.
Root causes: - Pro features (Intelligence, full analytics, modes) are buried behind tabs. - No "what you'd get with Pro" surface on Today. - Hard onboarding paywall fires before practitioner code bypass, so subscribers and bypass users follow divergent funnels with no later conversion path.
Neutralizers: ios-pro-teaser, revenue-soft-paywall, revenue-paywall-tracking.
4. Patient never connects after invite¶
Symptom: Practitioner sends invite, status: "sent", then has no idea if the patient installed, connected, or accepted. Concludes the tool doesn't work.
Root causes: - Portal has no delivery checklist. - Invite email failure can be silent.
Neutralizers: clinic-delivery-checklist, clinic-atomic-invite.
5. Marketing claims features that aren't enforced¶
Symptom: A practitioner notices PDF export "Pro feature" works on free, custom branding doesn't exist. Trust gone.
Neutralizers: gating-pdf, gating-branding, gating-weekly-email.
6. Today empty-state copy is wrong¶
Symptom: First-run users follow the breadcrumb "Protocol → My Practitioner" and can't find anything; it lives under More.
Neutralizer: ios-empty-copy.
7. Pre-FDA: outcome data isn't captured cleanly¶
Symptom: During FDA SaMD prep we have to migrate adherence and lab share schemas under audit, the worst time to refactor.
Root cause: No outcome_snapshots capture; audit table coverage is partial.
Neutralizers: fda-audit-coverage, fda-outcome-snapshots.
8. Two-step patient invite can silently fail¶
Symptom: POST /api/clinic/patients succeeds, POST /api/clinic/patient-invite fails, practitioner sees a phantom invited patient with no email sent.
Neutralizer: clinic-atomic-invite.
9. No "what to do next" signal anywhere¶
Symptom: Both sides lack a reason to come back tomorrow. No checklist, nudge, or streak surfaced.
Neutralizers: ios-mount-today (streak), clinic-delivery-checklist.
Sprint mapping¶
| Failure mode | Todos |
|---|---|
| 1. Clinics try once | clinic-quickstart, clinic-seed-templates, clinic-autocomplete, clinic-fast-path-fixes, clinic-lite-row |
| 2. iOS first-runners bounce | ios-mount-today, ios-practitioner-pill, ios-insights-card, ios-empty-copy, ios-onboarding-preview |
| 3. No free → Pro conversion | ios-pro-teaser, revenue-soft-paywall, revenue-paywall-tracking, revenue-personalized-upgrade |
| 4. Patient never connects | clinic-delivery-checklist, clinic-atomic-invite |
| 5. Trust-killer gating gaps | gating-pdf, gating-branding, gating-weekly-email |
| 6. Wrong empty-state copy | ios-empty-copy |
| 7. Outcome data not clean | fda-audit-coverage, fda-outcome-snapshots |
| 8. Silent invite failures | clinic-atomic-invite |
| 9. No "what's next" signal | clinic-delivery-checklist, ios-mount-today |
Out of scope (deliberately)¶
- LastVet integration sprint work. Spec-complete in
Onset/docs/provider-network/, does not move revenue in the next 3 weeks. - New iOS Pro features. Use what's already built.
- Reworking the protocol builder data model. Lite-mode is a UI affordance, not a refactor.
- Civilian provider OAuth / SMART-on-FHIR. Explicitly deferred in ADR-002.
Definition of done for this sprint¶
- A new clinic practitioner can sign up and get a real patient holding a real protocol in under 90 seconds without leaving the dashboard.
- A new iOS user lands on Today and sees a streak, practitioner connection, insight, and Pro teaser — not a sparse checklist.
- No marketing claim references a feature that isn't enforced in code.
- Every protocol mutation, share-consent toggle, lab share, and adherence push lands in
data_share_events.