// diagnose

Customer Interview Synthesis

Use when the user has done, or is doing, customer or buyer interviews and wants to turn the notes into something a persona, a positioning statement or a roadmap can rest on - or wants to know whether they have done enough interviews. Also use when the user mentions customer interviews, discovery interviews, user research synthesis, affinity mapping, jobs-to-be-done interviews, "what did we learn from the calls", or "how many interviews do we need". Counts coded themes across interviews rather than quotes, weights them by what the problem costs, separates patterns from anecdotes, and says whether the programme has saturated.

DiagnoseengineStarter
bash
$npx skills add sarojkjha/aaj-marketing-skills --skill customer-interview-synthesis
Or run it in Claude or ChatGPT through the AAJ engines connector

Claude Code

/plugin marketplace add sarojkjha/aaj-marketing-skills
/plugin install aaj-marketing-skills@aaj

OpenAI Codex

codex plugin marketplace add sarojkjha/aaj-marketing-skills
codex plugin add aaj-marketing-skills@aaj

Claude or ChatGPT — no install

Add this as a custom connector:

https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp
Recipes: vendor data in, a verdict out

// when to use it

Use when the user has done, or is doing, customer or buyer interviews and wants to turn the notes into something a persona, a positioning statement or a roadmap can rest on - or wants to know whether they have done enough interviews. Also use when the user mentions customer interviews, discovery interviews, user research synthesis, affinity mapping, jobs-to-be-done interviews, "what did we learn from the calls", or "how many interviews do we need". Counts coded themes across interviews rather than quotes, weights them by what the problem costs, separates patterns from anecdotes, and says whether the programme has saturated.

// what you give

Interview notes coded into themes, in the order the interviews were done, each with the segment of the person, a severity of 1 to 3 per theme, and optionally a quote, the workaround they use today and whether they said they would pay

// what you get

Every theme with the number and share of interviews raising it, its mean severity, a priority, a pattern / emerging / anecdote status, whether it belongs to one segment, quotes and workarounds; how many new themes each interview added; and a verdict - enough, keep going, too few, or saturated with no pattern

Engine spec

// decision it supports

Which customer problems are real patterns rather than anecdotes, and have we done enough interviews to act?

// inputs

Interview notes coded into themes, in the order the interviews were done, each with the segment of the person, a severity of 1 to 3 per theme, and optionally a quote, the workaround they use today and whether they said they would pay

// output

Every theme with the number and share of interviews raising it, its mean severity, a priority, a pattern / emerging / anecdote status, whether it belongs to one segment, quotes and workarounds; how many new themes each interview added; and a verdict - enough, keep going, too few, or saturated with no pattern

// acts or analyzes

Analyzes only

Makes no network calls, writes no files and changes nothing in your tools.

// where your information goes

How you run itWhere your inputs go
Skill installed in your agent, or the local MCP serverThe engine runs on your machine and AAJ receives nothing. Your AI agent still sends what you give it to its model provider (Anthropic, OpenAI and so on), under your own account's terms.
Hosted MCP serverYour agent's model provider, as above, plus AAJ's server on Cloudflare, which receives the engine inputs over HTTPS, runs them in memory and keeps no copy. Cloudflare keeps error logs (no inputs) for up to 7 days.

No engine needs customer names, emails or other personal data; leave them out.

// limitations

  • It counts and ranks your coding, not the notes. Theme names and severities are your judgement, and it won't merge near-duplicates such as 'double booking' and 'scheduling clash'.
  • The cut-offs (five interviews, 40% and three people for a pattern, 75% from one segment, no new theme in the last three) are AAJ engine rules, not research standards.
  • Themes without a severity rank on frequency alone, and without segment tags a theme that belongs to one kind of customer looks like everyone's.
  • 'Would pay' records what people said in an interview, not what they bought.

// review before acting

The founder or researcher who ran the calls checks the coding before a pattern goes into a persona or positioning: the same theme names across interviews, near-duplicates merged, and severity and segment filled in for each one.

// setup

install
$npx skills add sarojkjha/aaj-marketing-skills --skill customer-interview-synthesis
hosted mcp
$https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp

Agents listed: Claude Code, Cursor, OpenAI Codex, Windsurf, Cline. Tested and recorded: Claude Code.

Full spec on GitHub

Customer Interview Synthesis

