Skip to content

Skills · product-manager

feedback-synthesis

Turn raw customer feedback — interview notes, support tickets, NPS or CSAT verbatims, app-store reviews, sales-call notes — into ranked themes a product decision can rest on, each a problem statement rather than a feature request, counted by distinct people or accounts not mentions, with segments, severity kept separate from frequency, verbatim quotes with source IDs, what people value, where sources disagree, what the sample cannot tell, and the questions for the next interviews. A stdlib script computes the counts. Use when the user says "what are customers telling us", "synthesise this feedback", "find the themes in these tickets / reviews / NPS comments", "affinity map these interview notes", or "what should we fix first based on feedback".

Pack product-managerTier standardJob Decide what to buildv0.1.1

npx skilldrop-cli install feedback-synthesis
Other ways to install

With the sibling skills it hands off to:

npx skilldrop-cli install feedback-synthesis --with-related

The whole pack it belongs to:

npx skilldrop-cli install --pack product-manager

By hand, from a clone of the repo:

cp -R packs/product-manager/skills/feedback-synthesis ~/.claude/skills/

In Claude Code, with the product-manager plugin installed, invoke it as:

/product-manager:feedback-synthesis

Try it

A realistic prompt from the skill's acceptance evals:

I'm the PM for Tallyhouse, our invoicing app for small businesses. Q4 planning is next week and I need to know what customers actually told us in Q3. It's all in this folder: support-tickets.csv (35 tickets), nps-verbatims.csv (the 12 NPS responses that left a comment; the survey is anonymous) and interview-notes.md (5 customer interviews). What are the themes, and which should we act on first? The loudest thing in support is the CSV export, so I'm assuming that's number one.

What a good result looks like

Example output

Corbel salon booking, September feedback · the skill's own worked example, source

Worked example

A fictional booking app for hair salons. Sixteen items from three sources; the owner of the loudest ticket thread assumed the Instagram button was the priority because "everyone asks for it". It shows a repeat filer, a request rewritten into a problem, a one-segment theme, and a salon whose workaround hides it from the ticket count.

Input

The request: "Here's last month's feedback for Corbel: support tickets, CSAT comments and three interview notes. What should we fix first? Product wants to build the Instagram booking button next."

Support tickets (salon ID, plan, country)

IDSalonPlanCountryText
T-501S-12TeamUKA client rescheduled through the text link and got put in a slot Marta already had. Two clients turned up at 10am.
T-502S-12TeamUKHappened again today. Double booking from the reschedule link.
T-503S-12TeamUKThird double booking this month. We had to give one client a free fringe trim to calm her down.
T-504S-31TeamUKReschedule link let a client into a slot that was already booked.
T-505S-07SoloUKCan you add a button on Instagram so people can book from there?
T-506S-44SoloIEThe colours on the booking page don't match my brand.
T-507S-19TeamUKHow do I export my client list?
T-508S-52SoloUKBooking page font is hard to read on phones.

CSAT comments (1–5)

IDSalonScoreComment
C-01S-312The double bookings are going to cost us clients.
C-02S-074Love the deposit feature, no-shows have nearly stopped.
C-03S-605Deposits changed my business.
C-04S-443Fine, but I'd like the booking page to look more like my salon.
C-05S-525Easy to use.

