πŸ“± Android Early Access β€” Sequencing Plan

Ordered for testability: get each feature into a state QA can exercise as early as possible, so we collect feedback while there's runway to fix. Keeps the proposed priority order, front-loads the access spine, fills the gaps.
Ship by
Jun 24
Donald back 22nd

Milestone roadmap

M0 Β· Access spineowner: Rhys Β· parallelUNBLOCKS QA

Installable Dev/Alpha/Beta build + Google login + minimal onboarding that reaches the home/call screen. Internal QA confirmed via Firebase App Tester β€” Alex is in and testing today. M0 now narrows to external/Play distribution for the Open Testing launch.

Exit: Play Open Testing track live; external testers can install via the Play listing.
PMF-3175 Play tracksInternal QA on Firebase App Tester βœ“
M1 Β· CallsSinger / Amos / RhysQA #1

Highest-risk, highest-value, mostly there. Reconnect on drop, session resume, network handover, 5001 recovery.

Exit: QA places a call, survives wifi↔LTE handover, recovers from drops.
M2 Β· TextsAmos (focused)QA #2

Chat reconnect, character-switch history UX, send-button stall recovery.

Exit: QA holds a text conversation, switches characters, recovers from stalls.
M3 Β· Login completenessRhysPARITY

+ gap Apple Sign-In (iOS has it; needed for iOS-user migration & account parity), delete-account (Play policy), sign-out. Locked to M3.

Exit: QA signs in with Google and Apple, can delete account.
M4 Β· SDUI cardsRhysQA #3

Framework, shell, carousel, Search card all done. Finish card content + post-call rendering.

Exit: QA sees cards in-call and in the post-call activity sheet.
M5 Β· Push + universal linksRhys / DonaldMUST-SHIP

Now in-scope (Open Testing commitment). FCM plumbing β†’ permission prompt β†’ text/waitlist push β†’ deep-link tap-through. + gap: universal links.

Exit: QA receives a push and deep-links into the right screen.
M6 Β· Waitlist gate + analyticsDonaldLAST

Land the gate early-and-cheap if it blocks sign-in testing; keep analytics events as final polish. Mostly-built framework needs Android wiring + verification.

Exit: non-allowlisted users hit waitlist screen; joined/approved events verified.
PMF-3090 Statsig gatePMF-3089 beta opt-inwaitlist_joined/approvedRudderstack/Bitdrift

Compressed timeline (β‰ˆ3 weeks)

Wk1 Β· Jun 2–8Wk2 Β· Jun 9–15Wk3 Β· Jun 16–24
M0 Access spine
spine + QA on
M1 Calls
QA #1
M2 Texts
QA #2
M3 Login (Apple)
parity
M4 SDUI cards
QA #3
M5 Push + links
must-ship
M6 Waitlist/analytics
last
Bars overlap intentionally β€” features land behind flags so a slip in one doesn't block QA of the others. M0 + M1 are the critical path; M6 is the only fully-deferrable bucket.

Gaps the original list was missing

βž• Add to scope

  • Distribution / release plumbing β€” Play tracks (PMF-3175), Firebase suffix builds, signing. The true M0; nothing is QA-able without it.
  • Onboarding flow β€” gender, agent audio sampler (CHA-55), greeting. Sits between login and calls/texts.
  • In-app waitlist gate β€” distinct from analytics; the /waitlist/status β†’ app-or-gate logic is a must-ship.
  • Universal / deep links β€” required by Open Testing + push tap-through + sesame.com/beta hand-off.
  • Settings / account parity β€” sign-out, delete-account (Play data-safety policy).
  • Profile / character parity β€” confirm release profiles reach Android (PMF-3194 was canceled β€” verify it's covered).

β›” Out of scope for 6/24

  • Android Auto (PMF-2704, PMF-2708) β€” backlog, Level 4, partner application + production rollout. Separate train; explicitly not part of Early Access.

❓ Confirm with team

  • Waitlist promotion cadence (time / count / manual) β€” sizes the M6 analytics work.

How to validate each milestone

Items to validate in Linear

Plan items that don't reference a Linear ticket β€” confirm whether each needs to be tracked, is already covered by an existing issue, or can be dropped.