PRD & Architecture
Conversational Qual. Real clinical reasoning at scale.
Sagan brings AI-moderated async In-Depth Interviews into pharma research so a brand team gets 12 oncologist conversations in 48 hours, not 8 weeks - at a quarter of the agency cost.
- 3×
- Target depth
- 48h
- Target turnaround
- ¼
- Target cost
vs traditional surveys
vs 8 weeks
of agency IDI
02 · The Problem
Pharma qual produces decks, not decisions.
The bottleneck isn't the moderator's skill - it's the calendar. Every step is sequential, so the deck lands after the brand question has already moved. Async AI moderation collapses the sequence.
03 · Users and Buyers
Four people, one product.
BUYER
Priya - Insights Director
Top-20 pharma
- Job to be done
- Get directional read on physician sentiment 6× faster than current agency cadence.
- Top frustration
- Spends 6 weeks waiting on a deck that arrives stale.
- What success looks like
- Decision-ready findings in <72h with verbatim depth.
CONSUMER
Marcus - Brand Manager
Lung cancer franchise
- Job to be done
- Understand why oncologists pick a regimen so I can sharpen messaging.
- Top frustration
- Insights team's deck doesn't answer my actual targeting questions.
- What success looks like
- Ask follow-up questions in plain English and get cited quotes back.
RESPONDENT
Dr. Patel - HCP Respondent
Academic oncology
- Job to be done
- Share clinical thinking without burning 90 minutes on a video call.
- Top frustration
- Email recruitment + Zoom scheduling = wasted week, no honorarium worth it.
- What success looks like
- 20 minutes async, peer-to-peer feel, real clinical depth captured.
INTERNAL
Ankur - ZoomRx BD Lead
Internal commercial
- Job to be done
- Sell paid pilots faster by showing a live working demo, not slides.
- Top frustration
- Prospect sees pitch, asks to try it - and nothing exists to try.
- What success looks like
- Send a link, prospect runs a 5-min interview themselves, signs.
04 · Product Architecture
Deterministic where it matters. Probabilistic where it helps.
Full component / model / determinism table
| Component | Output | Model | Determinism |
|---|---|---|---|
| Discussion Guide (typed) | Section prompts + must-capture items | - | Deterministic · lib/sagan/discussionGuide.ts |
| Guide retrieval | Keyword-scored probe + branch selection (BM25-lite, not vector RAG) | - | Deterministic · engine.ts selectProbes |
| Moderator Prompt Builder | System prompt per turn, fed the live gaps | - | Deterministic · moderatorPrompt.ts |
| OpenRouter LLM | Moderator turn | claude-sonnet-4.5 | Probabilistic |
| Validation + Branch Engine | Coverage-gated section advancement + branch triggers | - | Deterministic · engine.ts |
| Quality metrics | Probe rate / depth / coverage / brand-leakage, per transcript | - | Deterministic · engine.ts computeQualityMetrics |
| PV / AE listener | EphMRA 4-criteria adverse-event flags (patient / reporter / product / event) + seriousness | - | Deterministic · pvListener.ts |
| Supabase persistence | Sessions + messages + synthesis | - | Deterministic |
| Synthesis Pipeline | Themes / drivers / brand perceptions / archetypes | claude-sonnet-4.5 (JSON mode) | Probabilistic w/ schema |
| Insights Dashboard | Charts + NL query + transcript drill-in | - | Deterministic |
Three deterministic guarantees · implemented in lib/sagan/engine.ts
- Mandatory section coverage - deriveSectionState extracts must-capture items from the respondent's words and blocks the transition until they are captured (an anti-stall cap of 2x target turns is the only turn-based guard). Watch the validator chips fill in the Live Moderator.
- Structured synthesis output schema - JSON-mode forces themes/drivers/brand/archetypes into typed shapes.
- Falsifiable quality SLAs - computeQualityMetrics scores probe rate, depth, coverage and brand-name leakage from each transcript, so a shallow interview fails on-screen rather than passing by assertion.
05 · Conversation Flow
Six beats. Then it synthesizes itself.
~20 minutes async. The last two nodes (accented) fire with no human in the loop - the same momentum you watch in the live progress bar.
- 01Warm-up~2 turns, persona context
- 02Patient walkthroughrecent case, branching
- 03Decision driverswhy this regimen
- 04Brand perceptionnamed brands, unaided
- 05Stimulus reactmessage / claim test
- 06Wrapfinal probe + close
- 07Synthesis firesthemes / drivers / archetypes
- 08Dashboard updatesnew completed session live
06 · Discussion Guide Framework
Six sections. Twenty-two minutes.
Warm-up
2 turns
Must capture
practice setting · avg new EGFR+ patients per quarter
Recent Patient Walkthrough
4 turns
Must capture
patient profile · chosen regimen · reason for choice
Decision Drivers
3 turns
Must capture
top 3 drivers · CNS handling preference · toxicity threshold
Regimen Perceptions
3 turns
Must capture
perceived strength and concern for each regimen
Stimulus React
2 turns
Must capture
shift trigger threshold
Wrap
1 turns
Must capture
one fix the respondent would make
07 · Quality Metrics
Three numbers that decide go / no-go.
All three are computed deterministically from the transcript by engine.ts and shown on the Live Moderator's summary scorecard - so a weak interview fails them on screen instead of passing by assertion.
Probe Rate
ComputedProbes per substantive answer, counted from moderator turns that dig vs. open a topic.
Computed live in the Live Moderator (engine.ts). Measures digging, not just running the guide.
Depth Score
Computed0-5 specificity of each respondent answer, scored on length, numbers, clinical markers and reasoning.
Computed live per transcript. A generic interview scores low and visibly misses the SLA.
Brand-name integrity
ComputedOff-guide brand names (Tagrisso, Rybrevant, Lazcluze...) the moderator introduced first.
Computed live. Replaces the unfalsifiable '0 hallucinations' claim with a checkable rule break.
08 · Competitive Positioning
Pharma-native depth. No horizontal tradeoffs.
Sagan / ZoomRx
Verified pharma panel + clinical-context guide + regulatory rigor. The wedge competitors can't copy without rebuilding the panel.
Horizontal AI moderation
Outset, Strella, Listen Labs. Deep AI moderation but no pharma panel - every study needs custom recruitment.
09 · Roadmap
Twelve months, three horizons.
- Land 3 paid pilots with Top-20 pharma BD relationships
- Ship the EGFR+ NSCLC vertical end-to-end (live moderator + dashboard)
- Probe Rate ≥ 0.6 across 50+ live interviews
- Voice-first mobile capture for the respondent
- Branching templates for 5 more oncology indications
- Cross-session NL query graduates from beta
- Expand from HCP qual to payer + patient async qual
- Real-time client co-watch (insights director sees responses live)
- API endpoint so client research teams can embed Sagan in their own workflows
10 · Provenance
Every claim is labelled.
Coverage-gated validator, branch engine, guide retrieval (engine.ts), the EphMRA 4-criteria AE listener (pvListener.ts), a live claude-sonnet-4.5 call, computed quality metrics and Supabase aggregation - each with a labelled deterministic fallback if no API key is set.
ZoomRx panel scale (60,000+ HCPs), coverage of 19 of the top 20 pharma, and competitor raises - all from public disclosures.
Pricing, turnaround and cost targets, seeded dashboard figures (badged in-app), the sample synthesis shown when live AI is off, and PV routing after an AE flag (detection is real; the 24h sponsor-inbox handoff is not performed in a demo).