Skip to content

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.