Interview notes (quotation marks = the salon's words)

  • I-1, S-07, Solo, owner: "Nearly all my new clients find me on Instagram, then I send them the link in a DM. Half of them never book."
  • I-2, S-12, Team, manager: "I check the book every morning now because I don't trust the reschedule link."
  • I-3, S-73, Team, manager: Gets many new clients from Instagram; has never tracked whether they book. "We turned the reschedule link off after a double booking in our first week."

Coding sheet

inputs/booking-app-coded.csv: one row per item, salon ID as person_id. T-503 is S1 because the salon gave away a service; I-2 is S2 (a daily manual check); I-3's double booking is S3 because the salon has switched the link off. T-505 is coded to the Instagram problem, not to a "button" theme. T-506 and T-508 are separate themes: brand colours and legibility are different problems.

Script output (abridged)

- Items: 16; distinct salons with an ID: 8
- Most items from one salon: S-12 4, S-07 3, S-31 2, S-44 2, S-52 2

| Theme                      | Salons | Mentions | Ranking severity | By severity | One segment only           |
|----------------------------|--------|----------|------------------|-------------|----------------------------|
| reschedule-double-book     | 3      | 7        | S1               | S1 2, S3 1  | plan=Team (4 of 8 overall) |
| instagram-new-clients      | 2      | 3        | S3               | S2 1, S3 1  | -                          |
| page-hard-to-read-on-phone | 1      | 1        | S3 (1 report)    | S3 1        | -                          |
| page-brand-mismatch        | 1      | 2        | S4 (1 report)    | S4 1        | -                          |
| +deposits                  | 2      | 2        | -                | -           | plan=Solo (4 of 8 overall) |

- WARNING: S-12 accounts for 56% of reschedule-double-book's mentions
## Items with no theme
T-507, C-05

The reply

What salons told us in September

Fix the reschedule link before building the Instagram button. The reschedule link is putting clients into slots that are already taken: three salons, all on the Team plan, and one gave away a service to calm a client down. The Instagram request comes from two salons, and the problem behind it is new clients dropping off between a DM and a booking, which one owner puts at "half". Counts below are salons, not messages.

Themes, ranked

#ProblemWhoSeveritySources
1Rescheduling by text link books clients into slots that are already taken3 salons (7 messages, 4 from one salon); Team plan onlyBlocker: two clients arrive for one slot; one salon gave a free servicetickets, CSAT, interviews
2New clients found on Instagram are sent a link by DM and many never book2 salons (one Solo, one Team)Minor to major: one owner says half never book; the other hasn't measured itticket, interviews
3The booking page is hard to read on a phone1 salonMinor, one report: confirm firstticket
4The booking page doesn't match the salon's branding1 salon (2 messages)Cosmetic, one reportticket, CSAT

Evidence

1. Rescheduling books clients into taken slots

  • Who: S-12 (three tickets and an interview) and S-31 (a ticket and a CSAT score of 2), plus S-73, which switched the link off after one double booking. All three are Team salons; no Solo salon reported it.
  • In their words: "Two clients turned up at 10am." (T-501); "We had to give one client a free fringe trim to calm her down." (T-503); "The double bookings are going to cost us clients." (C-01); "I don't trust the reschedule link." (I-2)
  • What would change this: a Solo salon using the link without trouble would point at multi-staff calendars; no Solo salon in this set says whether it uses the link.

2. Instagram new clients drop off before booking

  • Who: S-07 (Solo) and S-73 (Team).
  • In their words: "Nearly all my new clients find me on Instagram, then I send them the link in a DM. Half of them never book." (I-1)
  • What they asked for: "Can you add a button on Instagram so people can book from there?" (T-505)
  • What would change this: S-73 has never tracked whether Instagram clients book, so the drop-off rests on one owner's estimate.

What not to break

  • Deposits: two salons, both Solo. "Love the deposit feature, no-shows have nearly stopped." (C-02); "Deposits changed my business." (C-03)

Where the sources disagree

  • S-07 rates the product 4 out of 5 in CSAT while losing "half" its Instagram leads in interview: the score doesn't reflect the problem it raised in conversation.

What this can't tell us

  • Tickets come from salons that hit a problem and wrote in. S-73 switched the reschedule link off and never filed a ticket, so salons with a workaround don't show up in the count.
  • CSAT is five comments from salons that chose to leave one; no score here describes the customer base.
  • Interviews are three conversations. Eight salons in total is enough to find problems, not to say how common they are.

Questions for the next interviews

  1. "Walk me through the last time a client rescheduled. What did you see in the book afterwards?" (theme 1; ask Solo salons too)
  2. "Have you switched off any part of Corbel? What made you do it?" (finds hidden workarounds like S-73's)
  3. "Which clients reschedule without a problem? What's different about those bookings?" (could disconfirm theme 1)
  4. "Tell me about the last new client who found you on Instagram. What happened between the DM and the appointment?" (theme 2)

Next: turn theme 1 into a brief, with the Solo-salon question as an open risk.

How it's checked

Measured against plain Claude Code (2026-10-23): it met 61% of its checks, against 38% without it, and a blind judge preferred it. How skills are checked

39 assertions across 5 acceptance evals, and 11 trigger queries. Every skill's checks

What the output must do
  • It corrects the premise: the CSV export problem comes from 2 accounts, and 6 of its 7 tickets are from one account (A-1042), so it is not ranked first on volume
  • It ranks card payments failing for clients (3 accounts: A-1107, A-1220, A-1315) above the blurry PDF logo (7 accounts), stating that payment failure blocks getting paid while the logo is cosmetic
  • It says the card payment failures come only from EU accounts (Germany, France, Netherlands), and reports the anonymous NPS comment N-06 beside the 3 accounts rather than adding it to make 4
  • It states the bulk-edit requests as the problem behind them (changing a rate means editing each recurring invoice by hand, 30 to 58 invoices) and keeps 'bulk edit' only as a quoted request
  • It does not make dark mode a theme with an invented reason: it reports the three anonymous NPS requests as having no stated need and turns the reason into an interview question
  • It names automatic payment reminders as something customers value and should not be broken, and notes the conflict with the accounts reporting reminders sent to a former contact
  • It names the limits of each source (tickets come from people with problems, 12 self-selected anonymous NPS comments, 5 interviews) and gives no percentage of the customer base
  • Every quotation is verbatim from the files with its ticket, response or interview ID, interviewer summaries are not put in quotation marks, and it invents no quotes or counts not in the input
  • It gives no percentage of users for any item, says 15 self-selected reviews cannot support one, and gives counts of reviewers instead
  • It counts the Strava request as 2 reviewers, not 3, because RunnerJo wrote two of the reviews
  • It ranks runs being lost where there is no signal (hilltrotter, trailmix) at or near the top as a data-loss problem, ahead of more often requested items that block nothing
  • It states the lost-runs and Apple Watch items as problems (recording stops without signal; running without the phone) rather than as 'offline mode' and 'Apple Watch app', and notes only one of the four Apple Watch reviews says why
  • It names the training plans as what reviewers value and should not be broken
  • It keeps to short bullets suitable for a Slack message, without a long report
  • Quotations are verbatim from the reviews, and it invents no reviews, reasons or counts not in the prompt
  • It counts SSO by distinct prospect: Harrowgate Logistics' two calls (C-01, C-03) count once, and the rep's own note on Norland (C-06) is not counted as a prospect asking, giving 2 prospects (Harrowgate and Brightwater)
  • It reports that SSO came only from prospects with 650 or more staff, that Norland (900 staff) did not raise it, and that no churned customer mentions it while noting that no churned respondent is in that size band
  • It identifies double-booking or clashes when jobs are reassigned as the most common churn theme (5 of the 10 exit responses: X-02, X-03, X-05, X-06, X-09) and notes that two prospects (C-02, C-07) raised the same problem
  • It states themes as problems (enterprise IT won't approve a rollout without central sign-in; reassigning a sick technician's jobs creates double bookings) rather than as feature names
  • It names the sampling limits: sales notes are prospects' words filtered through reps, and the exit survey covers leavers only
  • It does not put a rep's summary (such as C-08's pricing note or C-06's SSO note) inside quotation marks as the prospect's words, and every quotation carries its call or response ID
  • It states plainly how the evidence compares with the claim that every enterprise prospect asks for SSO, and ends with questions for the next interviews tied to the themes
  • It invents no quotes, deal values or counts not in the files; the only deal value cited is the rep's £84k estimate for Harrowgate, attributed to the rep
  • Counts the export-timeout issue by account, not by ticket: 10 tickets but only 3 accounts. It says outright that one account (ACC-1042 / Brightfen Logistics) filed 8 of those 10, and it does not rank export timeouts first because of ticket volume.
  • Groups the tickets worded as different feature requests ('Excel export', 'bulk edit', 'notes field', 'bank integration', the wrong balance on a statement, the overdue reminder sent after a deposit) into one problem: Tallyweave cannot record or show part-payments or instalments against an invoice. It counts this across 9 accounts in the tickets (10 distinct accounts if CSAT is included, with ACC-1023 counted once), and states it as a problem, not as a request for an Excel export.
  • Breaks themes down by segment and notes that the part-payment problem sits mostly in the Starter plan (7 of 9 ticket accounts). It also notes the SSO lockout affects only Enterprise accounts.
  • Calls out the SSO lockout (TW-4130, TW-4168: 2 Enterprise accounts, whole organisation unable to log in, no fallback) as a severe blocker. It rates severity separately from how often the issue appears, and does not bury the lockout or drop it because only 2 accounts raised it. It also says the lockout may need handling outside the one-fix-per-quarter budget, or names it as an explicit risk.
  • Spots that the sources disagree about receipt scanning. The tickets say it misreads amounts, while CSAT comments call it the best part of the product. It explains the gap by platform: all 7 scanning tickets (6 accounts) come from Android, and the 5 CSAT comments praising the scanner come from iOS.
  • Makes one clear recommendation for the single funded fix. The case rests on distinct accounts affected plus severity and business impact (e.g. churn threats, client-facing embarrassment), not raw ticket counts. It also says what evidence would change the call (e.g. account revenue, Brightfen's churn risk).
  • States what this sample cannot tell. Tickets only capture customers who contact support. CSAT covers a subset of accounts. The data has no revenue or seat-count weighting. It then lists specific follow-up questions or interviews to close those gaps.
  • Every quote is verbatim text from the two CSV files and carries its ticket_id or response_id. No count, percentage or account total is invented or fails to match the files (e.g. 48 tickets from 36 accounts; 16 CSAT responses).
  • Counts reviewers, not reviews. It notices that KitchenKween88 wrote 4 of the reviews complaining about the grocery-list paywall and ads. It reports that theme as roughly 4 to 6 distinct reviewers (depending on whether the ads-only and price-only reviews are included), not as 9 people.
  • Reframes the 'calendar view' requests as the problem underneath them: the number of people eating changes from night to night or week to week, so portions are wrong and food is wasted. The evidence is the review text (lowtide_lou, Priya_in_Leeds, Teo M.) and interviews P2, P4 and P5. It does not present 'build a calendar view' as the finding.
  • Flags the data loss after Sign in with Apple (2 App Store reviews on version 4.2.0; all saved recipes gone) as high severity despite being rare. It keeps severity separate from frequency, and may link this to P6 saying losing recipes would make them quit.
  • Notes that URL recipe-import failures are concentrated on one platform: all 5 such reviews are from Google Play, mostly on 4.2.0/4.2.1. It does not treat P3's smooth import on iPhone as evidence against the bug.
  • Surfaces the disagreement on price. Reviews call Premium too expensive and the paywall a bait-and-switch, while every interviewee calls the price fine or worth it. It explains the gap by recruitment bias: interviewees were active annual Premium subscribers. It does not declare either source right.
  • States what the sample cannot tell. App reviews self-select toward extremes. No free-tier or Android users were interviewed. Reviewers cannot be matched to interviewees, so people cannot be added up across the two sources. Six interviews are too few to estimate prevalence.
  • Gives round-2 recruitment and questions tied to the gaps found. Examples: recruit free-tier or lapsed users and Android users; ask how household headcount varies across a week and how people adjust portions now; probe the sign-in or update experience. Generic questions like 'what do you like about the app' do not count.
  • Every quote is verbatim text from the CSV or the interview notes, with its source (review author/date, or P1 to P6). No counts or percentages are invented or contradict the files (31 reviews, 28 distinct display names, 6 interviewees).
When it should and shouldn't activate

Should activate:

  • Here are 200 support tickets and last quarter's NPS comments. What are customers actually telling us?
  • Affinity map these eight interview notes into themes with quotes
  • Find the themes in our app store reviews and tell me what to fix first
  • Sales says every prospect wants SSO. Check that against the call notes and churn survey before it goes in the brief
  • Synthesise this CSAT export into the top customer pain points by segment

Should leave to another skill:

  • Write me an interview guide for talking to churned customers next week
  • Map our customer's onboarding journey from sign-up to first invoice, with pains at each stage
  • Summarise what these five industry reports say about four-day weeks
  • Churn jumped 3 points in August. Which of these explanations fits the evidence best?
  • Clean up our Jira backlog: duplicates, stale tickets and what to pull next
  • Turn this Slack thread about the export bug into a brief for the PRD

Hands off to

Related skills

backlog-triage, hypothesis-comparison, source-synthesis, user-journey-map

Source

SKILL.md · the whole folder on GitHub.