Analyze customer feedback from any source. Categorize by theme, frequency, and severity. Output a synthesis with top themes, representative quotes, and recommended actions.
Install via CLI
openskills install shaan-ad/pm-os---
name: feedback-synthesis
description: "Analyze customer feedback from any source. Categorize by theme, frequency, and severity. Output a synthesis with top themes, representative quotes, and recommended actions."
---
# Feedback Synthesis
You analyze customer feedback and produce a structured synthesis report. Feedback can come from pasted text, files, or Slack channels (via MCP).
## Before Running
1. Check that `knowledge/` exists. If not, tell the user: "No knowledge base found. Run `/pm-setup` first."
2. Read `knowledge/pm-context.md` for product context, key metrics, and tone preferences.
3. Read `knowledge/okrs.md` for current objectives (to connect feedback themes to goals).
## Step 1: Collect Feedback
Ask the user: "How would you like to provide the feedback?"
Offer three options:
### Option A: Paste directly
"Paste the feedback below. It can be messy: support tickets, NPS comments, survey responses, Slack messages, email threads. I'll parse it all."
### Option B: Import from file
"Give me a file path (CSV, TXT, MD, or JSON). I'll read it and extract the feedback entries."
Read the file and parse it. Handle common formats:
- CSV: Look for columns like "feedback", "comment", "message", "text", "description"
- JSON: Look for arrays of objects with text fields
- TXT/MD: Treat each paragraph or line as a separate piece of feedback
### Option C: Pull from Slack (MCP)
Check if Slack MCP tools are available.
If available:
- Ask: "Which Slack channel should I pull from? And how far back? (e.g., #product-feedback, last 7 days)"
- Use Slack MCP to fetch messages from that channel and timeframe
- Filter for actual feedback (skip status updates, casual chat, bot messages)
If NOT available:
- Say: "Slack integration isn't set up. You can install the Slack MCP server for direct channel access. For now, paste the feedback or give me a file path."
## Step 2: Parse and Categorize
Once you have the raw feedback, process it:
1. **Extract individual pieces of feedback.** Each distinct complaint, suggestion, praise, or question is one entry.
2. **Categorize each entry by theme.** Create themes from the data (don't use pre-built categories). Typical themes: usability issues, missing features, performance, pricing, onboarding, specific feature requests.
3. **Rate severity for each entry:**
- **Critical**: User is blocked, churning, or losing money
- **High**: Significant friction, workaround required
- **Medium**: Annoying but manageable
- **Low**: Nice-to-have, minor polish
4. **Rate sentiment:** Positive, Negative, Neutral, Mixed
5. **Count frequency:** How many entries per theme
## Step 3: Generate Synthesis
Produce the synthesis in this format:
```markdown
# Feedback Synthesis: {date}
**Source**: {where the feedback came from}
**Entries analyzed**: {count}
**Date range**: {if known}
---
## Top Themes
### 1. {Theme Name} ({count} mentions, {severity})
**Summary**: {1-2 sentence description of what users are saying}
**Representative quotes**:
> "{actual quote from feedback}"
> "{actual quote from feedback}"
**Severity breakdown**: {X critical, Y high, Z medium}
### 2. {Theme Name} ({count} mentions, {severity})
{same structure}
### 3. {Theme Name} ({count} mentions, {severity})
{same structure}
{Continue for all themes with 2+ mentions. Single-mention items go in "Other Signals" below.}
---
## Sentiment Overview
- Positive: {count} ({percentage})
- Negative: {count} ({percentage})
- Neutral: {count} ({percentage})
- Mixed: {count} ({percentage})
---
## Other Signals
{Single-mention items that are notable}
---
## Recommended Actions
| Priority | Action | Theme | Rationale |
|----------|--------|-------|-----------|
| 1 | {specific action} | {theme} | {why this is the top priority} |
| 2 | {specific action} | {theme} | {rationale} |
| 3 | {specific action} | {theme} | {rationale} |
---
## Connection to OKRs
{Map the top themes to current OKRs if relevant. Call out themes that are NOT covered by any current objective.}
---
*Generated by PM-OS feedback-synthesis*
```
## Step 4: Save the Report
Write the synthesis to `knowledge/feedback/synthesis-{YYYY-MM-DD}.md`.
Tell the user: "Synthesis saved to `knowledge/feedback/synthesis-{date}.md`. This will show up in your `/pm-dashboard` and `/brief`."
## Step 5: Suggest Next Steps
Based on the findings, suggest specific PM-OS actions:
- If a critical theme emerged: "Consider running `/prd` to spec a fix for {theme}."
- If a competitor was mentioned: "Run `/competitive-intel` on {competitor} to understand their approach."
- If it connects to OKRs: "This feedback supports OKR {X}. Consider adding it to your `/prioritize` backlog."
- If a theme is new territory: "This theme isn't covered by current OKRs. Consider an `/opportunity-assessment` for {theme}."
## Behavior Notes
- **Use actual quotes.** Never fabricate or paraphrase quotes in the "representative quotes" sections. Use the exact words from the feedback.
- **Be specific in actions.** "Fix the onboarding flow" is too vague. "Add a progress indicator to the 5-step onboarding wizard" is better.
- **Don't over-categorize.** If there are only 10 pieces of feedback, 3-4 themes is plenty. Don't create a theme for every entry.
- **Flag data quality.** If the feedback set is small (<10), skewed toward one channel, or all from the same time period, note the limitations.
- **Respect the product context.** Reference the product stage and key metrics from `pm-context.md` when making recommendations.
No comments yet. Be the first to comment!