PRODUCT MANAGEMENT · SHIPPED 0 → 1 · 2026
TesseraHealth
A voice-first AI care coordination platform for elderly patients in India - researched, designed, and built solo, 0 to 1. The app is live and fully functional.
- TIMELINE
- 2026
- ROLE
- PM · Solo, 0 to 1
- STACK
- React · Firebase · Azure OpenAI GPT-4o
- METHOD
- Interviews · Affinity Mapping · JTBD
HOW THIS STARTED
A PM class project I took all the way to shipped
Prof. Birju Shah's Product Management course at Kellogg. Most class projects end at the deck. I kept going - researched it, designed it, and built it myself until it was a real, working app.
149M
Indians 60+, cared for at home
21
Shift handoffs a week
0
Shared records between them
THE PROBLEM
Three people, three phones, zero shared record
Each one does their part. None of them read from the same page, because there is no page.
Om
Paper register + WhatsApp
Anika
Phone calls, another WhatsApp
Dr. Mehra
7 minutes, verbal recap
THE RESEARCH
Three interviews. Thirty minutes each.
A remote family caregiver in Delhi, a home care nurse in Mumbai, an outpatient physician in Jaipur.
"What she notices stays with her. It doesn't go anywhere useful."
Priya Nair, 38
Delhi · Family caregiver
"If I could just speak into my phone for one minute, that would be enough."
Ravi Shankar, 31
Mumbai · Home care nurse
"It would have to be one page. I have seven minutes. I cannot read a report."
Dr. Sunita Agarwal, 54
Jaipur · Physician
What changed
- The ER scenario wasn't hypothetical - it already happened, twice.
- The register is a ritual, not a tool anyone reads.
- One page, bullets, seven minutes. Not a preference - a ceiling.
THE SYNTHESIS
Three conversations, five patterns
Every quote and observation, grouped by pattern instead of by person.
Observations evaporate
One record, visible to everyone - not one WhatsApp thread.
Handoffs are lossy
A persistent handoff doc, not a rushed verbal one.
ER = information crisis
The QR card is core, not a nice-to-have.
Accountability gap
Timestamped records that protect everyone.
Format friction
Voice for nurses. Dashboard for family. One page for doctors.
If I ran this again - the AI-assisted version
Same three interviews, same real quotes. Instead of a wall and sticky notes, a structured clustering prompt - run against the actual transcripts, not a hypothetical.
Prerequisites
This only works if these are true before the notes get clustered:
- 1.Every interview logged in the same format: Participant, Pain, Behavior. Mixed formats can't be parsed reliably - this is why the three notes below all follow the same shape.
- 2.Pain points captured as verbatim quotes or close paraphrases. A summary like 'caregiver was frustrated' gives the model nothing to cluster on.
- 3.At least 3 interviews. This project had exactly 3 - right at the floor where clustering stops being pattern-matching on noise and starts being real signal.
Sample AI prompt - theme clustering on the real interviews
System
Below are structured notes from patient-care interviews. Each note follows: Participant: [role, location] | Pain: [verbatim quote or close paraphrase] | Behavior: [what they actually do today]. Your job: (1) Identify the recurring themes across all interviews. (2) For each theme, list which participants raised it and a supporting quote. (3) Flag any insight that appears only once but seems high-impact. Output format: THEME [N]: [name] ([X/Y] participants) | Quote: [quote] ([participant]) | Implication: [1 sentence]. Do not include preamble or closing commentary.
User
Participant: Priya Nair, 38, Delhi, family caregiver | Pain: "What she notices stays with her. It doesn't go anywhere useful." | Behavior: Calls the nurse directly for updates, no shared record exists. Participant: Ravi Shankar, 31, Mumbai, home care nurse | Pain: "If I could just speak into my phone for one minute, that would be enough." | Behavior: Logs shift notes in a paper register and a separate WhatsApp thread. Participant: Dr. Sunita Agarwal, 54, Jaipur, physician | Pain: "It would have to be one page. I have seven minutes. I cannot read a report." | Behavior: Gets a rushed verbal recap from family at the start of each visit.
Output
THEME 1: Observations evaporate (1/3 participants) | Quote: "What she notices stays with her. It doesn't go anywhere useful." (Priya Nair) | Implication: Carer observations need one shared record, not word-of-mouth. THEME 2: Format friction kills adoption (2/3 participants) | Quote: "If I could just speak into my phone for one minute, that would be enough." (Ravi Shankar) | Implication: Each role needs its own input format - voice for nurses, one page for physicians. THEME 3: Visit time is a hard ceiling (1/3 participants, high-impact) | Quote: "I have seven minutes. I cannot read a report." (Dr. Agarwal) | Implication: Raised once, but it's a design constraint, not a preference - weight it above its frequency.
Error handling (add to system prompt)
If notes don't follow the Participant / Pain / Behavior format, respond: "Note format is inconsistent. Please reformat your notes before re-running this prompt." Do not attempt to cluster inconsistently formatted inputs - a confident-looking theme from malformed notes is worse than no theme at all.
How I tested this prompt
"The exact 3 interview notes above"
Expected: Output lands on the same themes the manual affinity map found - proof the AI version reaches a real conclusion, not just a plausible one.
"Notes pasted as a loose paragraph, no template"
Expected: Prompt refuses and asks for reformatting instead of clustering nonsense from unstructured input.
"Dr. Agarwal's seven-minute constraint, raised by only 1 of 3"
Expected: Flagged as high-impact despite low frequency - it's the exact detail that became a hard product ceiling, not noise to average away.
THE PERSONAS
Built after the interviews, not before
Anxious Anika
Remote family caregiver
"The nurse notices everything. It just stays with her."
Changed: The observation happens. It just evaporates.
Overworked Om
Home care nurse
"I don't want to type. I don't have time to type."
Changed: My real competition isn't the register. It's inertia.
Dr. Mehra
Outpatient physician
"One page. Seven minutes. That's the ceiling."
Changed: Nurse adoption has to come first.
THE COMPETITIVE LANDSCAPE
Everyone solves one piece. Nobody closes the loop.
| Feature | Paper / WhatsApp | EHR / ABDM | Consumer Apps | TesseraHealth |
|---|---|---|---|---|
| Daily carer logging | – | – | ◐ | Voice-first |
| Cross-role visibility | – | – | – | Real-time |
| Physician pre-visit brief | – | – | – | AI-generated |
| ER emergency access | – | ◐ | – | QR, no login |
| Shift handoff record | ◐ | – | – | Structured |
WHAT SHIPPED IN V1
Four features. All load-bearing.
Voice Shift Logging
60–90 seconds by voice. No typing mid-shift.
Family Dashboard
Status + 7-day trend. No phone call needed.
AI Pre-Visit Brief
One page. 30 days. Seven minutes to read.
Emergency QR Card
No login. Meds and allergies in 3 seconds.
Every feature here is load-bearing.
Remove any one, and the loop breaks for at least one persona.
THE AI ENGINE
F3 isn't "use AI." Here's exactly what it does.
Azure OpenAI GPT-4o turns 30 days of voice shift logs into a one-page brief Dr. Mehra can read in her seven minutes. It summarizes and flags. It does not diagnose - that line is enforced in the prompt itself, not just the design principle.
Prerequisites
This only works if these are true before the brief gets generated:
- 1.At least a few logged shifts in the window. One entry can't show a trend - the brief has to say so instead of inventing one.
- 2.Medication names and dosages entered correctly. A typo'd drug name breaks interaction flagging silently, with no error to catch it.
- 3.Voice notes clear enough to transcribe. Heavy background noise or a two-second utterance degrades the summary the brief is built from.
Sample AI prompt - pre-visit brief
System
You are a clinical documentation assistant generating a one-page pre-visit brief for a physician with seven minutes to read it. Given the patient's shift logs and voice notes from the past 30 days, output: a 2-3 sentence trend summary, up to 5 notable dated events, the current medication list, and any items flagged for physician attention. Describe only observed symptoms, vitals, and events. Never state or imply a diagnosis.
User
"Day 12: BP 148/92, reported morning dizziness. Day 19: BP 152/94, skipped evening walk, low appetite. Day 25: BP 139/88, ate well, more alert, no complaints."
Output
{ "trendSummary": "BP trended upward through day 19, then improved by day 25 alongside better appetite and activity.", "notableEvents": [ "Day 12 - Morning dizziness reported, BP 148/92", "Day 19 - BP 152/94, reduced activity and appetite", "Day 25 - BP 139/88, improved appetite and alertness" ], "flaggedForPhysician": ["BP peak of 152/94 on day 19 - confirm if medication adjustment needed"] }
Error handling (add to system prompt)
If fewer than 3 shift logs exist in the past 30 days, prepend: "Limited data - only N log(s) in the past 30 days" rather than presenting a confident trend from sparse input. If symptoms described could suggest a specific condition, list them under flaggedForPhysician as observed facts only - never name or imply the condition itself.
How I tested this prompt before shipping it
"10+ consistent logs showing gradually rising BP"
Expected: Trend summary states the rise plainly; the peak gets flagged for physician attention.
"Only 1 shift log in the past 30 days"
Expected: Brief opens with the limited-data disclaimer instead of inventing a trend from one point.
"9 stable logs, 1 log mentioning severe chest pain"
Expected: The chest pain event stays flagged on its own, not averaged away by the stable majority.
"Logs mention chest pain and shortness of breath together"
Expected: Both symptoms listed as flagged facts for the physician - no condition named, per design principle 05.
THE PROCESS
The work underneath the screens
Interview guide
18 questions
Affinity map
5 themes
Personas
3, post-interview
User stories
20, with AC
Content model
8 data types
Wireframes
12 screens
MVC table
Full stack
Full PRD
44 pages
DESIGN PRINCIPLES
Six rules. Each one a decision.
Beat the workaround
Under 2 minutes, or Om abandons it.
Design from the weakest link
A dashboard on no carer data is worthless.
Continuity over completeness
A partial log beats a perfect one, skipped.
No login between ER and meds
Clinical urgency overrides access control.
AI structures. It doesn't diagnose.
Every output is a flag, never a diagnosis.
Simple as WhatsApp, trusted as a chart
Easy to use. Easy to believe.
THE PRODUCT
What it looks like end to end
TRADEOFFS
Three bets, made on purpose
Voice over typed
The only input that survives a real shift.
Web over native
No app-store detour before shift one.
AI as structure, not decision
A flag or a summary. Never a diagnosis.
WHAT I LEARNED
Four things for the next build
PRD before wireframes
Every tradeoff got argued out in writing first.
Design from the weakest link
Om's adoption is the whole platform's ceiling.
The ER card became core
One interview turned a hypothetical into a certainty.
Backcast from 2030
It showed which 2026 decisions actually mattered.
Thanks for reading. If you've ever tried to coordinate a parent's care from another city, this one was for you.








