Hey there,
Strong opinion: feedback is input; your system turns it into ships.
Many solo builders and Software Engineers collect plenty of opinions (DMs, email replies, random comments) but then stall. Notes live in screenshots and chats, so themes stay fuzzy. The loudest request wins over the most impactful one. And with no weekly cadence, nothing ships. I’ve seen teams of all sizes burn months here. You don’t need more tools; you need the smallest possible loop you’ll actually run every week.
Today, we’ll build a tiny system that converts noisy (and messy sometimes) input into a ranked “Top 3” you can ship, on repeat.
What we’ll cover:
One inbox for all feedback (no more hunting screenshots)
AI tagging with JTBD + severity “streetlights” (🔴/🟡/🟢)
A PFE quick rank (Pain, Frequency, Effort) so the best work rises fast
Quick note: this is tool-agnostic: Notion, Airtable, Google Sheets, text file. The loop matters more than the logo. :-D
Let’s jump straight to the moves.
5 Moves To Turn Feedback Into Weekly Ships (Even if You’re Solo)
You don’t need math. You need a ritual that kills ambiguity.
1) Funnel everything into one “inbox”
Create a table with these columns:
Date | Source (DM/email/review/session) | Raw Quote | JTBD | Severity (🔴/🟡/🟢) | Pain (1–3) | Frequency (1–3) | Effort (S/M/L) | Opportunity Hypothesis | Status
Set up (15 min):
Pick one home (Notion DB / Airtable / Google Sheet/ Excel).
Add a simple form (optional) so anyone can submit feedback.
After each touchpoint, paste raw notes. Don’t “clean it up”—capture first.
Why it works: Centralization removes the “where did they say that?” tax and makes patterns visible.
2) Auto-tag with AI (JTBD + severity streetlights)
Force every note to answer two questions:
What job are they trying to do? (JTBD)
How painful is it? (Severity)
JTBD format: “When I [situation], I want to [motivation], so I can [outcome].”
Severity streetlights: 🔴 Blocker, 🟡 Friction, 🟢 Nice-to-have.
Copy-paste prompt:
“Rewrite this feedback as a JTBD and assign Severity = Blocker/Friction/Nice-to-have. Return only: JTBD, Severity.”
Tip: Add quick examples in your prompt to anchor tone and specificity.
3) Merge duplicates into clear themes
Different people describe the same pain in five different ways. Don’t over-engineer, just group near-duplicates under a single canonical theme. Link the raw quotes to that theme for traceability.
How:
Filter by JTBD + Severity to spot clusters.
Create a theme row: short name + one-sentence description.
Move duplicates under it; keep counts visible (helps Frequency later).
Result: A short list of real opportunities instead of 50 scattered notes.
4) Prioritize with PFE Quick Rank (no formulas)
Keep it obvious and fast:
Pain (1–3): How bad is it when it happens?
3 = blocks core task, 2 = slows them down, 1 = cosmetic
Frequency (1–3): How often do we see it?
3 = common (daily/weekly), 2 = occasional, 1 = rare
Effort (S/M/L): Rough time to fix
S = <2h, M = half-day–1 day, L = >1 day
Decision rule:
Star anything with Pain=3 and Frequency ≥2.
From starred items, pick 2–3 with the lowest Effort.
If tied, prefer 🔴 over 🟡, onboarding over depth features, and anything that reduces support burden.
You’ve just ranked work without spreadsheets, guessy multipliers, or PM.
5) Close the loop weekly (Top 3 → ship → learn)
Book a 30–45 min “feedback triage” on the same day each week:
Review new items; JTBD + severity tag; merge duplicates.
Apply the PFE rule; pick a Top 3 that fits your real capacity.
Write a one-line acceptance criterion for each (keeps scope sane).
After shipping, log the impact (tickets down, activation up, fewer DMs).
Close the loop publicly with a tiny changelog.
One-line acceptance examples:
“A new user can complete signup without a session timeout on mobile.”
“CSV import handles 1,000 rows without blocking UI for >3s.”
“Billing page shows next invoice date and amount—no support ping required.”
3-line changelog template (steal this):
Fixed: Mobile signup timeout on slow networks (thanks @users who flagged).
Improved: CSV import now supports 1k rows smoothly.
New: Next invoice date/amount visible in Billing.
This builds trust, creates more relevant feedback next week, and compounds momentum.
That’s it.
3 hours → 20 minutes with AI
How this prompt works
Paste your last 15–30 raw feedback snippets (DMs, emails, comments). The AI will:
normalize each item into JTBD + Severity (🔴/🟡/🟢),
cluster duplicates into themes and count occurrences,
apply a PFE quick rank (Pain 1–3, Frequency 1–3, Effort S/M/L),
return a ranked Top 3 with one-line acceptance criteria, and
draft a 3-line changelog you can publish.
The core idea
You don’t need anything complicated. You need a small, opinionated assistant that forces structure, reduces duplicates, and picks the 2–3 lowest-effort, highest-pain/frequency items. Every single week.
Step-by-step
Copy the prompt below.
Paste your raw feedback as bullet points or one per line.
Skim the clusters and Top 3. Adjust Effort if you know it’s off.
Paste the changelog into your release note or email reply.
Repeat weekly.
Let’s dive into the prompt.
Role: You are my ruthless feedback triage assistant for a small product. Your job is to turn messy user feedback into a short, shippable plan for this week.
Context & Rules:
• Always convert raw quotes into JTBD: “When I [situation], I want to [motivation], so I can [outcome].”
• Assign Severity using streetlights: 🔴 Blocker (prevents core task), 🟡 Friction (slows task), 🟢 Nice-to-have (cosmetic/minor).
• Cluster duplicates into canonical themes (group similar notes; count how many raw items map to each theme = Frequency).
• Use PFE for quick ranking:
• Pain (1–3): 3 = severe/blocks core task; 2 = slows; 1 = cosmetic.
• Frequency (1–3): 3 = common (daily/weekly); 2 = occasional; 1 = rare.
• Effort (S/M/L): S < 2h, M = 0.5–1 day, L > 1 day.
• Decision rule: Star any theme with Pain=3 AND Frequency≥2. From starred items, pick 2–3 with lowest Effort. If tie: prefer 🔴 over 🟡, onboarding over depth, and anything that reduces support load.
Capacity this week: 3 items max.
Tie-breakers: onboarding > billing > reporting; mobile > desktop if equal.
INPUT — RAW FEEDBACK:
[PASTE 15–30 FEEDBACK SNIPPETS HERE — one per line. Keep user wording.]
OUTPUT — EXACTLY THIS FORMAT:
1. TABLE (Markdown) with columns:
Theme ID | Canonical Theme | JTBD | Severity | Pain(1–3) | Frequency(1–3) | Effort(S/M/L) | Evidence Count | Representative Quote
• 6–12 rows max, sorted by (Pain desc, Frequency desc, Effort asc).
• “Representative Quote” is 1 short, verbatim user line.
2. TOP 3 PICKS (This Week)
• For each pick:
• Theme ID + Title
• Why now (PFE rationale): e.g., “Pain 3 × Freq 3, Effort S”
• One-line acceptance criterion (objective, testable)
3. CHANGELOG DRAFT (3 lines)
• Fixed: …
• Improved: …
• New: …
4. FOLLOW-UPS (if needed)
• 1–3 precise questions you need answered to size Effort or clarify scope.
If any input is unclear, make a reasonable assumption and state it briefly in the Follow-ups.
The following is an optional “Live Capture” micro-prompt (for single new items)
Classify this feedback into JTBD and Severity (🔴/🟡/🟢). Suggest the likely Theme ID from my existing table based on similarity.
Return only: JTBD, Severity, Suggested Theme.
That’s more. What about if we want to run the prompt to support a CSV (Google Sheets/Excel friendly) or a Notion “inbox“ and format?
CSV-Optimized Prompt
How to use
Paste your last 15–30 feedback snippets into RAW_FEEDBACK.
Run the prompt. You’ll get three CSV blocks (themes + top-3) and a plain-text changelog.
Import the CSV blocks into Sheets/Excel (delimiter ;). Adjust Effort if needed, then ship.
ROLE: You are my ruthless feedback triage assistant. Turn messy feedback into a small plan I can ship this week.
RULES:
- Normalize each item to JTBD: “When I [situation], I want to [motivation], so I can [outcome].”
- Severity streetlights: 🔴 Blocker | 🟡 Friction | 🟢 Nice-to-have
- Cluster near-duplicates into canonical themes; count how many raw items map to each theme (= Evidence Count).
- PFE quick rank:
• Pain (1–3): 3 blocks core task; 2 slows; 1 cosmetic
• Frequency (1–3): 3 common; 2 occasional; 1 rare
• Effort (S/M/L): S <2h; M = 0.5–1 day; L >1 day
- Decision rule: Star any theme with Pain=3 AND Frequency≥2. From starred items, pick 2–3 with lowest Effort. Ties: prefer 🔴 over 🟡, onboarding over depth, and anything that reduces support burden.
- Capacity this week: max 3 items.
OUTPUT FORMAT — RETURN EXACTLY FOUR CODE BLOCKS IN THIS ORDER AND NOTHING ELSE:
1) ```THEMES.csv``` — semicolon-delimited CSV with header:
Theme ID;Canonical Theme;JTBD;Severity;Pain;Frequency;Effort;Evidence Count;Representative Quote;Starred
- 6–12 rows, sorted by Pain desc, Frequency desc, Effort asc.
- Representative Quote = a short verbatim line.
- Starred = TRUE/FALSE per decision rule.
2) ```TOP3.csv``` — semicolon-delimited with header:
Theme ID;Title;Why Now (PFE);Acceptance Criterion
- 2–3 rows only.
3) ```CHANGELOG.txt``` — three lines, starting with:
Fixed: ...
Improved: ...
New: ...
4) ```FOLLOWUPS.txt``` — 1–3 precise questions I must answer to size Effort or clarify scope (or “None”).
CSV RULES:
- Delimiter = semicolon `;`
- Quote any field that contains a semicolon or comma
- Escape quotes by doubling them
INPUT — RAW_FEEDBACK (one per line):
[PASTE 15–30 FEEDBACK SNIPPETS HERE, ONE PER LINE]
Optional single-item capture (CSV-flavored):
Classify this single feedback as: JTBD;Severity;Suggested Theme (free text). Return one semicolon-delimited line only.
FEEDBACK: "<paste raw quote>"
Notion Import-Safe Prompt (Markdown tables + checkboxes)
How to use
Run the prompt, then copy the two Markdown tables into Notion.
After pasting, set property types:
Canonical Theme = Title
Severity/Effort/Status = Select
Pain/Frequency/Evidence Count = Number
Starred/Shipped = Checkbox
The “Top 3” table can live as a separate board/view.
ROLE: You are my feedback triage assistant. Output Notion-friendly artifacts I can paste directly.
RULES:
- Normalize to JTBD (“When I [situation], I want to [motivation], so I can [outcome].”)
- Severity: 🔴 Blocker | 🟡 Friction | 🟢 Nice-to-have
- Cluster into canonical themes; count mapped items = Evidence Count.
- PFE quick rank:
• Pain (1–3) | Frequency (1–3) | Effort (S/M/L)
- Decision rule: Star items with Pain=3 AND Frequency≥2, then pick 2–3 with lowest Effort (ties: prefer 🔴, onboarding, support reduction).
- Capacity: max 3 items.
OUTPUT — EXACTLY THIS, IN ORDER (NO EXTRA TEXT):
1) PROPERTIES (plain text list of recommended Notion types)
- Canonical Theme: Title
- Theme ID: Text
- JTBD: Text
- Severity: Select (🔴 Blocker, 🟡 Friction, 🟢 Nice-to-have)
- Pain: Number
- Frequency: Number
- Effort: Select (S, M, L)
- Evidence Count: Number
- Representative Quote: Text
- Starred: Checkbox
- Shipped: Checkbox
- Status: Select (To Triage, Selected, Shipped)
2) THEME BACKLOG (Markdown table)
| Canonical Theme | Theme ID | JTBD | Severity | Pain | Frequency | Effort | Evidence Count | Representative Quote | Starred | Shipped | Status |
|---|---|---|---|---:|---:|---|---:|---|---|---|---|
<!-- 6–12 rows, sorted by Pain desc, Frequency desc, Effort asc. Starred/Shipped = TRUE/FALSE. Status default = "To Triage". -->
3) TOP 3 (THIS WEEK) (Markdown table)
| Theme ID | Title | Why Now (PFE) | Acceptance Criterion | Starred | Shipped | Status |
|---|---|---|---|---|---|---|
<!-- 2–3 rows. Status default = "Selected". -->
4) CHANGELOG (plain text, 3 lines)
Fixed: ...
Improved: ...
New: ...
5) FOLLOW-UPS (bulleted list, 1–3 items or “None”)
INPUT — RAW_FEEDBACK (one per line):
[PASTE 15–30 FEEDBACK SNIPPETS HERE, ONE PER LINE]
Optional micro-prompt for single items (Notion-friendly):
Return this as a Notion table row:
| Canonical Theme | Theme ID | JTBD | Severity | Pain | Frequency | Effort | Evidence Count | Representative Quote | Starred | Shipped | Status |
Classify and fill. Defaults: Evidence Count=1, Starred=FALSE, Shipped=FALSE, Status="To Triage".
FEEDBACK: "<paste raw quote>"
Sample data
Regardless of whether you’re using the general version or any specific target format prompt, data is what makes the difference, so the following is a sample limited dataset of feedback messages from users.
Imagine this might contain a wide variety: blockers, frictions, nice-to-haves, onboarding, billing, mobile, performance, accessibility, analytics, exports, email deliverability, error messages, and an edge case with quotes/semicolons.
You can paste the block in the RAW_FEEDBACK section of each prompt.
[Email] On mobile (Android, Chrome), the signup button does nothing after I fill the form—keeps spinning forever.
[DM] I never received the verification email; checked spam. Can you resend or give me an alternative?
[Session] CSV import froze at 850 rows; no error, just beachball for 2 minutes.
[Support] Billing page shows “unknown error” when I try to update my card (Visa, EU).
[Review] I love the idea, but I can’t find a simple “Export to CSV” with column headers—kind of a must-have.
[Email] Your dark mode looks great on desktop, but on iPhone the contrast is too low; can’t read secondary text.
[Twitter] Why do I need to create an account just to try a demo? A read-only preview would help.
[Call] The dashboard doesn’t refresh after I add a record; I have to hard refresh the page.
[Email] “Remember me” doesn’t seem to work—I’m logged out every morning.
[DM] Is there a way to invite teammates without paying extra? I only need them to view.
[Support] 2FA SMS took ~3 minutes to arrive; I missed the code window twice.
[Email] When I click “Resend code,” nothing happens (no toast, no email). Is it rate-limited?
[Session] Keyboard focus traps in the modal; can’t tab to the Submit button (accessibility).
[DM] I need webhooks for “record created/updated.” Zapier is fine, but direct webhooks would be cleaner.
[Email] Timezone confusion: I’m UTC+1; events show up “yesterday” in the list even though they happened today.
[Review] Pricing page doesn’t say if VAT is included; as an EU customer I’m hesitant.
[Email] The trial ended without warning—lost access in the middle of a task. Can you add a heads-up?
[Support] “Download PDF” button silently fails on Safari (macOS 14.5).
[DM] Search results feel off—exact matches aren’t on top; are you using fuzzy search?
[Session] Inline validation would help; I submit the form and only then see that one field was required.
[Email] I’m concerned about data deletion; how do I permanently delete my account and all records?
[Twitter] Any public roadmap? I want to see if SSO/SCIM is coming this year.
[Support] Autosave didn’t work; I lost 20 minutes after a browser crash.
[Email] The “Teams” feature says “coming soon” in docs, but the UI shows a Teams tab—confusing.
[DM] Bulk actions are missing; selecting 200 items one by one is painful.
[Review] The invoice PDF uses English only; can I switch to Italian for tax filings?
[Email] I can’t paste multi-line text into the Notes field; it strips line breaks.
[Support] Error message “Something went wrong; try again” isn’t helpful—what should I check?
[DM] “Quick add” CTA looks like a button but is just text; almost clicked three times.
[Session] The tooltip covers the input I’m typing into—annoying on small screens.
[Email] The OAuth with Google fails if the account uses SSO; gives a cryptic error.
[Support] Exported CSV uses commas inside fields and breaks in Excel; can you use proper quoting?
[DM] I keep getting email notifications for my own actions; let me choose which ones I get.
[Email] The API docs are missing example payloads for PATCH; hard to implement without them.
[Review] Would love an “Undo” for deletions—trash for 7 days would reduce anxiety.
[Support] The “Save” button is below the fold on 13” laptops; I didn’t realize I had to scroll.
[Email] When network drops, the app shows a white screen; can it retry or show offline mode?
[DM] Filtering by date doesn’t include the end date; 2025-08-01 to 2025-08-20 excludes 08-20.
[Support] “Owner can’t remove themselves” error when handing off the workspace; need transfer flow.
[Email] Minor: typo on onboarding step 2 (“adress”).
[DM] Small feature: keyboard shortcuts for save (Ctrl/Cmd+S) would be nice.
[Email] “Export; CSV” button label has a semicolon; also the tooltip says “Export “CSV” now” with quotes—looks odd.
In case you wanted to use the “single capture” using the micro prompts, you might use:
“Forgot password email never arrives—even after 10 minutes.”
“Search for exact project title shows nothing, but partial text works.”
“On iPad, modal close (X) is outside the viewport; can’t dismiss.”
Here’s what you learned today:
Centralize feedback and tag with JTBD + severity to reveal real jobs and pain.
Merge duplicates into themes, then use PFE to pick the best low-effort, high-pain/high-frequency items.
Run a weekly triage to choose a Top 3, ship, and post a 3-line changelog.
Do it this week: Block a slot. Import your last 20 messages. Run the JTBD+severity prompt, apply the PFE rule, pick your Top 3, write one-line acceptance criteria, ship one, and publish the changelog. Momentum beats perfect.
Hit reply and let us know why.
Now go build!
See ya next week,
— Ale & Manuel