Eight interviews produce forty pages of notes and one very quotable customer. The persona that comes out of that is usually a portrait of the quotable one. Synthesis is the step that stops that: count which problems came up across people, not how many times one person said it; weight each by what it costs them; and stop interviewing when new people stop adding new problems.

This skill does the counting. You do the coding - reading the notes and tagging each thing a person said with a theme and a severity - because the judgement of what two people meant by different words is yours. The engine then tells you which themes are patterns, which are one person's afternoon, which belong to one segment, and whether to book more interviews.

When to use

The user has interview notes and needs a decision from them: which problem to position on, which persona is real, what to build, or whether to keep interviewing.

Do not use it to design the interviews or the survey; customer-survey-design does that. Do not use it for closed-lost calls; win-loss-analysis has its own coding.

Before you start

  1. Code the notes. For each interview, list the themes raised, with a severity: 1 annoying, 2 costs time, 3 costs money or customers. Add a quote, the workaround they use today, and whether they said they would pay.
  2. Use the same theme names across interviews. The engine matches case-insensitively and trims spaces; it does not merge "double booking" with "scheduling clash". Merge those yourself.
  3. Tag the segment (role, company size, whatever you are comparing). Without it, a theme that belongs to one kind of customer looks like everyone's.
  4. Keep the interviews in order. Saturation is read from the sequence.

Method

Count interviews, not quotes. A theme's share is the number of interviews that raised it divided by the total. Five mentions from one person is one interview.

Weight by cost. Priority is share × mean severity, so a problem half the people have that costs them money outranks one everyone has that merely annoys them.

Pattern, emerging, anecdote. With five or more interviews (an engine rule), a theme raised by at least 40% of interviews and by at least three people is a pattern; by two or more people, emerging; by one, an anecdote. Below five interviews nothing is a pattern yet.

Segment-specific. With more than one segment, a theme drawing 75% or more of its mentions from one segment (an engine rule) is marked as that segment's. That is a persona boundary.

Saturation. The engine counts how many new themes each interview introduced. No new theme in the last three interviews (an engine rule), with at least five done, means the segment has saturated. Then:

  • enough: saturated with at least one pattern - stop and act on the top one;
  • saturated, no pattern: the problems are spread thin; the segment is too broad or the problem you are looking for is not theirs;
  • keep going: new themes still arriving; re-run after every two or three interviews;
  • too few: under five interviews; the emerging themes say what to probe next.

Hygiene: themes without a severity rank on frequency alone and are flagged; more than 60% of themes raised once means the coding is too fine or the sample is mixed; interviews without a segment are flagged when others have one.

Workflow

Step 1 - Code each interview the day it happens, while it is fresh.

Step 2 - Run after five, then after every two or three.

Step 3 - Merge near-duplicate themes the engine shows you side by side, and re-run.

Step 4 - Stop when it says enough. Take the top pattern, its quotes and workarounds into positioning-statement and persona-builder.

Step 5 - Open the next segment if a segment-specific theme is worth a persona of its own.

Run the tool

node resources/interview-synthesis.js --demo

run({ interviews, question }) returns the ranked themes with status, share, severity, priority, segment concentration, quotes and workarounds; the new-theme count per interview; findings; and the verdict.

Present the result

  1. The verdict and the interview count.
  2. The patterns, each with share, severity, one quote and the workaround people use today.
  3. The segment-specific themes, as persona boundaries.
  4. What to do next: act, or book two more interviews and say with whom.

Guardrails & common mistakes

  • Never build a persona from the most quotable interview. Count across people.
  • Never let the number of quotes stand for the number of people. One interview is one vote.
  • Do not call anything a pattern under five interviews. Call it emerging and probe it.
  • Do not stop because you are tired. Stop when the last three interviews added nothing.
  • Do not skip severity. A frequent annoyance is not a positioning platform; a costly problem half of them have might be.
  • persona-builder - the persona the patterns feed
  • customer-survey-design - quantifying a pattern across a larger sample
  • positioning-statement - positioning on the top pattern
  • win-loss-analysis - the same discipline for lost deals

// faq

// install

$npx skills add sarojkjha/aaj-marketing-skills --skill customer-interview-synthesis

// worked example

Get the worked example for Customer Interview Synthesis

One email. The filled-in config, the output, and how to read it.

No spam. Unsubscribe anytime.

// human in the loop

Need a human in the loop?

AAJ builds the strategies, tools, and playbooks these skills are made of — with engagements for growth-stage and enterprise teams.