Feature prioritization (RICE)
Purpose. Classify every feature doc under
features/, attach a measurable KPI to each, RICE-score them on one consistent scale, and derive the MVP-1 cut. This is a planning artefact derived from the feature architecture docs; it does not change any feature's design. When a feature doc's scope or status changes, re-score the row here.
1. Methodology
RICE = (Reach × Impact × Confidence) / Effort. The scales below are fixed so every row is comparable.
- Reach (1–10). Pre-launch proxy = the share of households that touch the feature in a typical quarter. 10 = every household, every session (the act surface, auth, consent, offline-first, the economy); ~6 = most households use it but not daily; ~3–4 = a meaningful minority; 1–2 = niche (therapist export, cash-out). It is a relative proxy, not a user count, because there is no live install base yet.
- Impact (RICE anchors). 3 = massive (make-or-break for the north-star or a legal blocker), 2 = high, 1 = medium, 0.5 = low, 0.25 = minimal.
- Confidence (100 / 80 / 50 %). 100 = built or fully specced with no open decisions; 80 = SDK-ready / clear scope with minor open questions; 50 = unresolved persona-model gaps, regulatory ambiguity, or an undecided build-vs-integrate / free-vs-paid question. The 50 % rows trace mostly to the persona-lens gap review (Owner⊇Admin contradiction, standalone-Helper, PIN ownership, kiosk identity, COPPA-guardian binding) and to design docs still marked DRAFT — under review.
- Effort (person-weeks). One integrated workstream's estimate to ship the feature with its tests and a review gate. UI-only-on-ready-SDK ≈ 1–2 pw; a domain reshape touching ledger + RLS + migration ≈ 5–6 pw.
Type. Functional = a user-facing capability (a thing a member/admin does). Non-functional = a quality attribute or cross-cutting concern (security, COPPA/privacy, accessibility floor, offline-sync, content-moderation, observability/analytics, audit, the authz model). Non-functional features are graded on operational KPIs (consent-capture %, crash-free rate, p95 sync latency, WCAG AA pass %, moderation coverage), not engagement.
Layer (per the two build surfaces — see index and
code). Frontend = design_system atoms + app blocs / pages /
auto_route, verified by visual-regression + flow tests. Data =
client_sdk service rules → adapters → models + Supabase schema / RLS /
migrations, verified test-first at the service level. Cross = needs both
substantially. Each row carries a 3–5 word build-approach note.
KPI philosophy. One north-star: Weekly Active Engaged Households (WAEH) —
households with ≥1 approved chore completion in the week, trending toward
token-fade progression (the intrinsic-motivation thesis: the economy should
recede as habits form). Every functional KPI rolls up to WAEH (the act loop, the
goal loop, the differentiators that drive return visits); every non-functional KPI
is an operational gate that protects WAEH (a COPPA failure or a sync-loss bug
ends engagement). KPIs name a concrete event/source wherever the analytics layer
can emit one (analytics-telemetry is the substrate that makes them measurable).
2. Master table (sorted by RICE, descending)
| Feature | Type | Layer (build approach) | KPI (+ how measured) | R | I | C | E | RICE | Tier |
|---|---|---|---|---|---|---|---|---|---|
| Today (chore surface) | Functional | Frontend — DS+bloc+flow-test | Completions / active member / week — chore_completed event → WAEH | 10 | 3 | 80% | 3 | 8.0 | MVP-1 |
| Onboarding | Functional | Cross — wizard UI + SDK setup | Activation rate: % new households completing setup + 1st chore — funnel onboarding_step_completed | 10 | 3 | 80% | 3 | 8.0 | MVP-1 |
| Member Profile | Functional | Frontend — DS+bloc+flow-test | Goals created / member; goal_created, goal_reached → token-fade thesis | 8 | 2 | 100% | 2 | 8.0 | MVP-1 |
| Terms & consent | Non-functional | Cross — consent record + re-consent gate | Consent-acceptance % (must be 100% pre-use); re-consent completion on change | 10 | 2 | 80% | 2 | 8.0 | MVP-1 |
| Catalog | Functional | Frontend — DS+bloc+flow-test | Browse→action conversion; reward_redeemed / chore_claimed / week | 9 | 2 | 80% | 2.5 | 5.8 | MVP-1 |
| Security & data protection | Non-functional | Data — RLS + encryption + key rotation | Zero RLS-bypass defects; crash-free rate; secret-rotation cadence met | 10 | 2 | 80% | 3 | 5.3 | MVP-1 |
| Personas (authz model) | Non-functional | Data — kind/role/owner model + RLS guards | Zero permission-escalation defects; access-matrix test coverage % | 10 | 2 | 50% | 2 | 5.0 | MVP-1 |
| Children's privacy (COPPA) | Non-functional | Cross — VPC capture + data-min + deletion | Verifiable-consent capture % of child members; zero minor-tracking events | 10 | 3 | 50% | 7 | 2.1 ‡ | MVP-1 |
| Offline sync | Non-functional | Data — Drift cache + conflict resolution | Offline action success %; sync conflict rate; p95 sync latency | 10 | 3 | 80% | 5 | 4.8 | MVP-1 |
| Visual timers | Functional ⭐ | Frontend — DS atom + local ticker | Timed-chore on-time completion lift; timer_started per timed chore | 6 | 2 | 80% | 2 | 4.8 | MVP-1 |
| Household | Functional | Frontend — DS+bloc+flow-test | Household-tab DAU; family-goal creation rate | 8 | 2 | 80% | 3 | 4.3 | MVP-1 |
| Notifications | Functional | Cross — local sched (free) + FCM/APNs (paid) | Notification opt-in %; re-engagement taps → WAEH | 8 | 2 | 80% | 3 | 4.3 | MVP-1 (local) |
| Routines | Functional ⭐ | Cross — SDK sequence model + Today UI | Routine completion rate; routine_completed/started (exec-function hook) | 7 | 3 | 80% | 4 | 4.2 | MVP-1 |
| Settings (Profile hub) | Functional | Frontend — nav scaffold + auto_route | Settings reachability; pending-item badge accuracy (route-through) | 8 | 0.5 | 100% | 1 | 4.0 | MVP-1 |
| Print & printables | Functional | Frontend — PDF gen (built) | Printable generation count (already built; envelope-column polish) | 4 | 0.5 | 100% | 0.5 | 4.0 | MVP-1 (built) |
| Step breakdown | Functional ⭐ | Cross — step list on chore + checklist UI | Stepped-chore completion lift; step check-off rate | 6 | 2 | 80% | 2.5 | 3.8 | MVP-2 |
| Accessibility (per-member prefs) | Non-functional ⭐ | Frontend — DS prefs + a11y floor | WCAG AA pass %; a11y-pref adoption (floor is an MVP-1 gate; prefs panel MVP-2) | 7 | 2 | 80% | 3 | 3.7 | MVP-2 (floor=MVP-1) |
| Money & Envelopes | Functional | Data — ledger reshape + RLS + migration | Funds-moved / active member / week; goal-envelope allocation % funds_moved | 9 | 3 | 80% | 6 | 3.6 | MVP-1 |
| Activity gating | Functional ⭐ | Data — gate-eval service (flag built) | Gated-activity unlock rate; activity_unlocked per household | 6 | 2 | 80% | 3 | 3.2 | MVP-2 |
| Kudos | Functional ⭐ | Cross — new model + timeline entry | Kudos sent / week (non-financial reinforcement → intrinsic motivation) | 6 | 2 | 80% | 3 | 3.2 | MVP-2 |
| Admin features | Functional | Cross — config hub over SDK services | Admin config-save events; % households finishing economy/catalog setup | 7 | 2 | 80% | 4 | 2.8 | MVP-1 |
| Dashboards | Functional | Frontend — read-only widgets + watch streams | Dashboard glance sessions / week; widget drill-through rate | 7 | 2 | 80% | 4 | 2.8 | MVP-2 |
| Account & profile management | Functional | Data — Supabase Auth wiring | Auth success rate; password-reset / email-change completion | 10 | 2 | 50% | 4 | 2.5 | MVP-1 |
| History & ledger | Functional | Cross — ledger read feed + UI | Ledger-view sessions / week (ledger_viewed) | 6 | 1 | 80% | 2 | 2.4 | MVP-2 |
| What's new / changelog | Functional | Frontend — versioned modal + local dismiss | Changelog view rate; post-update feature-awareness | 6 | 0.5 | 80% | 1 | 2.4 | MVP-2 |
| Support, help & feedback | Functional | Cross — FAQ + feedback form | Feedback submissions / week; support-deflection rate | 6 | 1 | 80% | 2 | 2.4 | MVP-2 |
| Kid-mode PIN lock | Functional | Cross — PIN store + locked view | Kid-mode activation rate on shared devices | 7 | 2 | 50% | 3 | 2.3 | MVP-2 |
| Analytics & telemetry | Non-functional | Cross — Mixpanel config-gated + consent | Event-pipeline coverage %; opt-in capture; zero minor PII (KPI substrate) | 8 | 1 | 80% | 3 | 2.1 | MVP-1 |
| Email digests | Functional | Data — Edge Function + email service | Digest open rate; admin opt-in % | 5 | 1 | 80% | 2 | 2.0 | Later |
| Roles & permissions (assign/invite) | Functional | Data — role-set service + invite flow | Role-assignment success; invite acceptance rate | 7 | 2 | 50% | 4 | 1.8 | MVP-2 |
| Allowance automation | Functional | Data — scheduled Edge Function + ledger credit | % households with allowance configured; allowance_paid job runs | 5 | 1 | 80% | 2.5 | 1.6 | MVP-2 |
| Appearance | Functional | Frontend — DsTheme prefs | Theme/density override usage % | 6 | 0.5 | 80% | 1.5 | 1.6 | MVP-2 |
| Child timeline | Functional ⭐ | Cross — activity feed + visual UI | Timeline views / child / week (reflection engagement) | 6 | 1 | 80% | 3 | 1.6 | Later |
| Chore photo submissions | Functional ⭐ | Cross — Storage + moderation + UI | Photo-submission rate; approval-with-photo % (blocked on moderation) | 6 | 2 | 50% | 4 | 1.5 | MVP-2 |
| Content moderation | Non-functional | Data — AI/human review + CSAM detection | UGC moderation coverage % (100% target); CSAM detect/escalation (gates photos) | 6 | 2 | 50% | 4 | 1.5 | MVP-2 |
| Privacy & GDPR | Non-functional | Cross — erasure + portability + consent records | Erasure-request fulfillment SLA; DPA in place | 6 | 2 | 50% | 4 | 1.5 | Later (pre-EU) |
| Subscription tiers | Functional | Cross — paywall + RevenueCat/Stripe + gating | Free→paid conversion; trial→paid (free/paid split undecided) | 6 | 2 | 50% | 5 | 1.2 | MVP-2 |
| OS widgets | Functional | Frontend — Glance / WidgetKit (per-OS) | Widget install rate; widget→app opens | 4 | 1 | 80% | 3 | 1.1 | Later |
| Backup, restore & portability | Non-functional | Data — export archive + restore path | Export-request fulfillment; restore success rate | 4 | 1 | 80% | 3 | 1.1 | Later (pre-EU) |
| Search | Functional | Data — Supabase FTS / trigram index | Search usage / session; search→action rate | 4 | 1 | 80% | 3 | 1.1 | Later (deferred) |
| Audit log | Non-functional | Data — append-only event store | Audit completeness %; admin audit-view usage | 5 | 1 | 50% | 2.5 | 1.0 | Later |
| Profile switching | Functional | Cross — local display context + PIN | Shared-device profile-switch rate | 6 | 1 | 50% | 3 | 1.0 | Later |
| Token fading | Functional ⭐ | Cross — fade engine (research-heavy) | Fade-progression % (the intrinsic-motivation north-star thesis) | 4 | 3 | 50% | 6 | 1.0 | Post-MVP (Phase 2) |
| TV & desktop lean-back | Functional | Frontend — adaptive/kiosk layout | Lean-back display uptime; daily active displays (kiosk identity unresolved) | 4 | 2 | 50% | 5 | 0.8 | Later |
| Localization & i18n | Non-functional | Frontend — ARB/intl externalization | Non-English MAU share (post-launch trigger) | 3 | 1 | 80% | 4 | 0.6 | Later |
| Referral & sharing | Functional | Cross — referral codes + attribution | Referral conversion; viral coefficient (needs PMF) | 3 | 1 | 50% | 3 | 0.5 | Post-MVP |
| Family calendar | Functional | Cross — calendar model OR integration | Calendar engagement (build-vs-integrate decision required) | 4 | 1 | 50% | 5 | 0.4 | Later (decision-gated) |
| Clinical OT framework | Functional ⭐ | Cross — Phase 2, external clinical review | Therapist-share usage; clinical adoption (HIPAA-gated) | 2 | 2 | 50% | 8 | 0.3 | Post-MVP (Phase 2) |
| Cash-out | Functional | Cross — payment rail + approval + ledger debit | Cash-out request rate (money-transmission regulatory risk) | 2 | 1 | 50% | 6 | 0.2 | Post-MVP |
⭐ = neurodiversity differentiator (the product's reason to exist).
‡ COPPA re-scored 4.8 → 2.1 — adopting under-13 support via verifiable parental consent raised effort (5 → 7) and lowered confidence (80% → 50%). It stays MVP-1: a legal blocker overrides RICE, so the row is left in place rather than re-sorted into the 2.x cluster.
3. The MVP-1 cut
Everything above the line delivers a compliant, offline-first, neurodiversity-affirming token economy a family can use daily. The set splits cleanly across the two workstreams (they build in parallel, but data leads — see §4).
Data-led MVP-1 (SDK / services / Supabase — service rule + RLS + migration)
- Personas (authz model) — pin the contested matrix decisions first (Owner-vs-Admin, standalone-Helper) so guards/RLS are correct.
- Money & Envelopes — the economy/ledger reshape (moveFunds + unallocated +
envelope generalization). Key dependency for goal-envelopes, allowance, and
the wallet transfer sheet; the append-only ledger + zero-floor +
walletOfare already built, so MVP-1 scope is the move/unallocated layer. - Offline sync — the offline-first promise; an architectural gate, not a screen.
- Security & data protection — RLS is built; encryption, key rotation, Storage ACLs finish the posture.
- Children's privacy (COPPA) — verifiable consent + data minimization + deletion path. A legal blocker: the product cannot launch to its audience without it.
- Admin features — the config hub (catalog/member/economy CRUD); without it a household cannot be set up beyond onboarding.
- Account & profile management — real Supabase Auth wiring (skeleton exists).
- Analytics & telemetry — the lightweight, consent-gated measurement substrate that makes every other KPI (starting with activation) observable.
Frontend-led MVP-1 (DS atoms + blocs + flow-tests)
- Today (chore surface) — the act loop / primary KPI surface.
- Onboarding — the activation funnel.
- Member Profile — six UI-only gaps over a ready SDK.
- Household — restructure to read-only people tiles + Family Goals.
- Catalog — browse + redeem.
- Routines + Visual timers — the two MVP-1 differentiators (routines is the
load-bearing first-then exec-function hook; timers are the cheapest concrete win,
estimateMinalready on the model). - Notifications (local tier) — free-tier reminders/approvals; push is MVP-2.
- Terms & consent — the consent-capture UI gate.
- Settings (Profile hub) — the nav scaffold the above route through.
- Print & printables — already built; rides along with envelope-column polish.
Explicitly deferred past MVP-1 (with the one-line why)
- Search — (user-signaled NOT MVP-1) a client-side catalog filter suffices until the catalog is large enough to justify full-text.
- Token fading — the north-star thesis, but research-heavy and gated on the Phase 2 clinical framework.
- Clinical OT framework — Phase 2; needs external clinical sign-off + HIPAA review.
- Cash-out — money-transmission regulatory risk; validate the token economy first.
- TV & desktop lean-back — the kiosk session/identity vs household-RLS question (gap review X7) is unresolved.
- Family calendar — needs an explicit build-vs-integrate (Skylight/Google) decision.
- Referral & sharing — wait for product-market fit and a growth need.
- Privacy & GDPR / Backup-portability — required before EU launch, not for the initial (US/CA) launch.
- OS widgets, Email digests, Localization, Audit log, Child timeline, Profile-switching — valuable but none are launch-blocking; they fast-follow.
4. Build-workstream note
The two sets sequence differently because the UI depends on the data layer, so data leads. A frontend feature is only "SDK-ready" once its service methods, models, and RLS exist — so the data-led MVP-1 (personas/authz, the money/envelope reshape, offline-sync, auth, security) must land first or in lockstep, and several frontend rows (Member Profile, Household, Catalog) are cheap precisely because that groundwork is already built and verified test-first. Non-functional bars are gates, not features: COPPA consent, household-scoped RLS, the accessibility floor baked into every DS atom, and content-moderation for any UGC are pass/fail entry conditions — they gate the release regardless of their RICE, which is why several sub-3.0 rows sit in MVP-1 while higher-scoring polish (dashboards, history-ledger) waits. Practically: the data workstream builds and TDD-verifies the service+schema slice, the frontend workstream builds the DS+bloc+flow-test slice against it, and each feature ships through its flutter review gate with the gates already green.
5. Low-confidence rows (scored at 50% — flagged)
These could not be scored with full confidence; their RICE will move once the underlying decision is made:
- Personas / Roles-permissions — the access matrix has live contradictions (Owner⊇Admin vs independent marks; standalone-Helper; zero-admin/zero-owner guards). Pinning the matrix semantics is the single highest-leverage fix per the gap review.
- Account-profile-management — auth wiring is deferred; last-owner-deletion and multi-house membership are open.
- Kid-mode / Profile-switching — PIN ownership (per-profile vs household-wide) is contradicted across the two docs.
- Chore photo submissions / Content moderation — moderation approach (AI vs human), CSAM escalation, and non-guardian-Helper visibility of child photos are unresolved.
- Subscription tiers — the free/paid feature split and non-owner-admin paywall routing are undecided; revenue Impact is real but unscheduleable until then.
- TV & desktop lean-back — depends on a dedicated kiosk identity + privacy-reduced household scope decision.
- Family calendar — build-a-calendar vs recommend-an-external-tool is an explicit open product decision.
- Token fading / Clinical OT — research- and clinical-review-gated (Phase 2).
- Privacy-GDPR / Audit-log / Cash-out — regulatory ambiguity (data residency, audit visibility, money-transmission licensing).