
User Research Analysis
- 537 installs
- 305 repo stars
- Updated March 4, 2026
- aj-geddes/useful-ai-prompts
user-research-analysis is an agent skill that synthesizes interview notes, survey results, and feedback into themes, pain points, and prioritized recommendations for developers and PMs validating product decisions.
About
user-research-analysis is a skill from aj-geddes/useful-ai-prompts that transforms raw user research into actionable product insight. It guides synthesis of qualitative interviews and quantitative surveys, pattern identification across responses, and validation of design assumptions through structured analysis steps documented in overview, quick start, reference guides, and best-practices sections. Developers and product engineers use it after collecting user feedback but before locking roadmap priorities, especially when disparate notes need consistent theming and severity ranking. The skill outputs clear pain-point clusters and recommendation lists suitable for tickets or PRDs rather than leaving bullet dumps in Slack. It complements prototyping skills by grounding experiments in observed user behavior. Skip it when you lack primary research data or only need statistical analysis of large automated telemetry datasets without qualitative context.
- Synthesizes qualitative interviews and quantitative survey data
- Identifies recurring themes, pain points, and opportunities
- Extracts representative quotes and validates design assumptions
- Produces prioritized user needs and stakeholder-ready insights
- Informs product scope and design decisions with evidence
User Research Analysis by the numbers
- 537 all-time installs (skills.sh)
- Ranked #730 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill user-research-analysisAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 537 |
|---|---|
| repo stars | ★ 305 |
| Last updated | March 4, 2026 |
| Repository | aj-geddes/useful-ai-prompts ↗ |
How do you analyze user interview and survey research?
Turn raw user interview notes, survey results, and feedback into clear themes, pain points, and prioritized recommendations that shape product direction.
Who is it for?
Developers and PMs with raw interview transcripts or survey exports who need structured synthesis before scoping features.
Skip if: Teams without collected user research or projects needing only quantitative analytics on production telemetry.
When should I use this skill?
The user uploads interview notes, survey data, or feedback and asks for themes, patterns, or prioritized recommendations.
What you get
Themed insight summary, ranked pain points, validated assumptions list, and prioritized product recommendations.
- Themed research summary
- Prioritized pain-point list
- Actionable product recommendations
Files
User Research Analysis
Table of Contents
Overview
Effective research analysis transforms raw data into actionable insights that guide product development and design.
When to Use
- Synthesis of user interviews and surveys
- Identifying patterns and themes
- Validating design assumptions
- Prioritizing user needs
- Communicating insights to stakeholders
- Informing design decisions
Quick Start
Minimal working example:
# Analyze qualitative and quantitative data
class ResearchAnalysis:
def synthesize_interviews(self, interviews):
"""Extract themes and insights from interviews"""
return {
'interviews_analyzed': len(interviews),
'methodology': 'Thematic coding and affinity mapping',
'themes': self.identify_themes(interviews),
'quotes': self.extract_key_quotes(interviews),
'pain_points': self.identify_pain_points(interviews),
'opportunities': self.identify_opportunities(interviews)
}
def identify_themes(self, interviews):
"""Find recurring patterns across interviews"""
themes = {}
theme_frequency = {}
for interview in interviews:
for statement in interview['statements']:
theme = self.categorize_statement(statement)
theme_frequency[theme] = theme_frequency.get(theme, 0) + 1
# Sort by frequency
// ... (see reference guides for full implementation)Reference Guides
Detailed implementations in the references/ directory:
| Guide | Contents |
|---|---|
| Research Synthesis Methods | Research Synthesis Methods |
| Affinity Mapping | Affinity Mapping |
| Insight Documentation | Insight Documentation |
| Research Validation Matrix | Research Validation Matrix |
Best Practices
✅ DO
- Use multiple research methods
- Triangulate findings across sources
- Document quotes and evidence
- Look for patterns and frequency
- Separate findings from interpretation
- Validate findings with users
- Share insights across team
- Connect to design decisions
- Document methodology
- Iterate research approach based on learnings
❌ DON'T
- Over-interpret small samples
- Ignore conflicting data
- Base decisions on single data point
- Skip documentation
- Cherry-pick quotes that support assumptions
- Present without supporting evidence
- Forget to note limitations
- Analyze without involving participants
- Create insights without actionable recommendations
- Let research sit unused
Affinity Mapping
Affinity Mapping
Affinity Mapping Process:
Step 1: Data Preparation
- Print or write user quotes on cards (one per card)
- Include source (interview name, survey #)
- Include relevant demographic info
Step 2: Grouping
- Place cards on wall or digital board
- Group related insights together
- Allow overlapping if relevant
- Move cards as relationships become clear
Step 3: Theme Identification
- Name each grouping with theme
- Move up one level of abstraction
- Create meta-themes grouping clusters
Step 4: Synthesis
- Describe each theme in 1-2 sentences
- Capture key insight
- Note supporting evidence
Example Output:
Theme: Discovery & Onboarding
Sub-themes:
- Learning curve too steep
- Documentation unclear
- Need guided onboarding
Quote: "I didn't know where to start, wish there was a tutorial"
Frequency: 8 of 12 users mentioned
Theme: Performance Issues
Sub-themes:
- App is slow
- Loading times unacceptable
- Mobile particularly bad
Quote: "I just switched to competitor, too slow"
Frequency: 6 of 12 users mentionedInsight Documentation
Insight Documentation
// Document and communicate insights
class InsightDocumentation {
createInsightStatement(insight) {
return {
title: insight.name,
description: insight.detailed_description,
evidence: {
quotes: insight.supporting_quotes,
frequency: `${insight.frequency_count} of ${insight.total_participants} participants`,
data_sources: ["Interviews", "Surveys", "Analytics"],
},
implications: {
for_design: insight.design_implications,
for_product: insight.product_implications,
for_strategy: insight.strategy_implications,
},
recommended_actions: [
{
action: "Redesign onboarding flow",
priority: "High",
owner: "Design team",
timeline: "2 sprints",
},
],
confidence: "High (8/12 users mentioned, consistent pattern)",
};
}
createResearchReport(research_data) {
return {
title: "User Research Synthesis Report",
executive_summary: "Key findings in 2-3 sentences",
methodology: "How research was conducted",
key_insights: [
"Insight 1 with supporting evidence",
"Insight 2 with supporting evidence",
"Insight 3 with supporting evidence",
],
personas_informed: ["Persona 1", "Persona 2"],
recommendations: ["Design recommendation 1", "Product recommendation 2"],
appendix: ["Raw data", "Quotes", "Demographic breakdown"],
};
}
presentInsights(insights) {
return {
format: "Presentation + Report",
audience: "Product team, stakeholders",
duration: "30 minutes",
structure: [
"Research overview (5 min)",
"Key findings (15 min)",
"Supporting evidence (5 min)",
"Recommendations (5 min)",
],
handout: "One-page insight summary",
};
}
}Research Synthesis Methods
Research Synthesis Methods
# Analyze qualitative and quantitative data
class ResearchAnalysis:
def synthesize_interviews(self, interviews):
"""Extract themes and insights from interviews"""
return {
'interviews_analyzed': len(interviews),
'methodology': 'Thematic coding and affinity mapping',
'themes': self.identify_themes(interviews),
'quotes': self.extract_key_quotes(interviews),
'pain_points': self.identify_pain_points(interviews),
'opportunities': self.identify_opportunities(interviews)
}
def identify_themes(self, interviews):
"""Find recurring patterns across interviews"""
themes = {}
theme_frequency = {}
for interview in interviews:
for statement in interview['statements']:
theme = self.categorize_statement(statement)
theme_frequency[theme] = theme_frequency.get(theme, 0) + 1
# Sort by frequency
return sorted(theme_frequency.items(), key=lambda x: x[1], reverse=True)
def analyze_survey_data(self, survey_responses):
"""Quantify and analyze survey results"""
return {
'response_rate': self.calculate_response_rate(survey_responses),
'sentiment': self.analyze_sentiment(survey_responses),
'key_findings': self.find_key_findings(survey_responses),
'segment_analysis': self.segment_responses(survey_responses),
'statistical_significance': self.calculate_significance(survey_responses)
}
def triangulate_findings(self, interviews, surveys, analytics):
"""Cross-check findings across sources"""
return {
'confirmed_insights': self.compare_sources([interviews, surveys, analytics]),
'conflicting_data': self.identify_conflicts([interviews, surveys, analytics]),
'confidence_level': self.assess_confidence(),
'recommendations': self.generate_recommendations()
}Research Validation Matrix
Research Validation Matrix
Validation Matrix:
Research Finding: "Onboarding is too complex"
Supporting Evidence:
Source 1: Interviews
- 8 of 12 users mentioned difficulty
- Average time to first value: 45 min vs target 10 min
- 3 users abandoned before completing setup
Source 2: Analytics
- Drop-off at step 3 of onboarding: 35%
- Bounce rate on onboarding page: 28% vs site avg 12%
Source 3: Support Tickets
- 15% of support tickets about onboarding
- Most common: "How do I get started?"
Confidence Level: HIGH (consistent across 3 sources)
Action: Prioritize onboarding redesign in next quarter#!/bin/bash
# validate-api.sh - Validate API specification
# Usage: ./validate-api.sh <openapi_spec>
set -euo pipefail
SPEC_FILE="${{1:?Usage: $0 <openapi_spec>}}"
echo "Validating API spec: $SPEC_FILE"
# TODO: Add API validation
# - Validate OpenAPI/Swagger syntax
# - Check endpoint naming conventions
# - Verify response schemas
# - Check for required headers
# - Validate authentication definitions
echo "API validation complete."
# API Endpoint Scaffold
# TODO: Customize for your API framework
openapi: "3.0.3"
info:
title: "API Service"
version: "1.0.0"
paths:
/api/v1/resource:
get:
summary: "List resources"
# TODO: Define parameters and responses
responses:
"200":
description: "Success"
post:
summary: "Create resource"
# TODO: Define request body and responses
responses:
"201":
description: "Created"
Related skills
How it compares
Use user-research-analysis for qualitative synthesis; use analytics skills when the source data is production metrics rather than interviews.
FAQ
What inputs does user-research-analysis accept?
The user-research-analysis skill processes user interview transcripts, survey results, and qualitative feedback. It identifies patterns and themes, then produces prioritized recommendations to inform product and design decisions.
How is user-research-analysis different from analytics dashboards?
user-research-analysis focuses on qualitative and survey synthesis to validate assumptions and surface pain points. It does not replace production telemetry analytics or large-scale automated metric pipelines.