A semi-automated discovery system for product teams
The demo shows a discovery system built during a live product sprint โ 40+ participants, multiple data sources, synthesised themes and buy intent in one view. Here's how to build a version of this for your own sprint.
Sam Tasman-Jonesยท~12 min readยทClaude Projects ยท Otter.ai or Fireflies
The demo is a two-view discovery system: Data Feeds (where raw inputs land โ transcripts, Slack messages, CS notes) and a Project view (where they're synthesised into themes, sentiment, and buy intent).
I ran this across 40+ enterprise participants in a live product sprint. The raw input was interview transcripts from Otter.ai, Slack feedback from a customer channel, and CS notes. Claude synthesised each session on demand, and the project view surfaced the patterns across all of them.
The big unlock is that synthesis happens per session โ you can process one transcript at a time and the view builds up incrementally, rather than waiting until you have everything before running analysis. This makes it practical to run discovery continuously rather than as a one-off sprint.
What you need
๐ค
Claude.ai Pro (Projects)For session-by-session synthesis with persistent context across the project.
๐๏ธ
Otter.ai, Fireflies, or any transcription toolTo get your interview recordings into text. Plain text exported from any tool works.
๐
Your discovery question setA consistent set of 5โ8 questions across all sessions means Claude can compare across participants reliably.
๐
Notion or a spreadsheet (optional)To track participants and session status. Not required โ Claude can maintain a running log in the Project conversation.
โก Option 1 โ No code
Run a discovery synthesis sprint
This uses a Claude Project as your synthesis engine โ upload transcripts as they come in, run synthesis on each one, then run a cross-participant analysis at the end of the sprint. Everything in one place, no code required.
1
Define your discovery context first
Before uploading a single transcript, give Claude the frame it needs to synthesise against. Without this, synthesis is just summary โ with it, Claude tracks hypothesis validation, flags surprises, and builds a comparable signal set across every session. Run this in a new conversation (not the Project yet) and paste the output into your Project instructions in Step 2:
Discovery context interview
I'm setting up a discovery sprint and need your help defining the research frame before I start synthesising sessions. I want to end up with a concise "Discovery context" document I can paste into a Claude Project.
Walk me through these one at a time โ ask one question, wait for my answer, then move to the next:
1. Product context โ what are we building, who is it for, and what core problem does it solve?
2. Discovery objectives โ what are the 3โ4 key questions we need to answer by the end of this sprint?
3. Participant breakdown โ how many prospects vs customers? Any relevant segments or sub-groups I should track separately?
4. Hypotheses being tested โ what are the 2โ4 assumptions we're specifically testing? For each: what would validate it, and what would invalidate it?
5. Themes to track โ what topic areas should appear in every synthesis? (e.g. workflow fit, pricing sensitivity, data pain, competitor awareness, setup friction)
Once we've covered all five, output a clean "Discovery context" block I can paste directly into a Claude Project as system instructions. Format it as an active analytical lens โ not just background reading. Claude should use it to evaluate every session it synthesises.
๐ก
This 10-minute interview is the highest-leverage thing you can do before starting synthesis. It means every session is evaluated against the same frame โ so when you run the cross-participant analysis at the end, the patterns are already organised around the questions that matter.
2
Create a discovery Project and set the synthesis framework
Create a Claude Project for your sprint. Paste your discovery context from Step 1 first, then append these synthesis instructions below it โ together they form the Project instructions:
Project instruction
You are a product discovery analyst. I'm running a discovery sprint for [product name] with [number] participants split between [prospect type] and [customer type].
[Paste your discovery context output from Step 1 here]
When I upload a transcript or notes, synthesise it using this structure:
**Session synthesis โ [Participant name]**
Type: Prospect / Customer
Date: [date]
Facilitator: [if known]
**Top 3 themes from this session:**
For each: theme name | sentiment (positive/neutral/negative) | key quote
**Hypothesis signals:**
For each hypothesis from the discovery context: Validates / Invalidates / Neutral โ and the specific evidence
**Buy intent / Churn signal:**
[Prospects: High / Medium / Low intent with reason]
[Customers: High / Medium / Low churn risk with signal]
**Standout moment:**
The single most surprising or important thing from this session (1โ2 sentences)
Keep synthesis tight โ I'll be running this across [number] sessions and comparing patterns across all of them.
3
Upload and synthesise each session
As each transcript comes in, upload it to the Project and run:
Per-session synthesis prompt
Synthesise the attached transcript. Participant: [name], [company if relevant], [prospect or customer]. Date: [date].
After the synthesis, update the running participant log with this session โ I'll ask for the full log at the end of the sprint.
๐ก
You don't need to wait until all sessions are done. Run synthesis after each session and share the output with your team in Slack. The patterns start to emerge after 5โ6 sessions โ especially which hypotheses are holding and which aren't.
4
Run the cross-participant analysis
Once you have 10+ sessions synthesised, run this to get the full project-level view:
Sprint synthesis prompt
Across all [number] sessions you've synthesised, give me the full project view:
1. Hypothesis scorecard โ for each hypothesis from our discovery context: how many validate, how many invalidate, overall verdict, and the 2 strongest pieces of evidence on each side
2. Theme clusters โ top 5 themes, each with: mention count, split by prospect vs customer, overall sentiment, and 2 representative quotes
3. Sentiment overview โ overall positive/neutral/negative split for prospects vs customers separately
4. Buy intent breakdown (prospects only) โ High / Medium / Low with names and the key signal for each
5. Churn risk signals (customers only) โ High / Medium / Low with the specific signal that put them there
6. What to build next โ recommendation on the top 2โ3 priorities based on hypothesis validation, theme frequency, and commercial impact. Be specific and evidence-backed.
โ๏ธ Option 2 โ Start building
Build a live discovery dashboard
Don't jump straight to code. This system has enough moving parts โ sessions, themes, hypotheses, cohort splits, synthesis pipeline โ that getting the architecture wrong early creates real rework. Run Step 1 first to design the system properly with Claude, then Step 2 to build it.
1
Architect the system before writing code
Use this with Claude Code or claude.ai to design the system properly. It works through the decisions that actually matter โ data model, synthesis pipeline, hypothesis tracking, cohort comparison โ and outputs an architecture document you take into Step 2:
Architecture prompt
I want to build a discovery synthesis dashboard for a product sprint. Before writing any code, help me architect it properly.
Work through these with me one at a time โ ask the question, wait for my answer, then move to the next:
1. Data model โ what entities do we need? Think through: sessions, participants, themes, hypotheses, quotes, signals, synthesis outputs, cohorts. What relationships between them actually matter for the dashboard to work?
2. Synthesis pipeline โ does synthesis happen per-session on demand, in batch, or both? Where in the flow does the Claude API call sit โ on upload, on user trigger, or scheduled? What gets stored vs re-computed each time? What happens if a session is re-synthesised?
3. Hypothesis tracking โ hypotheses need to be evaluated per session (validates / invalidates / neutral) and aggregated across all sessions. How do we structure that cleanly without making it a manual tagging exercise every time a session comes in?
4. Cohort comparison โ if we're testing two product directions (Option A vs Option B) with the same or overlapping participant sets, or comparing prospects vs customers on the same questions, how does the data model handle that without duplicating sessions?
5. Cross-session query โ when someone asks "which hypothesis has the strongest validation?" or "who appears in both high churn risk and hypothesis invalidation?", that needs to run across synthesised data from all sessions. At 30โ60 session scale, what's the right approach โ structured JSON query, summarised context window, embeddings search, or something else? What are the tradeoffs?
6. Storage for v1 โ what's the simplest storage layer that handles: session state, per-session synthesis output, cross-session theme aggregation, and hypothesis tracking? When does it become a bottleneck, and what's the natural upgrade path?
7. Dashboard views โ what are the minimum views to make this system genuinely useful? For each view: what's the core question it answers, what data does it consume, and what interactions does it need?
Once we've worked through all seven, output:
โ A data schema showing each entity as a JSON structure with fields and types
โ A component tree for the dashboard with the data each component consumes and emits
โ The Claude API prompt chain: system prompt design, per-session synthesis call, cross-session analysis call โ with notes on what context each needs
โ A recommended build order with the reasoning behind the sequence
๐ก
The hypothesis tracking and cohort comparison questions (3 and 4) are where most people design themselves into a corner. The answers to those two questions drive most of the data model โ spend time there before moving on.
2
Build the dashboard
Once you have your architecture document from Step 1, use this with Claude Code to build the prototype. Paste your architecture output where indicated โ it replaces the generic instructions with decisions you've already made:
Build prompt
Build a discovery synthesis dashboard as a single self-contained HTML/JS file. No backend, no build step, no external dependencies beyond Satoshi font (Fontshare CDN).
Architecture to implement:
[Paste your architecture document from Step 1 here]
Layout and design system:
- Two-page tab structure at top: "Data Feeds" | "[Your project name]"
- Top bar: product wordmark left, "Discovery System" label centre, sync status badge right
- Colours: #fafafa page background, #ffffff card surfaces, #1a1a1a dark elements, #e5e5e5 borders, #6b6b6b muted text
- Warm gradient mesh behind the page (orange/pink/purple radial gradients fading to white at top)
- Pill buttons (border-radius: 50px), fadeSlideUp entrance animation on load elements
Data Feeds page โ build these components:
- Stats bar: Total inputs, Prospects count, Customers count, Pending synthesis count, Last sync timestamp
- Source tiles (3): Transcripts folder with file count, Slack feedback channel with live indicator dot, CS notes with entry count
- Session feed: 6 entries minimum, each showing filename or source, timestamp, participant type tag (Prospect / Customer), project tag, synthesis status badge (Pending / Synthesised)
- Session slide-in panel (click any entry to open): participant name + date + facilitator, metadata grid, transcript excerpt that blurs at the bottom edge, "Synthesise now" primary button โ 2-second spinner โ synthesis output (hardcoded), muted "Demo mode โ would call Claude API" note beneath the button
Project page โ build these components:
- Project header: project name, session count pills (total sessions, prospect count, customer count, last updated date), active sprint badge
- Option A / Option B toggle buttons with a description line beneath that updates per option
- Two-column layout per option (Prospects left, Customers right), each column containing:
โ Sentiment slider: gradient colour track, position marker dot, percentage label below
โ Hypothesis alignment section: 3 hypothesis cards per column, each with the hypothesis text, a "Validates" row with coloured avatar initials, an "Invalidates" row โ clicking a card opens a modal with full quotes and per-person verdict
โ Key themes section: 3โ4 theme cards per column, each with theme name, sentiment badge, avatar row โ clicking opens a modal with all supporting quotes and participant list
โ Buy intent section (Prospects column only): three buckets (High / Medium / Low), each with named participants + one-line signal
โ Churn risk section (Customers column only): three buckets (High / Medium / Low), each with named participants + specific risk signal
- Chat panel fixed to the right of the project layout: "Query signals" header, sub-label, pre-populated conversation with 3 exchanges (user question then Claude response), disabled input field with "Demo mode" label
Hardcoded data โ make it feel like a real sprint:
- 6 sessions: mix of synthesis states, named fictional people, specific fictional companies, realistic timestamps
- 3 theme clusters per cohort, each with 3+ verbatim-style quotes attributed to named participants
- 3 hypotheses tracked per option with a realistic validates/invalidates distribution (not all validating)
- Buy intent: 2 High, 3 Medium, 2 Low prospects with specific signals
- Churn risk: 2 High, 3 Medium, 2 Low customers with specific risk signals
- Chat: 3 pre-written exchanges โ one on hypothesis validation strength, one on why cohorts differ, one on overlap between churn risk and hypothesis invalidation
- No lorem ipsum. No "Company A." Named people, specific companies, specific quotes.
Product tour (5 steps, auto-starts on load):
- Step 1: Centred intro card, no spotlight โ what the system does in one sentence
- Step 2: Spotlight on stats bar โ inputs, sources, synthesis on demand
- Step 3: Switch to project page, spotlight on project header โ session count and sentiment overview
- Step 4: Spotlight on A/B toggle โ testing two directions across the same participants
- Step 5: Spotlight on chat panel โ querying the full dataset
No live API calls anywhere. All synthesis outputs, theme data, and chat responses are hardcoded. Actions that would trigger a real Claude call show a clearly labelled demo state.
Going further
โ
Connect Otter.ai or Fireflies webhooks โ when a recording is transcribed, it auto-lands in the data feeds queue for synthesis
โ
Add a Slack digest: every Friday, a synthesis summary drops into #discovery-sprint with the week's top themes and any high-intent prospects
โ
Add a Jira/Linear integration: each synthesised theme generates a draft issue with the evidence from participants linked โ one click to create the ticket
Want to build something like this for your team?
I design and build discovery infrastructure for product teams โ from frameworks to live synthesis systems. Let's talk.