Organize messy user research notes into meaningful clusters so you can identify patterns, prioritize themes, and make confident product decisions.
Template components
Raw Notes & Observations
Paste or write every individual observation, quote, or note captured during research — one idea per sticky note or row.
Example: "User said she always forgets where the export button is." / "P3 mentioned onboarding felt overwhelming on day one." / "Two users tried to find billing under Settings first."
Affinity Clusters (Themes)
Group related notes together under a descriptive theme label that captures the shared idea across all notes in that cluster.
Example: Theme: "Navigation Confusion" — includes notes about misplaced export button, unexpected billing location, and difficulty finding account settings across 6 participants.
Frequency & Severity Score
Record how many participants mentioned each theme and rate its impact on a 1–3 scale so you can objectively prioritize what to act on first.
Example: "Navigation Confusion" — mentioned by 7 of 10 participants, severity 3 (blocks task completion); "Slow load times" — mentioned by 3 of 10, severity 2 (causes frustration but workaround exists).
Recommended Actions
Write one concrete next step for each theme — a design change, a follow-up question, or a team to loop in — so insights don't stall in a doc.
Example: For "Navigation Confusion": run a card sort with 5 users to validate a revised information architecture before next sprint; share findings with the design lead by Friday.
Full Copyable Template
<div class="tmpl-full-doc">
<div class="tmpl-full-header">
<div class="tmpl-full-title">Affinity Mapping Template</div>
<div class="tmpl-full-meta">[Analyst] · [Date] · [raw research notes and observations]</div>
</div>
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">1. Analysis Setup</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Data source</div>
<div class="tmpl-full-field-value">[Raw research notes and observations from interviews, sticky note observations, and field notes]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Date range</div>
<div class="tmpl-full-field-value">[e.g. Jan 8, 2026 – Jan 22, 2026]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Analyst name</div>
<div class="tmpl-full-field-value">[e.g. Priya Shah]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Research question this analysis answers</div>
<div class="tmpl-full-field-value">[e.g. Where do users experience the most friction in completing cross-functional operational workflows?]</div>
</div>
</div>
<hr class="tmpl-full-divider">
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">2. Step 1 — Code Your Excerpts</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 1</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"I usually have the numbers in one dashboard, approvals in email, and the final update in Slack. By the time I piece it all together, the meeting has already started and I'm still screenshotting stuff."</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">tool switching</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">time pressure</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 2</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"Field note: participant paused for nearly two minutes looking for the latest status, then said, 'I never know which report is the real one unless I ask ops to confirm it.'"</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">data visibility gap</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">collaboration need</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 3</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"On the sticky note she wrote, 'I just copy the request into my own spreadsheet because if I wait for the system to update, nothing moves today.'"</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">manual workaround</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">time pressure</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 4</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"'The request is basically done, but it sits there until finance signs off, and if they're in meetings all afternoon, we're stuck.'"</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">approval bottleneck</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 5</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"Field note: during handoff discussion, participant said, 'I have to ping design, then sales, then legal—otherwise everyone assumes someone else owns it.'"</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">collaboration need</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">approval bottleneck</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 6</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"'Every Friday turns into report cleanup. The exports don't line up, the labels are different, and I spend an hour just making it presentable for leadership.'"</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">reporting friction</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">tool switching</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">manual workaround</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 7</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"Sticky note observation: 'We only notice something is off when a customer asks about it. Internally there's no clean view showing what's delayed or why.'"</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">data visibility gap</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">reporting friction</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Excerpt 8</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a">"'Honestly, the work itself is fine. It's the constant chasing—asking who approved what, checking three tools, then rewriting updates so the next team can actually use them.'"</div>
<div style="margin-top:8px;display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">collaboration need</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">tool switching</span>
<span style="display:inline-block;padding:3px 10px;background:#1a1a1a;color:#fff;border-radius:20px;font-size:12px;font-weight:600">approval bottleneck</span>
</div>
</div>
<div class="tmpl-full-tip">💡 Tip: A good code is short, reusable, and behavior-focused—it captures the underlying issue in the excerpt without rewriting the whole quote.</div>
</div>
<hr class="tmpl-full-divider">
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">3. Step 2 — Group Codes into Themes</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Workflow Inefficiency</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Users lose time stitching together information, reformatting outputs, and creating their own stopgap processes to keep work moving.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">time pressure · 2 excerpts</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">manual workaround · 2 excerpts</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">reporting friction · 2 excerpts</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Collaboration Friction</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Progress depends on repeated follow-ups, cross-team clarification, and manual coordination because ownership and handoffs are unclear.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">collaboration need · 4 excerpts</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Data & Visibility</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Teams struggle to find a trusted, up-to-date view of status and performance, making it difficult to act confidently.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">data visibility gap · 2 excerpts</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">reporting friction · 2 excerpts</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Process Bottlenecks</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Work stalls at specific approval and handoff points, creating delays that feel disproportionate to the remaining effort.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">approval bottleneck · 3 excerpts</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">time pressure · 2 excerpts</span>
</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label" style="font-size:16px">Tooling Gaps</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#555;margin-bottom:10px">Current tools do not support the full workflow, forcing users to bounce between systems and reconstruct context manually.</div>
<div style="display:flex;flex-wrap:wrap;gap:6px">
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">tool switching · 3 excerpts</span>
<span style="display:inline-block;padding:4px 12px;background:#f7f5f0;border:1px solid #e0ddd8;border-radius:20px;font-size:13px;color:#1a1a1a">manual workaround · 2 excerpts</span>
</div>
</div>
<div class="tmpl-full-tip">💡 Tip: When clustering codes into themes, look for repeated patterns in the problem—not just similar wording. A strong theme explains why several coded excerpts belong together.</div>
</div>
<hr class="tmpl-full-divider">
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">4. Theme Summary Cards</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Workflow Inefficiency · 4 total excerpts</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a"><strong>Key insight:</strong> Users spend significant effort compensating for broken workflow continuity rather than completing the actual task.<br><br><strong>Representative quote:</strong> "Every Friday turns into report cleanup. The exports don't line up, the labels are different, and I spend an hour just making it presentable for leadership."<br><br><strong>Recommended action:</strong> Simplify recurring workflow steps by standardizing outputs and reducing the need for manual re-entry or cleanup.</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Collaboration Friction · 4 total excerpts</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a"><strong>Key insight:</strong> Cross-functional work depends too heavily on informal follow-up, which creates uncertainty about ownership and slows handoffs.<br><br><strong>Representative quote:</strong> "I have to ping design, then sales, then legal—otherwise everyone assumes someone else owns it."<br><br><strong>Recommended action:</strong> Clarify ownership and handoff expectations with visible status indicators, named owners, and notification rules.</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Data & Visibility · 2 total excerpts</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a"><strong>Key insight:</strong> Teams do not have a shared, trusted view of current status, causing hesitation and repeated verification behavior.<br><br><strong>Representative quote:</strong> "I never know which report is the real one unless I ask ops to confirm it."<br><br><strong>Recommended action:</strong> Create a single reliable source of truth for status and reporting with clearer freshness and ownership signals.</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Process Bottlenecks · 3 total excerpts</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a"><strong>Key insight:</strong> Approval steps introduce avoidable waiting time, especially when downstream teams cannot see where requests are stuck.<br><br><strong>Representative quote:</strong> "The request is basically done, but it sits there until finance signs off, and if they're in meetings all afternoon, we're stuck."<br><br><strong>Recommended action:</strong> Audit high-friction approval points and redesign them with SLAs, escalation paths, or reduced approval requirements.</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Tooling Gaps · 3 total excerpts</div>
<div class="tmpl-full-field-value" style="font-style:normal;color:#1a1a1a"><strong>Key insight:</strong> Users are forced across multiple disconnected tools, increasing context switching and making routine tasks feel fragmented.<br><br><strong>Representative quote:</strong> "I usually have the numbers in one dashboard, approvals in email, and the final update in Slack. By the time I piece it all together, the meeting has already started and I'm still screenshotting stuff."<br><br><strong>Recommended action:</strong> Consolidate key workflow touchpoints or improve integrations so users can complete common tasks without jumping between systems.</div>
</div>
</div>
<hr class="tmpl-full-divider">
<div class="tmpl-full-section">
<div class="tmpl-full-section-title">5. Analysis Wrap-Up</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Top finding</div>
<div class="tmpl-full-field-value">[e.g. Users are not blocked by one single task—they are slowed by fragmented tools, unclear ownership, and manual reporting overhead across the workflow.]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Most urgent theme</div>
<div class="tmpl-full-field-value">[e.g. Process Bottlenecks]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Recommended next step</div>
<div class="tmpl-full-field-value">[e.g. Prioritize a workflow redesign workshop focused on approvals, reporting views, and cross-team handoffs.]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Share with (stakeholder)</div>
<div class="tmpl-full-field-value">[e.g. Head of Operations, Product Manager, Design Lead]</div>
</div>
<div class="tmpl-full-field">
<div class="tmpl-full-field-label">Date completed</div>
<div class="tmpl-full-field-value">[e.g. Jan 24, 2026]</div>
</div>
</div>
</div>
How to use it
Dump all your raw notes After your research sessions, paste every observation, quote, and field note into the Raw Notes section — don't filter or interpret yet, just get everything out.
Group notes into clusters Read through all notes and physically or digitally move similar ones together, then write a short theme label that honestly describes what connects them.
Score each theme by frequency and severity Count how many participants contributed notes to each cluster and rate how seriously the theme affects the user experience on a 1–3 scale.
Define one action per theme For every cluster, write a single specific next step — a design change, a stakeholder to brief, or a hypothesis to test — so the map drives real decisions.
What it looks like filled in
Navigation Confusion
"I kept looking for the export option under File — I never thought to check the dashboard header."
→ Redesign the top navigation to surface export and key actions as persistent, labelled icon buttons before the next usability round.
Overwhelming Onboarding
"There were so many steps on day one — I wasn't sure what I actually needed to do versus what was optional."
→ Introduce a progressive onboarding checklist that separates must-complete setup steps from optional feature discovery to reduce cognitive load.
Lack of Confidence in Data Accuracy
"I always double-check the numbers in a spreadsheet because I'm not 100% sure the dashboard is pulling from the right date range."
→ Add a persistent data source and date-range indicator to every chart so users can verify context without leaving the dashboard.
Why teams skip the template
Manually clustering hundreds of notes takes hours Moving sticky notes or rows one by one into theme groups is time-consuming and easy to abandon halfway through when research backlogs pile up.
Theme labels are subjective and inconsistent across teammates Two researchers grouping the same notes will often produce different clusters, making it hard to compare studies or build a reliable pattern library over time.
Insights lose urgency by the time the map is finished By the time you've clustered, scored, and written up actions — often days after fieldwork — stakeholder interest has moved on and the window to act has narrowed.
Analyze your user research notes automatically — no template needed