
Ux Researcher Designer
- 875 installs
- 23.5k repo stars
- Updated July 17, 2026
- alirezarezvani/claude-skills
ux-researcher-designer is a UX research agent skill that generates data-driven personas, journey maps, usability test plans, and research synthesis from interview or survey data for developers validating product design.
About
ux-researcher-designer is a Claude skill packaged as a Senior UX Designer and Researcher toolkit. It provides structured workflows to generate user personas from research data, create journey maps, plan usability tests, and synthesize findings into actionable design recommendations. Trigger terms cover user research, persona creation, journey mapping, and design validation tasks. Developers and product engineers reach for ux-researcher-designer when they have raw interview transcripts or survey responses and need structured UX artifacts before building interfaces. The skill organizes output into discrete workflows for persona generation, journey mapping, usability test planning, and research synthesis rather than ad-hoc design notes.
- 4 core workflows: Generate User Persona, Create Journey Map, Plan Usability Test, Synthesize Research
- Produces personas, journey maps, empathy maps, and prioritized pain-point lists
- Includes sample-size calculator and research-synthesis frameworks
- Delivers actionable design recommendations from unstructured user data
- Hard-gate: always run before committing to UI implementation
Ux Researcher Designer by the numbers
- 875 all-time installs (skills.sh)
- +13 installs in the week ending Jul 29, 2026 (Skillselion tracking)
- Ranked #461 of 1,888 Design & UI/UX skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Jul 31, 2026 (Skillselion catalog sync)
npx skills add https://github.com/alirezarezvani/claude-skills --skill ux-researcher-designerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 875 |
|---|---|
| repo stars | ★ 23.5k |
| Security audit | 3 / 3 scanners passed |
| Last updated | July 17, 2026 |
| Repository | alirezarezvani/claude-skills ↗ |
How do you turn interview data into UX personas?
Generate data-driven user personas, journey maps, usability test plans, and research synthesis from raw interview or survey data.
Who is it for?
Developers and PMs with raw user research who need structured personas, journey maps, and test plans before UI implementation.
Skip if: Teams that already have finalized design systems and validated personas and only need pixel-perfect Figma-to-code conversion.
When should I use this skill?
Raw interview transcripts, survey results, or research notes need conversion into personas, journey maps, or usability test plans.
What you get
User personas, journey maps, usability test plans, and a research synthesis document with design recommendations.
By the numbers
- Includes 4 documented workflows: persona generation, journey mapping, usability testing, and research synthesis
Files
UX Researcher & Designer
Generate user personas from research data, create journey maps, plan usability tests, and synthesize research findings into actionable design recommendations.
---
Table of Contents
- Trigger Terms
- Workflows
- Workflow 1: Generate User Persona
- Workflow 2: Create Journey Map
- Workflow 3: Plan Usability Test
- Workflow 4: Synthesize Research
- Tool Reference
- Quick Reference Tables
- Knowledge Base
---
Trigger Terms
Use this skill when you need to:
- "create user persona"
- "generate persona from data"
- "build customer journey map"
- "map user journey"
- "plan usability test"
- "design usability study"
- "analyze user research"
- "synthesize interview findings"
- "identify user pain points"
- "define user archetypes"
- "calculate research sample size"
- "create empathy map"
- "identify user needs"
---
Workflows
Workflow 1: Generate User Persona
Situation: You have user data (analytics, surveys, interviews) and need to create a research-backed persona.
Steps:
1. Prepare user data
Required format (JSON):
[
{
"user_id": "user_1",
"age": 32,
"usage_frequency": "daily",
"features_used": ["dashboard", "reports", "export"],
"primary_device": "desktop",
"usage_context": "work",
"tech_proficiency": 7,
"pain_points": ["slow loading", "confusing UI"]
}
]2. Run persona generator
# Human-readable output
python scripts/persona_generator.py
# JSON output for integration
python scripts/persona_generator.py json3. Review generated components
| Component | What to Check |
|---|---|
| Archetype | Does it match the data patterns? |
| Demographics | Are they derived from actual data? |
| Goals | Are they specific and actionable? |
| Frustrations | Do they include frequency counts? |
| Design implications | Can designers act on these? |
4. Validate persona
- Show to 3-5 real users: "Does this sound like you?"
- Cross-check with support tickets
- Verify against analytics data
5. Reference: See references/persona-methodology.md for validity criteria
---
Workflow 2: Create Journey Map
Situation: You need to visualize the end-to-end user experience for a specific goal.
Steps:
1. Define scope
| Element | Description |
|---|---|
| Persona | Which user type |
| Goal | What they're trying to achieve |
| Start | Trigger that begins journey |
| End | Success criteria |
| Timeframe | Hours/days/weeks |
2. Gather journey data
Sources:
- User interviews (ask "walk me through...")
- Session recordings
- Analytics (funnel, drop-offs)
- Support tickets
3. Map the stages
Typical B2B SaaS stages:
Awareness → Evaluation → Onboarding → Adoption → Advocacy4. Fill in layers for each stage
Stage: [Name]
├── Actions: What does user do?
├── Touchpoints: Where do they interact?
├── Emotions: How do they feel? (1-5)
├── Pain Points: What frustrates them?
└── Opportunities: Where can we improve?5. Identify opportunities
Priority Score = Frequency × Severity × Solvability
6. Reference: See references/journey-mapping-guide.md for templates
---
Workflow 3: Plan Usability Test
Situation: You need to validate a design with real users.
Steps:
1. Define research questions
Transform vague goals into testable questions:
| Vague | Testable |
|---|---|
| "Is it easy to use?" | "Can users complete checkout in <3 min?" |
| "Do users like it?" | "Will users choose Design A or B?" |
| "Does it make sense?" | "Can users find settings without hints?" |
2. Select method
| Method | Participants | Duration | Best For |
|---|---|---|---|
| Moderated remote | 5-8 | 45-60 min | Deep insights |
| Unmoderated remote | 10-20 | 15-20 min | Quick validation |
| Guerrilla | 3-5 | 5-10 min | Rapid feedback |
3. Design tasks
Good task format:
SCENARIO: "Imagine you're planning a trip to Paris..."
GOAL: "Book a hotel for 3 nights in your budget."
SUCCESS: "You see the confirmation page."Task progression: Warm-up → Core → Secondary → Edge case → Free exploration
4. Define success metrics
| Metric | Target |
|---|---|
| Completion rate | >80% |
| Time on task | <2× expected |
| Error rate | <15% |
| Satisfaction | >4/5 |
5. Prepare moderator guide
- Think-aloud instructions
- Non-leading prompts
- Post-task questions
6. Reference: See references/usability-testing-frameworks.md for full guide
---
Workflow 4: Synthesize Research
Situation: You have raw research data (interviews, surveys, observations) and need actionable insights.
Steps:
1. Code the data
Tag each data point:
[GOAL]- What they want to achieve[PAIN]- What frustrates them[BEHAVIOR]- What they actually do[CONTEXT]- When/where they use product[QUOTE]- Direct user words
2. Cluster similar patterns
User A: Uses daily, advanced features, shortcuts
User B: Uses daily, complex workflows, automation
User C: Uses weekly, basic needs, occasional
Cluster 1: A, B (Power Users)
Cluster 2: C (Casual User)3. Calculate segment sizes
| Cluster | Users | % | Viability |
|---|---|---|---|
| Power Users | 18 | 36% | Primary persona |
| Business Users | 15 | 30% | Primary persona |
| Casual Users | 12 | 24% | Secondary persona |
4. Extract key findings
For each theme:
- Finding statement
- Supporting evidence (quotes, data)
- Frequency (X/Y participants)
- Business impact
- Recommendation
5. Prioritize opportunities
| Factor | Score 1-5 |
|---|---|
| Frequency | How often does this occur? |
| Severity | How much does it hurt? |
| Breadth | How many users affected? |
| Solvability | Can we fix this? |
6. Reference: See references/persona-methodology.md for analysis framework
---
Tool Reference
persona_generator.py
Generates data-driven personas from user research data.
| Argument | Values | Default | Description |
|---|---|---|---|
| format | (none), json | (none) | Output format |
Sample Output:
============================================================
PERSONA: Alex the Power User
============================================================
📝 A daily user who primarily uses the product for work purposes
Archetype: Power User
Quote: "I need tools that can keep up with my workflow"
👤 Demographics:
• Age Range: 25-34
• Location Type: Urban
• Tech Proficiency: Advanced
🎯 Goals & Needs:
• Complete tasks efficiently
• Automate workflows
• Access advanced features
😤 Frustrations:
• Slow loading times (14/20 users)
• No keyboard shortcuts
• Limited API access
💡 Design Implications:
→ Optimize for speed and efficiency
→ Provide keyboard shortcuts and power features
→ Expose API and automation capabilities
📈 Data: Based on 45 users
Confidence: HighArchetypes Generated:
| Archetype | Signals | Design Focus |
|---|---|---|
| power_user | Daily use, 10+ features | Efficiency, customization |
| casual_user | Weekly use, 3-5 features | Simplicity, guidance |
| business_user | Work context, team use | Collaboration, reporting |
| mobile_first | Mobile primary | Touch, offline, speed |
Output Components:
| Component | Description |
|---|---|
| demographics | Age range, location, occupation, tech level |
| psychographics | Motivations, values, attitudes, lifestyle |
| behaviors | Usage patterns, feature preferences |
| needs_and_goals | Primary, secondary, functional, emotional |
| frustrations | Pain points with evidence |
| scenarios | Contextual usage stories |
| design_implications | Actionable recommendations |
| data_points | Sample size, confidence level |
---
Quick Reference Tables
Research Method Selection
| Question Type | Best Method | Sample Size |
|---|---|---|
| "What do users do?" | Analytics, observation | 100+ events |
| "Why do they do it?" | Interviews | 8-15 users |
| "How well can they do it?" | Usability test | 5-8 users |
| "What do they prefer?" | Survey, A/B test | 50+ users |
| "What do they feel?" | Diary study, interviews | 10-15 users |
Persona Confidence Levels
| Sample Size | Confidence | Use Case |
|---|---|---|
| 5-10 users | Low | Exploratory |
| 11-30 users | Medium | Directional |
| 31+ users | High | Production |
Usability Issue Severity
| Severity | Definition | Action |
|---|---|---|
| 4 - Critical | Prevents task completion | Fix immediately |
| 3 - Major | Significant difficulty | Fix before release |
| 2 - Minor | Causes hesitation | Fix when possible |
| 1 - Cosmetic | Noticed but not problematic | Low priority |
Interview Question Types
| Type | Example | Use For |
|---|---|---|
| Context | "Walk me through your typical day" | Understanding environment |
| Behavior | "Show me how you do X" | Observing actual actions |
| Goals | "What are you trying to achieve?" | Uncovering motivations |
| Pain | "What's the hardest part?" | Identifying frustrations |
| Reflection | "What would you change?" | Generating ideas |
---
Knowledge Base
Detailed reference guides in references/:
| File | Content |
|---|---|
persona-methodology.md | Validity criteria, data collection, analysis framework |
journey-mapping-guide.md | Mapping process, templates, opportunity identification |
example-personas.md | 3 complete persona examples with data |
usability-testing-frameworks.md | Test planning, task design, analysis |
---
Validation Checklist
Persona Quality
- [ ] Based on 20+ users (minimum)
- [ ] At least 2 data sources (quant + qual)
- [ ] Specific, actionable goals
- [ ] Frustrations include frequency counts
- [ ] Design implications are specific
- [ ] Confidence level stated
Journey Map Quality
- [ ] Scope clearly defined (persona, goal, timeframe)
- [ ] Based on real user data, not assumptions
- [ ] All layers filled (actions, touchpoints, emotions)
- [ ] Pain points identified per stage
- [ ] Opportunities prioritized
Usability Test Quality
- [ ] Research questions are testable
- [ ] Tasks are realistic scenarios, not instructions
- [ ] 5+ participants per design
- [ ] Success metrics defined
- [ ] Findings include severity ratings
Research Synthesis Quality
- [ ] Data coded consistently
- [ ] Patterns based on 3+ data points
- [ ] Findings include evidence
- [ ] Recommendations are actionable
- [ ] Priorities justified
Related Skills
- UI Design System (
product-team/ui-design-system/) — Research findings inform design system decisions - Product Manager Toolkit (
product-team/product-manager-toolkit/) — Customer interview analysis complements persona research
UX Research Plan
Study Info
| Field | Value |
|---|---|
| Study Name | [Descriptive name] |
| Researcher | [Name] |
| Stakeholders | [Names/roles] |
| Status | Planning / In Field / Analysis / Complete |
| Timeline | [Start Date] - [End Date] |
---
Research Questions
What do we need to learn? List 3-5 specific, answerable questions.
1. [Primary question - the most important thing to learn] 2. [Secondary question] 3. [Secondary question] 4. [Exploratory question - nice to know] 5. [Exploratory question - nice to know]
What We Already Know
[Summarize existing knowledge, past research, analytics data, assumptions to validate.]
What We Do Not Know
[List specific knowledge gaps this study will address.]
---
Methodology
Method: [Usability Testing / User Interviews / Survey / Diary Study / Card Sorting / A/B Test / Contextual Inquiry]
Justification: [Why this method is appropriate for the research questions.]
Approach: [Moderated / Unmoderated / Remote / In-Person]
Duration: [Session length per participant]
Tools: [Platform/tools used - e.g., Lookback, Maze, UserTesting, Zoom]
---
Participant Criteria
Target Participants
| Criterion | Requirement |
|---|---|
| User type | [e.g., Active users, churned users, prospects] |
| Role/title | [e.g., Product managers, developers] |
| Experience level | [e.g., 1+ years using similar products] |
| Company size | [e.g., 50-500 employees] |
| Geography | [e.g., US-based, English-speaking] |
Screening Questions
1. [Question to verify participant meets criteria] 2. [Question to verify participant meets criteria] 3. [Question to ensure diversity of perspectives]
Exclusion Criteria
- [e.g., Current employees or family of employees]
- [e.g., Participants in a study within the last 6 months]
Sample Size
- Target: [Number] participants
- Justification: [e.g., "5 participants identify ~80% of usability issues" or "Statistical significance requires N=200 for survey"]
---
Recruitment Plan
| Channel | Target Count | Timeline | Incentive |
|---|---|---|---|
| [Customer database] | [N] | [Dates] | [$Amount or type] |
| [User panel] | [N] | [Dates] | [$Amount or type] |
| [Social media] | [N] | [Dates] | [$Amount or type] |
Incentive
- Amount: [$X per session or equivalent]
- Form: [Gift card, account credit, donation to charity]
- Distribution: [Immediately after session / within 5 business days]
---
Interview / Test Guide
Introduction (5 minutes)
- Welcome and thank participant
- Explain purpose (learning, not testing them)
- Confirm consent and recording permission
- Set expectations for session duration
Warm-Up Questions (5 minutes)
1. [Background question about their role/context] 2. [Question about current workflow/tools]
Core Tasks / Questions (30-40 minutes)
Task 1: [Description of task or topic area]
- [Specific prompt or scenario]
- [Follow-up probes]
Task 2: [Description of task or topic area]
- [Specific prompt or scenario]
- [Follow-up probes]
Task 3: [Description of task or topic area]
- [Specific prompt or scenario]
- [Follow-up probes]
Wrap-Up (5 minutes)
- Overall impressions
- Anything we did not ask about that they want to share
- Thank participant and explain next steps
---
Analysis Framework
Data Collection
- [ ] Session recordings stored securely
- [ ] Notes taken during each session
- [ ] Observations tagged by research question
Analysis Method
- Affinity mapping: Group observations into themes
- Task success rate: [For usability tests] Completion rate per task
- Severity rating: [For issues] Critical / Major / Minor / Cosmetic
- Quantitative analysis: [For surveys] Statistical analysis plan
Synthesis Approach
1. Review all session notes and recordings 2. Identify patterns and themes across participants 3. Map findings to research questions 4. Prioritize findings by impact and frequency 5. Develop actionable recommendations
---
Timeline
| Phase | Dates | Activities |
|---|---|---|
| Planning | [Week 1] | Finalize plan, create guide, prepare materials |
| Recruitment | [Week 1-2] | Screen and schedule participants |
| Fieldwork | [Week 2-3] | Conduct sessions |
| Analysis | [Week 3-4] | Synthesize findings |
| Reporting | [Week 4] | Create report, present to stakeholders |
---
Deliverables
- [ ] Research findings report (key insights, evidence, recommendations)
- [ ] Presentation deck for stakeholders
- [ ] Highlight reel of key moments (if recorded)
- [ ] Actionable recommendations prioritized by impact
- [ ] Raw data archive (notes, recordings) stored per data policy
Example Personas
Real output examples showing what good personas look like.
---
Table of Contents
- Example 1: Power User Persona
- Example 2: Business User Persona
- Example 3: Casual User Persona
- JSON Output Format
- Quality Checklist
---
Example 1: Power User Persona
Script Output
============================================================
PERSONA: Alex the Power User
============================================================
📝 A daily user who primarily uses the product for work purposes
Archetype: Power User
Quote: "I need tools that can keep up with my workflow"
👤 Demographics:
• Age Range: 25-34
• Location Type: Urban
• Occupation Category: Software Engineer
• Education Level: Bachelor's degree
• Tech Proficiency: Advanced
🧠 Psychographics:
Motivations: Efficiency, Control, Mastery
Values: Time-saving, Flexibility, Reliability
Lifestyle: Fast-paced, optimization-focused
🎯 Goals & Needs:
• Complete tasks efficiently without repetitive work
• Automate recurring workflows
• Access advanced features and shortcuts
😤 Frustrations:
• Slow loading times (mentioned by 14/20 users)
• No keyboard shortcuts for common actions
• Limited API access for automation
📊 Behaviors:
• Frequently uses: Dashboard, Reports, Export, API
• Usage pattern: 5+ sessions per day
• Interaction style: Exploratory - uses many features
💡 Design Implications:
→ Optimize for speed and efficiency
→ Provide keyboard shortcuts and power features
→ Expose API and automation capabilities
→ Allow UI customization
📈 Data: Based on 45 users
Confidence: High
Method: Quantitative analysis + 12 qualitative interviewsData Behind This Persona
Quantitative Data (n=45):
- 78% use product daily
- Average session: 23 minutes
- Average features used: 12
- 84% access via desktop
- Support tickets: 0.2 per month (low)
Qualitative Insights (12 interviews):
| Theme | Frequency | Sample Quote |
|---|---|---|
| Speed matters | 10/12 | "Every second counts when I'm in flow" |
| Shortcuts wanted | 8/12 | "Why can't I Cmd+K to search?" |
| Automation need | 9/12 | "I wrote a script to work around..." |
| Customization | 7/12 | "Let me hide features I don't use" |
---
Example 2: Business User Persona
Script Output
============================================================
PERSONA: Taylor the Business Professional
============================================================
📝 A weekly user who primarily uses the product for team collaboration
Archetype: Business User
Quote: "I need to show clear value to my stakeholders"
👤 Demographics:
• Age Range: 35-44
• Location Type: Urban/Suburban
• Occupation Category: Product Manager
• Education Level: MBA
• Tech Proficiency: Intermediate
🧠 Psychographics:
Motivations: Team success, Visibility, Recognition
Values: Collaboration, Measurable outcomes, Professional growth
Lifestyle: Meeting-heavy, cross-functional work
🎯 Goals & Needs:
• Improve team efficiency and coordination
• Generate reports for stakeholders
• Integrate with existing work tools (Slack, Jira)
😤 Frustrations:
• No way to share views with team (11/18 users)
• Can't generate executive summaries
• No SSO - team has to manage passwords
📊 Behaviors:
• Frequently uses: Sharing, Reports, Team Dashboard
• Usage pattern: 3-4 sessions per week
• Interaction style: Goal-oriented, feature-specific
💡 Design Implications:
→ Add collaboration and sharing features
→ Build executive reporting and dashboards
→ Integrate with enterprise tools (SSO, Slack)
→ Provide permission and access controls
📈 Data: Based on 38 users
Confidence: High
Method: Survey (n=200) + 18 interviewsData Behind This Persona
Survey Data (n=200):
- 19% of total user base fits this profile
- Average company size: 50-500 employees
- 72% need to share outputs with non-users
- Top request: Team collaboration features
Interview Insights (18 interviews):
| Need | Frequency | Business Impact |
|---|---|---|
| Reporting | 16/18 | "I spend 2hrs/week making slides" |
| Team access | 14/18 | "Can't show my team what I see" |
| Integration | 12/18 | "Copy-paste into Confluence..." |
| SSO | 11/18 | "IT won't approve without SSO" |
Scenario: Quarterly Review Prep
Context: End of quarter, needs to present metrics to leadership
Goal: Create compelling data story in 30 minutes
Current Journey:
1. Export raw data (works)
2. Open Excel, make charts (manual)
3. Copy to PowerPoint (manual)
4. Share with team for feedback (via email)
Pain Points:
• No built-in presentation view
• Charts don't match brand guidelines
• Can't collaborate on narrative
Opportunity:
• One-click executive summary
• Brand-compliant templates
• In-app commenting on reports---
Example 3: Casual User Persona
Script Output
============================================================
PERSONA: Casey the Casual User
============================================================
📝 A monthly user who uses the product for occasional personal tasks
Archetype: Casual User
Quote: "I just want it to work without having to think about it"
👤 Demographics:
• Age Range: 25-44
• Location Type: Mixed
• Occupation Category: Various
• Education Level: Bachelor's degree
• Tech Proficiency: Beginner-Intermediate
🧠 Psychographics:
Motivations: Task completion, Simplicity
Values: Ease of use, Quick results
Lifestyle: Busy, product is means to end
🎯 Goals & Needs:
• Complete specific task quickly
• Minimal learning curve
• Don't have to remember how it works between uses
😤 Frustrations:
• Too many options, don't know where to start (18/25)
• Forgot how to do X since last time (15/25)
• Feels like it's designed for experts (12/25)
📊 Behaviors:
• Frequently uses: 2-3 core features only
• Usage pattern: 1-2 sessions per month
• Interaction style: Focused - uses minimal features
💡 Design Implications:
→ Simplify onboarding and main navigation
→ Provide contextual help and reminders
→ Don't require memorization between sessions
→ Progressive disclosure - hide advanced features
📈 Data: Based on 52 users
Confidence: High
Method: Analytics analysis + 25 intercept interviewsData Behind This Persona
Analytics Data (n=1,200 casual segment):
- 65% of users are casual (< 1 session/week)
- Average features used: 2.3
- Return rate after 30 days: 34%
- Session duration: 4.2 minutes
Intercept Interview Insights (25 quick interviews):
| Quote | Count | Implication |
|---|---|---|
| "Where's the thing I used last time?" | 18 | Need breadcrumbs/history |
| "There's so much here" | 15 | Simplify main view |
| "I only need to do X" | 22 | Surface common tasks |
| "Is there a tutorial?" | 11 | Better help system |
Journey: Infrequent Task Completion
Stage 1: Return After Absence
Action: Opens app, doesn't recognize interface
Emotion: 😕 Confused
Thought: "This looks different, where do I start?"
Stage 2: Feature Hunt
Action: Clicks around looking for needed feature
Emotion: 😕 Frustrated
Thought: "I know I did this before..."
Stage 3: Discovery
Action: Finds feature (or gives up)
Emotion: 😐 Relief or 😠 Abandonment
Thought: "Finally!" or "I'll try something else"
Stage 4: Task Completion
Action: Uses feature, accomplishes goal
Emotion: 🙂 Satisfied
Thought: "That worked, hope I remember next time"---
JSON Output Format
persona_generator.py JSON Output
{
"name": "Alex the Power User",
"archetype": "power_user",
"tagline": "A daily user who primarily uses the product for work purposes",
"demographics": {
"age_range": "25-34",
"location_type": "urban",
"occupation_category": "Software Engineer",
"education_level": "Bachelor's degree",
"tech_proficiency": "Advanced"
},
"psychographics": {
"motivations": ["Efficiency", "Control", "Mastery"],
"values": ["Time-saving", "Flexibility", "Reliability"],
"attitudes": ["Early adopter", "Optimization-focused"],
"lifestyle": "Fast-paced, tech-forward"
},
"behaviors": {
"usage_patterns": ["daily: 45 users", "weekly: 8 users"],
"feature_preferences": ["dashboard", "reports", "export", "api"],
"interaction_style": "Exploratory - uses many features",
"learning_preference": "Self-directed, documentation"
},
"needs_and_goals": {
"primary_goals": [
"Complete tasks efficiently",
"Automate workflows"
],
"secondary_goals": [
"Customize workspace",
"Integrate with other tools"
],
"functional_needs": [
"Speed and performance",
"Keyboard shortcuts",
"API access"
],
"emotional_needs": [
"Feel in control",
"Feel productive",
"Feel like an expert"
]
},
"frustrations": [
"Slow loading times",
"No keyboard shortcuts",
"Limited API access",
"Can't customize dashboard",
"No batch operations"
],
"scenarios": [
{
"title": "Bulk Processing",
"context": "Monday morning, needs to process week's data",
"goal": "Complete batch operations quickly",
"steps": ["Import data", "Apply bulk actions", "Export results"],
"pain_points": ["No keyboard shortcuts", "Slow processing"]
}
],
"quote": "I need tools that can keep up with my workflow",
"data_points": {
"sample_size": 45,
"confidence_level": "High",
"last_updated": "2024-01-15",
"validation_method": "Quantitative analysis + Qualitative interviews"
},
"design_implications": [
"Optimize for speed and efficiency",
"Provide keyboard shortcuts and power features",
"Expose API and automation capabilities",
"Allow UI customization",
"Support bulk operations"
]
}Using JSON Output
# Generate JSON for integration
python scripts/persona_generator.py json > persona_power_user.json
# Use with other tools
cat persona_power_user.json | jq '.design_implications'---
Quality Checklist
What Makes a Good Persona
| Criterion | Bad Example | Good Example |
|---|---|---|
| Specificity | "Wants to be productive" | "Needs to process 50+ items daily" |
| Evidence | "Users want simplicity" | "18/25 users said 'too many options'" |
| Actionable | "Likes easy things" | "Hide advanced features by default" |
| Memorable | Generic descriptions | Distinctive quote and archetype |
| Validated | Team assumptions | User interviews + analytics |
Persona Quality Rubric
| Element | Points | Criteria |
|---|---|---|
| Data-backed demographics | /5 | From real user data |
| Specific goals | /5 | Actionable, measurable |
| Evidenced frustrations | /5 | With frequency counts |
| Design implications | /5 | Directly usable by designers |
| Authentic quote | /5 | From actual user |
| Confidence stated | /5 | Sample size and method |
Score:
- 25-30: Production-ready persona
- 18-24: Needs refinement
- Below 18: Requires more research
Red Flags in Persona Output
| Red Flag | What It Means |
|---|---|
| No sample size | Ungrounded assumptions |
| Generic frustrations | Didn't do user research |
| All positive | Missing real pain points |
| No quotes | No qualitative research |
| Contradicting behaviors | Forced archetype |
| "Everyone" language | Too broad to be useful |
---
See also: `persona-methodology.md` for creation process
Journey Mapping Guide
Step-by-step reference for creating user journey maps that drive design decisions.
---
Table of Contents
- Journey Map Fundamentals
- Mapping Process
- Journey Stages
- Touchpoint Analysis
- Emotion Mapping
- Opportunity Identification
- Templates
---
Journey Map Fundamentals
What Is a Journey Map?
A journey map visualizes the end-to-end experience a user has while trying to accomplish a goal with your product or service.
┌─────────────────────────────────────────────────────────────┐
│ JOURNEY MAP STRUCTURE │
├─────────────────────────────────────────────────────────────┤
│ │
│ STAGES: Awareness → Consideration → Acquisition → │
│ Onboarding → Regular Use → Advocacy │
│ │
│ LAYERS: ┌─────────────────────────────────────────┐ │
│ │ Actions: What user does │ │
│ ├─────────────────────────────────────────┤ │
│ │ Touchpoints: Where interaction happens │ │
│ ├─────────────────────────────────────────┤ │
│ │ Emotions: How user feels │ │
│ ├─────────────────────────────────────────┤ │
│ │ Pain Points: What frustrates │ │
│ ├─────────────────────────────────────────┤ │
│ │ Opportunities: Where to improve │ │
│ └─────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘Journey Map Types
| Type | Focus | Best For |
|---|---|---|
| Current State | How things are today | Identifying pain points |
| Future State | Ideal experience | Design vision |
| Day-in-the-Life | Beyond your product | Context understanding |
| Service Blueprint | Backend processes | Operations alignment |
When to Create Journey Maps
| Scenario | Map Type | Outcome |
|---|---|---|
| New product | Future state | Design direction |
| Redesign | Current + Future | Gap analysis |
| Churn investigation | Current state | Pain point diagnosis |
| Cross-team alignment | Service blueprint | Process optimization |
---
Mapping Process
Step 1: Define Scope
Questions to Answer:
- Which persona is this journey for?
- What goal are they trying to achieve?
- Where does the journey start and end?
- What timeframe does it cover?
Scope Template:
Persona: [Name from persona library]
Goal: [Specific outcome they want]
Start: [Trigger that begins journey]
End: [Success criteria or exit point]
Timeframe: [Hours/Days/Weeks]Example:
Persona: Alex the Power User
Goal: Set up automated weekly reports
Start: Realizes manual reporting is unsustainable
End: First automated report runs successfully
Timeframe: 1-2 daysStep 2: Gather Data
Data Sources for Journey Mapping:
| Source | Insights Gained |
|---|---|
| User interviews | Actions, emotions, quotes |
| Session recordings | Actual behavior patterns |
| Support tickets | Common pain points |
| Analytics | Drop-off points, time spent |
| Surveys | Satisfaction at stages |
Interview Questions for Journey Mapping:
1. "Walk me through how you first discovered [product]" 2. "What made you decide to try it?" 3. "Describe your first day using it" 4. "What was the hardest part?" 5. "When did you feel confident using it?" 6. "What would you change about that experience?"
Step 3: Map the Stages
Identify Natural Breakpoints:
Look for moments where:
- User's mindset changes
- Channels shift (web → app → email)
- Time passes (hours, days)
- Goals evolve
Stage Validation:
Each stage should have:
- Clear entry criteria
- Distinct user actions
- Measurable outcomes
- Exit to next stage
Step 4: Fill in Layers
For each stage, document:
1. Actions: What does the user do? 2. Touchpoints: Where do they interact? 3. Thoughts: What are they thinking? 4. Emotions: How do they feel? 5. Pain Points: What's frustrating? 6. Opportunities: Where can we improve?
Step 5: Validate and Iterate
Validation Methods:
| Method | Effort | Confidence |
|---|---|---|
| Team review | Low | Medium |
| User walkthrough | Medium | High |
| Data correlation | Medium | High |
| A/B test interventions | High | Very High |
---
Journey Stages
Common B2B SaaS Stages
┌────────────┬────────────┬────────────┬────────────┬────────────┐
│ AWARENESS │ EVALUATION │ ONBOARDING │ ADOPTION │ ADVOCACY │
├────────────┼────────────┼────────────┼────────────┼────────────┤
│ Discovers │ Compares │ Signs up │ Regular │ Recommends │
│ problem │ solutions │ Sets up │ usage │ to others │
│ exists │ │ First win │ Integrates │ │
└────────────┴────────────┴────────────┴────────────┴────────────┘Stage Detail Template
Stage: Onboarding
| Element | Description |
|---|---|
| Goal | Complete setup, achieve first success |
| Duration | 1-7 days |
| Entry | User creates account |
| Exit | First meaningful action completed |
| Success Metric | Activation rate |
Substages: 1. Account creation 2. Profile setup 3. First feature use 4. Integration (if applicable) 5. First value moment
B2C vs. B2B Stages
| B2C Stages | B2B Stages |
|---|---|
| Discover | Awareness |
| Browse | Evaluation |
| Purchase | Procurement |
| Use | Implementation |
| Return/Loyalty | Renewal |
---
Touchpoint Analysis
Touchpoint Categories
| Category | Examples | Owner |
|---|---|---|
| Marketing | Ads, content, social | Marketing |
| Sales | Demos, calls, proposals | Sales |
| Product | App, features, UI | Product |
| Support | Help center, chat, tickets | Support |
| Transactional | Emails, notifications | Varies |
Touchpoint Mapping Template
Stage: [Name]
Touchpoint: [Where interaction happens]
Channel: [Web/Mobile/Email/Phone/In-person]
Action: [What user does]
Owner: [Team responsible]
Current Experience: [1-5 rating]
Improvement Priority: [High/Medium/Low]Cross-Channel Consistency
Check for:
- Information consistency across channels
- Seamless handoffs (web → mobile)
- Context preservation (user doesn't repeat info)
- Brand voice alignment
Red Flags:
- User has to re-enter information
- Different answers from different channels
- Can't continue task on different device
- Inconsistent terminology
---
Emotion Mapping
Emotion Scale
POSITIVE
│
Delighted ────┤──── 😄 5
Pleased ────┤──── 🙂 4
Neutral ────┤──── 😐 3
Frustrated ────┤──── 😕 2
Angry ────┤──── 😠 1
│
NEGATIVEEmotional Triggers
| Trigger | Positive Emotion | Negative Emotion |
|---|---|---|
| Speed | Delight | Frustration |
| Clarity | Confidence | Confusion |
| Control | Empowerment | Helplessness |
| Progress | Satisfaction | Anxiety |
| Recognition | Validation | Neglect |
Emotion Data Sources
Direct Signals:
- Interview quotes: "I felt so relieved when..."
- Survey scores: NPS, CSAT, CES
- Support sentiment: Angry vs. grateful tickets
Inferred Signals:
- Rage clicks (frustration)
- Quick completion (satisfaction)
- Abandonment (frustration or confusion)
- Return visits (interest or necessity)
Emotion Curve Patterns
The Valley of Death:
😄 ─┐
│ ╱
│ ╱
😐 ─│───╱────────
│╲ ╱
│ ╳ ← Critical drop-off point
😠 ─│╱ ╲─────────
│
Onboarding First Use RegularThe Aha Moment:
😄 ─┐ ╱──
│ ╱
│ ╱
😐 ─│──────╱────── ← Before: neutral
│ ↑
😠 ─│ Aha!
│
Stage 1 Stage 2 Stage 3---
Opportunity Identification
Pain Point Prioritization
| Factor | Score (1-5) |
|---|---|
| Frequency | How often does this occur? |
| Severity | How much does it hurt? |
| Breadth | How many users affected? |
| Solvability | Can we fix this? |
Priority Score = (Frequency + Severity + Breadth) × Solvability
Opportunity Types
| Type | Description | Example |
|---|---|---|
| Friction Reduction | Remove obstacles | Fewer form fields |
| Moment of Delight | Exceed expectations | Personalized welcome |
| Channel Addition | New touchpoint | Mobile app for on-the-go |
| Proactive Support | Anticipate needs | Tutorial at right moment |
| Personalization | Tailored experience | Role-based onboarding |
Opportunity Canvas
┌─────────────────────────────────────────────────────────────┐
│ OPPORTUNITY: [Name] │
├─────────────────────────────────────────────────────────────┤
│ Stage: [Where in journey] │
│ Current Pain: [What's broken] │
│ Desired Outcome: [What should happen] │
│ Proposed Solution: [How to fix] │
│ Success Metric: [How to measure] │
│ Effort: [High/Medium/Low] │
│ Impact: [High/Medium/Low] │
│ Priority: [Calculated] │
└─────────────────────────────────────────────────────────────┘Quick Wins vs. Strategic Bets
| Criteria | Quick Win | Strategic Bet |
|---|---|---|
| Effort | Low | High |
| Impact | Medium | High |
| Timeline | Weeks | Quarters |
| Risk | Low | Medium-High |
| Requires | Small team | Cross-functional |
---
Templates
Basic Journey Map Template
PERSONA: _______________
GOAL: _______________
┌──────────┬──────────┬──────────┬──────────┬──────────┐
│ STAGE 1 │ STAGE 2 │ STAGE 3 │ STAGE 4 │ STAGE 5 │
├──────────┼──────────┼──────────┼──────────┼──────────┤
│ Actions │ │ │ │ │
│ │ │ │ │ │
├──────────┼──────────┼──────────┼──────────┼──────────┤
│ Touch- │ │ │ │ │
│ points │ │ │ │ │
├──────────┼──────────┼──────────┼──────────┼──────────┤
│ Emotions │ │ │ │ │
│ (1-5) │ │ │ │ │
├──────────┼──────────┼──────────┼──────────┼──────────┤
│ Pain │ │ │ │ │
│ Points │ │ │ │ │
├──────────┼──────────┼──────────┼──────────┼──────────┤
│ Opport- │ │ │ │ │
│ unities │ │ │ │ │
└──────────┴──────────┴──────────┴──────────┴──────────┘Detailed Stage Template
STAGE: _______________
DURATION: _______________
ENTRY CRITERIA: _______________
EXIT CRITERIA: _______________
USER ACTIONS:
1. _______________
2. _______________
3. _______________
TOUCHPOINTS:
• Channel: _____ | Owner: _____
• Channel: _____ | Owner: _____
THOUGHTS:
"_______________"
"_______________"
EMOTIONAL STATE: [1-5] ___
PAIN POINTS:
• _______________
• _______________
OPPORTUNITIES:
• _______________
• _______________
METRICS:
• Completion rate: ___%
• Time spent: ___
• Drop-off: ___%Service Blueprint Extension
Add backstage layers:
┌─────────────────────────────────────────────────────────────┐
│ FRONTSTAGE (User sees) │
├─────────────────────────────────────────────────────────────┤
│ User actions, touchpoints, emotions │
├─────────────────────────────────────────────────────────────┤
│ LINE OF VISIBILITY │
├─────────────────────────────────────────────────────────────┤
│ BACKSTAGE (User doesn't see) │
├─────────────────────────────────────────────────────────────┤
│ • Employee actions │
│ • Systems/tools used │
│ • Data flows │
├─────────────────────────────────────────────────────────────┤
│ SUPPORT PROCESSES │
├─────────────────────────────────────────────────────────────┤
│ • Backend systems │
│ • Third-party integrations │
│ • Policies/procedures │
└─────────────────────────────────────────────────────────────┘---
Quick Reference
Journey Mapping Checklist
Preparation:
- [ ] Persona selected
- [ ] Goal defined
- [ ] Scope bounded
- [ ] Data gathered (interviews, analytics)
Mapping:
- [ ] Stages identified
- [ ] Actions documented
- [ ] Touchpoints mapped
- [ ] Emotions captured
- [ ] Pain points identified
Analysis:
- [ ] Opportunities prioritized
- [ ] Quick wins identified
- [ ] Strategic bets proposed
- [ ] Metrics defined
Validation:
- [ ] Team reviewed
- [ ] User validated
- [ ] Data correlated
Common Mistakes
| Mistake | Impact | Fix |
|---|---|---|
| Too many stages | Overwhelming | Limit to 5-7 |
| No data | Assumptions | Interview users |
| Single session | Bias | Multiple sources |
| No emotions | Misses human element | Add feeling layer |
| No follow-through | Wasted effort | Create action plan |
---
See also: `persona-methodology.md` for persona creation
Persona Methodology Guide
Reference for creating research-backed, data-driven user personas.
---
Table of Contents
- What Makes a Valid Persona
- Data Collection Methods
- Analysis Framework
- Persona Components
- Validation Criteria
- Anti-Patterns
---
What Makes a Valid Persona
Research-Backed vs. Assumption-Based
┌─────────────────────────────────────────────────────────────┐
│ PERSONA VALIDITY SPECTRUM │
├─────────────────────────────────────────────────────────────┤
│ │
│ ASSUMPTION-BASED HYBRID RESEARCH-BACKED │
│ │───────────────────────────────────────────────────────│ │
│ ❌ Invalid ⚠️ Limited ✅ Valid │
│ │
│ • "Our users are..." • Some interviews • 20+ users │
│ • No data • 5-10 data points • Quant + Qual │
│ • Team opinions • Partial patterns • Validated │
│ │
└─────────────────────────────────────────────────────────────┘Minimum Viability Requirements
| Requirement | Threshold | Confidence Level |
|---|---|---|
| Sample size | 5 users | Low (exploratory) |
| Sample size | 20 users | Medium (directional) |
| Sample size | 50+ users | High (reliable) |
| Data types | 2+ sources | Required |
| Interview depth | 30+ min | Recommended |
| Behavioral data | 1 week+ | Recommended |
The Persona Validity Test
A valid persona must pass these checks:
1. Grounded in Data
- Can you point to specific user quotes?
- Can you show behavioral data supporting claims?
- Are demographics from actual user profiles?
2. Represents a Segment
- Does this persona represent 15%+ of your user base?
- Are there other users who fit this pattern?
- Is it a real cluster, not an outlier?
3. Actionable for Design
- Can designers make decisions from this persona?
- Does it reveal unmet needs?
- Does it clarify feature priorities?
---
Data Collection Methods
Quantitative Sources
| Source | Data Type | Use For |
|---|---|---|
| Analytics | Behavior | Usage patterns, feature adoption |
| Surveys | Demographics, preferences | Segmentation, satisfaction |
| Support tickets | Pain points | Frustration patterns |
| Product logs | Actions | Feature usage, workflows |
| CRM data | Profile | Job roles, company size |
Qualitative Sources
| Source | Data Type | Use For |
|---|---|---|
| User interviews | Motivations, goals | Deep understanding |
| Contextual inquiry | Environment | Real-world context |
| Diary studies | Longitudinal | Behavior over time |
| Usability tests | Pain points | Specific frustrations |
| Customer calls | Quotes | Authentic voice |
Data Collection Matrix
QUICK DEEP
(1-2 weeks) (4+ weeks)
│ │
┌─────────┼──────────────────┼─────────┐
QUANT │ Survey │ │ Product │
│ + CRM │ │ Logs + │
│ │ │ A/B │
├─────────┼──────────────────┼─────────┤
QUAL │ 5 │ │ 15+ │
│ Quick │ │ Deep │
│ Calls │ │ Inter- │
│ │ │ views │
└─────────┴──────────────────┴─────────┘Interview Protocol
Pre-Interview:
- Review user's analytics data
- Note usage patterns to explore
- Prepare open-ended questions
Interview Structure (45-60 min):
1. Context (10 min)
- "Walk me through your typical day"
- "When do you use [product]?"
- "What were you doing before you found us?"
2. Behaviors (15 min)
- "Show me how you use [feature]"
- "What do you do when [scenario]?"
- "What's your workaround for [pain point]?"
3. Goals & Frustrations (15 min)
- "What are you ultimately trying to achieve?"
- "What's the hardest part about [task]?"
- "If you had a magic wand, what would you change?"
4. Reflection (10 min)
- "What would make you recommend us?"
- "What almost made you quit?"
- "What's missing that you need?"
---
Analysis Framework
Pattern Identification
Step 1: Code Data Points
Tag each insight with:
[GOAL]- What they want to achieve[PAIN]- What frustrates them[BEHAVIOR]- What they actually do[CONTEXT]- When/where they use product[QUOTE]- Direct user words
Step 2: Cluster Similar Patterns
User A: Uses daily, advanced features, keyboard shortcuts
User B: Uses daily, complex workflows, automation
User C: Uses weekly, basic needs, occasional
User D: Uses daily, power features, API access
Cluster 1: A, B, D (Power Users - daily, advanced)
Cluster 2: C (Casual User - weekly, basic)Step 3: Calculate Cluster Size
| Cluster | Users | % of Sample | Viability |
|---|---|---|---|
| Power Users | 18 | 36% | Primary persona |
| Business Users | 15 | 30% | Primary persona |
| Casual Users | 12 | 24% | Secondary persona |
| Mobile-First | 5 | 10% | Consider merging |
Archetype Classification
| Archetype | Identifying Signals | Design Focus |
|---|---|---|
| Power User | Daily use, 10+ features, shortcuts | Efficiency, customization |
| Casual User | Weekly use, 3-5 features, simple | Simplicity, guidance |
| Business User | Work context, team features, ROI | Collaboration, reporting |
| Mobile-First | Mobile primary, quick actions | Touch, offline, speed |
Confidence Scoring
Calculate confidence based on data quality:
Confidence = (Sample Size Score + Data Quality Score + Consistency Score) / 3
Sample Size Score:
5-10 users = 1 (Low)
11-30 users = 2 (Medium)
31+ users = 3 (High)
Data Quality Score:
Survey only = 1 (Low)
Survey + Analytics = 2 (Medium)
Quant + Qual + Logs = 3 (High)
Consistency Score:
Contradicting data = 1 (Low)
Some alignment = 2 (Medium)
Strong alignment = 3 (High)---
Persona Components
Required Elements
| Component | Description | Source |
|---|---|---|
| Name & Photo | Memorable identifier | Stock photo, AI-generated |
| Tagline | One-line summary | Synthesized from data |
| Quote | Authentic voice | Direct from interviews |
| Demographics | Age, role, location | CRM, surveys |
| Goals | What they want | Interviews |
| Frustrations | Pain points | Interviews, support |
| Behaviors | How they act | Analytics, observation |
| Scenarios | Usage contexts | Interviews, logs |
Optional Enhancements
| Component | When to Include |
|---|---|
| Day-in-the-life | Complex workflows |
| Empathy map | Design workshops |
| Technology stack | B2B products |
| Influences | Consumer products |
| Brands they love | Marketing-heavy |
Component Depth Guide
Demographics (Keep Brief):
❌ Too detailed:
Age: 34, Lives: Seattle, Education: MBA from Stanford
✅ Right level:
Age: 30-40, Urban professional, Graduate degreeGoals (Be Specific):
❌ Too vague:
"Wants to be productive"
✅ Actionable:
"Needs to process 50+ items daily without repetitive tasks"Frustrations (Include Evidence):
❌ Generic:
"Finds the interface confusing"
✅ With evidence:
"Can't find export function (mentioned by 8/12 users)"---
Validation Criteria
Internal Validation
Team Check:
- [ ] Does sales recognize this user type?
- [ ] Does support see these pain points?
- [ ] Does product know these workflows?
Data Check:
- [ ] Can we quantify this segment's size?
- [ ] Do behaviors match analytics?
- [ ] Are quotes from real users?
External Validation
User Validation (recommended):
- Show persona to 3-5 users from segment
- Ask: "Does this sound like you?"
- Iterate based on feedback
A/B Design Test:
- Design for persona A vs. persona B
- Test with actual users
- Measure if persona-driven design wins
Red Flags
Watch for these persona validity problems:
| Red Flag | What It Means | Fix |
|---|---|---|
| "Everyone" persona | Too broad to be useful | Split into segments |
| Contradicting data | Forcing a narrative | Re-analyze clusters |
| No frustrations | Sanitized or incomplete | Dig deeper in interviews |
| Assumptions labeled as data | No real research | Conduct actual research |
| Single data source | Fragile foundation | Add another data type |
---
Anti-Patterns
1. The Elastic Persona
Problem: Persona stretches to include everyone
❌ "Sarah is 25-55, uses mobile and desktop, wants simplicity
but also advanced features, works alone and in teams..."Fix: Create separate personas for distinct segments
2. The Demographic Persona
Problem: All demographics, no psychographics
❌ "John is 35, male, $80k income, urban, MBA..."
(Nothing about goals, frustrations, behaviors)Fix: Lead with goals and frustrations, add minimal demographics
3. The Ideal User Persona
Problem: Describes who you want, not who you have
❌ "Emma is a passionate advocate who tells everyone
about our product and uses every feature daily..."Fix: Base on real user data, include realistic limitations
4. The Committee Persona
Problem: Each stakeholder added their opinions
❌ CEO added "enterprise-focused"
Sales added "loves demos"
Support added "never calls support"Fix: Single owner, data-driven only
5. The Stale Persona
Problem: Created once, never updated
❌ "Last updated: 2019"
Product has changed completely since thenFix: Review quarterly, update with new data
---
Quick Reference
Persona Creation Checklist
- [ ] Minimum 20 users in data set
- [ ] At least 2 data sources (quant + qual)
- [ ] Clear segment boundaries
- [ ] Actionable for design decisions
- [ ] Validated with team and users
- [ ] Documented data sources
- [ ] Confidence level stated
Time Investment Guide
| Persona Type | Time | Team | Output |
|---|---|---|---|
| Quick & Dirty | 1 week | 1 | Directional |
| Standard | 2-4 weeks | 2 | Production |
| Comprehensive | 6-8 weeks | 3+ | Strategic |
---
See also: `example-personas.md` for output examples
Usability Testing Frameworks
Reference for planning and conducting usability tests that produce actionable insights.
---
Table of Contents
- Testing Methods Overview
- Test Planning
- Task Design
- Moderation Techniques
- Analysis Framework
- Reporting Template
---
Testing Methods Overview
Method Selection Matrix
| Method | When to Use | Participants | Time | Output |
|---|---|---|---|---|
| Moderated remote | Deep insights, complex flows | 5-8 | 45-60 min | Rich qualitative |
| Unmoderated remote | Quick validation, simple tasks | 10-20 | 15-20 min | Quantitative + video |
| In-person | Physical products, context matters | 5-10 | 60-90 min | Very rich qualitative |
| Guerrilla | Quick feedback, public spaces | 3-5 | 5-10 min | Rapid insights |
| A/B testing | Comparing two designs | 100+ | Varies | Statistical data |
Participant Count Guidelines
┌─────────────────────────────────────────────────────────────┐
│ FINDING USABILITY ISSUES │
├─────────────────────────────────────────────────────────────┤
│ │
│ % Issues Found │
│ 100% ┤ ●────●────● │
│ 90% ┤ ●───── │
│ 80% ┤ ●───── │
│ 75% ┤ ●──── ← 5 users: 75-80% │
│ 50% ┤ ●──── │
│ 25% ┤ ●── │
│ 0% ┼────┬────┬────┬────┬────┬──── │
│ 1 2 3 4 5 6+ Users │
│ │
└─────────────────────────────────────────────────────────────┘Nielsen's Rule: 5 users find ~75-80% of usability issues
| Goal | Participants | Reasoning |
|---|---|---|
| Find major issues | 5 | 80% coverage, diminishing returns |
| Validate fix | 3 | Confirm specific issue resolved |
| Compare designs | 8-10 per design | Need comparison data |
| Quantitative metrics | 20+ | Statistical significance |
---
Test Planning
Research Questions
Transform vague goals into testable questions:
| Vague Goal | Testable Question |
|---|---|
| "Is it easy to use?" | "Can users complete checkout in under 3 minutes?" |
| "Do users like it?" | "Will users choose Design A or B for this task?" |
| "Does it make sense?" | "Can users find the settings without hints?" |
Test Plan Template
PROJECT: _______________
DATE: _______________
RESEARCHER: _______________
RESEARCH QUESTIONS:
1. _______________
2. _______________
3. _______________
PARTICIPANTS:
• Target: [Persona or user type]
• Count: [Number]
• Recruitment: [Source]
• Incentive: [Amount/type]
METHOD:
• Type: [Moderated/Unmoderated/Remote/In-person]
• Duration: [Minutes per session]
• Environment: [Tool/Location]
TASKS:
1. [Task description + success criteria]
2. [Task description + success criteria]
3. [Task description + success criteria]
METRICS:
• Completion rate (target: __%)
• Time on task (target: __ min)
• Error rate (target: __%)
• Satisfaction (target: __/5)
SCHEDULE:
• Pilot: [Date]
• Sessions: [Date range]
• Analysis: [Date]
• Report: [Date]Pilot Testing
Always pilot before real sessions:
- Run 1-2 test sessions with team members
- Check task clarity and timing
- Test recording/screen sharing
- Adjust based on pilot feedback
Pilot Checklist:
- [ ] Tasks understood without clarification
- [ ] Session fits in time slot
- [ ] Recording captures screen + audio
- [ ] Post-test questions make sense
---
Task Design
Good vs. Bad Tasks
| Bad Task | Why Bad | Good Task |
|---|---|---|
| "Find the settings" | Leading | "Change your notification preferences" |
| "Use the dashboard" | Vague | "Find how many sales you made last month" |
| "Click the blue button" | Prescriptive | "Submit your order" |
| "Do you like this?" | Opinion-based | "Rate how easy it was (1-5)" |
Task Construction Formula
SCENARIO + GOAL + SUCCESS CRITERIA
Scenario: Context that makes task realistic
Goal: What user needs to accomplish
Success: How we know they succeeded
Example:
"Imagine you're planning a trip to Paris next month. [SCENARIO]
Book a hotel for 3 nights in your budget. [GOAL]
You've succeeded when you see the confirmation page. [SUCCESS]"Task Types
| Type | Purpose | Example |
|---|---|---|
| Exploration | First impressions | "Look around and tell me what you think this does" |
| Specific | Core functionality | "Add item to cart and checkout" |
| Comparison | Design validation | "Which of these two menus would you use to..." |
| Stress | Edge cases | "What would you do if your payment failed?" |
Task Difficulty Progression
Start easy, increase difficulty:
Task 1: Warm-up (easy, builds confidence)
Task 2: Core flow (main functionality)
Task 3: Secondary flow (important but less common)
Task 4: Edge case (stress test)
Task 5: Free exploration (open-ended)---
Moderation Techniques
The Think-Aloud Protocol
Instruction Script: "As you work through the tasks, please think out loud. Tell me what you're looking at, what you're thinking, and what you're trying to do. There are no wrong answers - we're testing the design, not you."
Prompts When Silent:
- "What are you thinking right now?"
- "What do you expect to happen?"
- "What are you looking for?"
- "Tell me more about that"
Handling Common Situations
| Situation | What to Say |
|---|---|
| User asks for help | "What would you do if I weren't here?" |
| User is stuck | "What are your options?" (wait 30 sec before hint) |
| User apologizes | "You're doing great. We're testing the design." |
| User goes off-task | "That's interesting. Let's come back to [task]." |
| User criticizes | "Tell me more about that." (neutral, don't defend) |
Non-Leading Question Techniques
| Leading (Don't) | Neutral (Do) |
|---|---|
| "Did you find that confusing?" | "How was that experience?" |
| "The search is over here" | "What do you think you should do?" |
| "Don't you think X is easier?" | "Which do you prefer and why?" |
| "Did you notice the tooltip?" | "What happened there?" |
Post-Task Questions
After each task: 1. "How difficult was that?" (1-5 scale) 2. "What, if anything, was confusing?" 3. "What would you improve?"
After all tasks: 1. "What stood out to you?" 2. "What was the best/worst part?" 3. "Would you use this? Why/why not?"
---
Analysis Framework
Severity Rating Scale
| Severity | Definition | Criteria |
|---|---|---|
| 4 - Critical | Prevents task completion | User cannot proceed |
| 3 - Major | Significant difficulty | User struggles, considers giving up |
| 2 - Minor | Causes hesitation | User recovers independently |
| 1 - Cosmetic | Noticed but not problematic | User comments but unaffected |
Issue Documentation Template
ISSUE ID: ___
SEVERITY: [1-4]
FREQUENCY: [X/Y participants]
TASK: [Which task]
TIMESTAMP: [When in session]
OBSERVATION:
[What happened - factual description]
USER QUOTE:
"[Direct quote if available]"
HYPOTHESIS:
[Why this might be happening]
RECOMMENDATION:
[Proposed solution]
AFFECTED PERSONA:
[Which user types]Pattern Recognition
Quantitative Signals:
- Task completion rate < 80%
- Time on task > 2x expected
- Error rate > 20%
- Satisfaction < 3/5
Qualitative Signals:
- Same confusion point across 3+ users
- Repeated verbal frustration
- Workaround attempts
- Feature requests during task
Analysis Matrix
┌─────────────────┬───────────┬───────────┬───────────┐
│ Issue │ Frequency │ Severity │ Priority │
├─────────────────┼───────────┼───────────┼───────────┤
│ Can't find X │ 4/5 │ Critical │ HIGH │
│ Confusing label │ 3/5 │ Major │ HIGH │
│ Slow loading │ 2/5 │ Minor │ MEDIUM │
│ Typo in text │ 1/5 │ Cosmetic │ LOW │
└─────────────────┴───────────┴───────────┴───────────┘
Priority = Frequency × Severity---
Reporting Template
Executive Summary
USABILITY TEST REPORT
[Project Name] | [Date]
OVERVIEW
• Participants: [N] users matching [persona]
• Method: [Type of test]
• Tasks: [N] tasks covering [scope]
KEY FINDINGS
1. [Most critical issue + impact]
2. [Second issue]
3. [Third issue]
SUCCESS METRICS
• Completion rate: [X]% (target: Y%)
• Avg. time on task: [X] min (target: Y min)
• Satisfaction: [X]/5 (target: Y/5)
TOP RECOMMENDATIONS
1. [Highest priority fix]
2. [Second priority]
3. [Third priority]Detailed Findings Section
FINDING 1: [Title]
Severity: [Critical/Major/Minor/Cosmetic]
Frequency: [X/Y participants]
Affected Tasks: [List]
What Happened:
[Description of the problem]
Evidence:
• P1: "[Quote]"
• P3: "[Quote]"
• [Video timestamp if available]
Impact:
[How this affects users and business]
Recommendation:
[Proposed solution with rationale]
Design Mockup:
[Optional: before/after if applicable]Metrics Dashboard
TASK PERFORMANCE SUMMARY
Task 1: [Name]
├─ Completion: ████████░░ 80%
├─ Avg. Time: 2:15 (target: 2:00)
├─ Errors: 1.2 avg
└─ Satisfaction: ★★★★☆ 4.2/5
Task 2: [Name]
├─ Completion: ██████░░░░ 60% ⚠️
├─ Avg. Time: 4:30 (target: 3:00) ⚠️
├─ Errors: 3.1 avg ⚠️
└─ Satisfaction: ★★★☆☆ 3.1/5
[Continue for all tasks]---
Quick Reference
Session Checklist
Before Session:
- [ ] Test plan finalized
- [ ] Tasks written and piloted
- [ ] Recording set up and tested
- [ ] Consent form ready
- [ ] Prototype/product accessible
- [ ] Note-taking template ready
During Session:
- [ ] Consent obtained
- [ ] Think-aloud explained
- [ ] Recording started
- [ ] Tasks presented one at a time
- [ ] Post-task ratings collected
- [ ] Debrief questions asked
- [ ] Thanks and incentive
After Session:
- [ ] Notes organized
- [ ] Recording saved
- [ ] Initial impressions captured
- [ ] Issues logged
Common Metrics
| Metric | Formula | Target |
|---|---|---|
| Completion rate | Successful / Total × 100 | >80% |
| Time on task | Average seconds | <2x expected |
| Error rate | Errors / Attempts × 100 | <15% |
| Task-level satisfaction | Average rating | >4/5 |
| SUS score | Standard formula | >68 |
| NPS | Promoters - Detractors | >0 |
---
See also: `journey-mapping-guide.md` for contextual research
#!/usr/bin/env python3
"""
Data-Driven Persona Generator
Creates research-backed user personas from user data and interviews.
Usage:
python persona_generator.py [json]
Without arguments: Human-readable formatted output
With 'json': JSON output for integration with other tools
Examples:
python persona_generator.py # Formatted persona output
python persona_generator.py json # JSON for programmatic use
Table of Contents:
==================
CLASS: PersonaGenerator
__init__() - Initialize archetype templates and persona components
generate_persona_from_data() - Main entry: generate persona from user data + interviews
format_persona_output() - Format persona dict as human-readable text
PATTERN ANALYSIS:
_analyze_user_patterns() - Extract usage, device, context patterns from data
_identify_archetype() - Classify user into power/casual/business/mobile archetype
_analyze_behaviors() - Analyze usage patterns and feature preferences
DEMOGRAPHIC EXTRACTION:
_aggregate_demographics() - Calculate age range, location, tech proficiency
_extract_psychographics() - Extract motivations, values, attitudes, lifestyle
NEEDS & FRUSTRATIONS:
_identify_needs() - Identify primary/secondary goals, functional/emotional needs
_extract_frustrations() - Extract pain points from patterns and interviews
CONTENT GENERATION:
_generate_name() - Generate persona name from archetype
_generate_tagline() - Generate one-line persona summary
_generate_scenarios() - Create usage scenarios based on archetype
_select_quote() - Select representative quote from interviews
DATA VALIDATION:
_calculate_data_points() - Calculate sample size and confidence level
_derive_design_implications() - Generate actionable design recommendations
FUNCTIONS:
create_sample_user_data() - Generate sample data for testing/demo
main() - CLI entry point
Archetypes Supported:
- power_user: Daily users, 10+ features, efficiency-focused
- casual_user: Weekly users, basic needs, simplicity-focused
- business_user: Work context, team collaboration, ROI-focused
- mobile_first: Mobile primary, on-the-go, quick interactions
Output Components:
- name, archetype, tagline, quote
- demographics: age, location, occupation, education, tech_proficiency
- psychographics: motivations, values, attitudes, lifestyle
- behaviors: usage_patterns, feature_preferences, interaction_style
- needs_and_goals: primary, secondary, functional, emotional
- frustrations: pain points with frequency
- scenarios: contextual usage stories
- data_points: sample_size, confidence_level, validation_method
- design_implications: actionable recommendations
"""
import json
from typing import Dict, List, Tuple
from collections import Counter, defaultdict
import random
class PersonaGenerator:
"""Generate data-driven personas from user research"""
def __init__(self):
self.persona_components = {
'demographics': ['age', 'location', 'occupation', 'education', 'income'],
'psychographics': ['goals', 'frustrations', 'motivations', 'values'],
'behaviors': ['tech_savviness', 'usage_frequency', 'preferred_devices', 'key_activities'],
'needs': ['functional', 'emotional', 'social']
}
self.archetype_templates = {
'power_user': {
'characteristics': ['tech-savvy', 'frequent user', 'early adopter', 'efficiency-focused'],
'goals': ['maximize productivity', 'automate workflows', 'access advanced features'],
'frustrations': ['slow performance', 'limited customization', 'lack of shortcuts'],
'quote': "I need tools that can keep up with my workflow"
},
'casual_user': {
'characteristics': ['occasional user', 'basic needs', 'prefers simplicity'],
'goals': ['accomplish specific tasks', 'easy to use', 'minimal learning curve'],
'frustrations': ['complexity', 'too many options', 'unclear navigation'],
'quote': "I just want it to work without having to think about it"
},
'business_user': {
'characteristics': ['professional context', 'ROI-focused', 'team collaboration'],
'goals': ['improve team efficiency', 'track metrics', 'integrate with tools'],
'frustrations': ['lack of reporting', 'poor collaboration features', 'no enterprise features'],
'quote': "I need to show clear value to my stakeholders"
},
'mobile_first': {
'characteristics': ['primarily mobile', 'on-the-go usage', 'quick interactions'],
'goals': ['access anywhere', 'quick actions', 'offline capability'],
'frustrations': ['poor mobile experience', 'desktop-only features', 'slow loading'],
'quote': "My phone is my primary computing device"
}
}
def generate_persona_from_data(self, user_data: List[Dict],
interview_insights: List[Dict] = None) -> Dict:
"""Generate persona from user data and optional interview insights"""
# Analyze user data for patterns
patterns = self._analyze_user_patterns(user_data)
# Identify persona archetype
archetype = self._identify_archetype(patterns)
# Generate persona
persona = {
'name': self._generate_name(archetype),
'archetype': archetype,
'tagline': self._generate_tagline(patterns),
'demographics': self._aggregate_demographics(user_data),
'psychographics': self._extract_psychographics(patterns, interview_insights),
'behaviors': self._analyze_behaviors(user_data),
'needs_and_goals': self._identify_needs(patterns, interview_insights),
'frustrations': self._extract_frustrations(patterns, interview_insights),
'scenarios': self._generate_scenarios(archetype, patterns),
'quote': self._select_quote(interview_insights, archetype),
'data_points': self._calculate_data_points(user_data),
'design_implications': self._derive_design_implications(patterns)
}
return persona
def _analyze_user_patterns(self, user_data: List[Dict]) -> Dict:
"""Analyze patterns in user data"""
patterns = {
'usage_frequency': defaultdict(int),
'feature_usage': defaultdict(int),
'devices': defaultdict(int),
'contexts': defaultdict(int),
'pain_points': [],
'success_metrics': []
}
for user in user_data:
# Frequency patterns
freq = user.get('usage_frequency', 'medium')
patterns['usage_frequency'][freq] += 1
# Feature usage
for feature in user.get('features_used', []):
patterns['feature_usage'][feature] += 1
# Device patterns
device = user.get('primary_device', 'desktop')
patterns['devices'][device] += 1
# Context patterns
context = user.get('usage_context', 'work')
patterns['contexts'][context] += 1
# Pain points
if 'pain_points' in user:
patterns['pain_points'].extend(user['pain_points'])
return patterns
def _identify_archetype(self, patterns: Dict) -> str:
"""Identify persona archetype based on patterns"""
# Simple heuristic-based archetype identification
freq_pattern = max(patterns['usage_frequency'].items(), key=lambda x: x[1])[0] if patterns['usage_frequency'] else 'medium'
device_pattern = max(patterns['devices'].items(), key=lambda x: x[1])[0] if patterns['devices'] else 'desktop'
if freq_pattern == 'daily' and len(patterns['feature_usage']) > 10:
return 'power_user'
elif device_pattern in ['mobile', 'tablet']:
return 'mobile_first'
elif patterns['contexts'].get('work', 0) > patterns['contexts'].get('personal', 0):
return 'business_user'
else:
return 'casual_user'
def _generate_name(self, archetype: str) -> str:
"""Generate persona name based on archetype"""
names = {
'power_user': ['Alex', 'Sam', 'Jordan', 'Morgan'],
'casual_user': ['Pat', 'Jamie', 'Casey', 'Riley'],
'business_user': ['Taylor', 'Cameron', 'Avery', 'Blake'],
'mobile_first': ['Quinn', 'Skylar', 'River', 'Sage']
}
name_pool = names.get(archetype, names['casual_user'])
first_name = random.choice(name_pool)
roles = {
'power_user': 'the Power User',
'casual_user': 'the Casual User',
'business_user': 'the Business Professional',
'mobile_first': 'the Mobile Native'
}
return f"{first_name} {roles[archetype]}"
def _generate_tagline(self, patterns: Dict) -> str:
"""Generate persona tagline"""
freq = max(patterns['usage_frequency'].items(), key=lambda x: x[1])[0] if patterns['usage_frequency'] else 'regular'
context = max(patterns['contexts'].items(), key=lambda x: x[1])[0] if patterns['contexts'] else 'general'
return f"A {freq} user who primarily uses the product for {context} purposes"
def _aggregate_demographics(self, user_data: List[Dict]) -> Dict:
"""Aggregate demographic information"""
demographics = {
'age_range': '',
'location_type': '',
'occupation_category': '',
'education_level': '',
'tech_proficiency': ''
}
if not user_data:
return demographics
# Age range
ages = [u.get('age', 30) for u in user_data if 'age' in u]
if ages:
avg_age = sum(ages) / len(ages)
if avg_age < 25:
demographics['age_range'] = '18-24'
elif avg_age < 35:
demographics['age_range'] = '25-34'
elif avg_age < 45:
demographics['age_range'] = '35-44'
else:
demographics['age_range'] = '45+'
# Location type
locations = [u.get('location_type', 'urban') for u in user_data if 'location_type' in u]
if locations:
demographics['location_type'] = Counter(locations).most_common(1)[0][0]
# Tech proficiency
tech_scores = [u.get('tech_proficiency', 5) for u in user_data if 'tech_proficiency' in u]
if tech_scores:
avg_tech = sum(tech_scores) / len(tech_scores)
if avg_tech < 3:
demographics['tech_proficiency'] = 'Beginner'
elif avg_tech < 7:
demographics['tech_proficiency'] = 'Intermediate'
else:
demographics['tech_proficiency'] = 'Advanced'
return demographics
def _extract_psychographics(self, patterns: Dict, interviews: List[Dict] = None) -> Dict:
"""Extract psychographic information"""
psychographics = {
'motivations': [],
'values': [],
'attitudes': [],
'lifestyle': ''
}
# Extract from patterns
if patterns['usage_frequency'].get('daily', 0) > 0:
psychographics['motivations'].append('Efficiency')
psychographics['values'].append('Time-saving')
if patterns['devices'].get('mobile', 0) > patterns['devices'].get('desktop', 0):
psychographics['lifestyle'] = 'On-the-go, mobile-first'
psychographics['values'].append('Flexibility')
# Extract from interviews if available
if interviews:
for interview in interviews:
if 'motivations' in interview:
psychographics['motivations'].extend(interview['motivations'])
if 'values' in interview:
psychographics['values'].extend(interview['values'])
# Deduplicate
psychographics['motivations'] = list(set(psychographics['motivations']))[:5]
psychographics['values'] = list(set(psychographics['values']))[:5]
return psychographics
def _analyze_behaviors(self, user_data: List[Dict]) -> Dict:
"""Analyze user behaviors"""
behaviors = {
'usage_patterns': [],
'feature_preferences': [],
'interaction_style': '',
'learning_preference': ''
}
if not user_data:
return behaviors
# Usage patterns
frequencies = [u.get('usage_frequency', 'medium') for u in user_data]
freq_counter = Counter(frequencies)
behaviors['usage_patterns'] = [f"{freq}: {count} users" for freq, count in freq_counter.most_common(3)]
# Feature preferences
all_features = []
for user in user_data:
all_features.extend(user.get('features_used', []))
feature_counter = Counter(all_features)
behaviors['feature_preferences'] = [feat for feat, count in feature_counter.most_common(5)]
# Interaction style
if len(behaviors['feature_preferences']) > 10:
behaviors['interaction_style'] = 'Exploratory - uses many features'
else:
behaviors['interaction_style'] = 'Focused - uses core features'
return behaviors
def _identify_needs(self, patterns: Dict, interviews: List[Dict] = None) -> Dict:
"""Identify user needs and goals"""
needs = {
'primary_goals': [],
'secondary_goals': [],
'functional_needs': [],
'emotional_needs': []
}
# Derive from usage patterns
if patterns['usage_frequency'].get('daily', 0) > 0:
needs['primary_goals'].append('Complete tasks efficiently')
needs['functional_needs'].append('Speed and performance')
if patterns['contexts'].get('work', 0) > 0:
needs['primary_goals'].append('Professional productivity')
needs['functional_needs'].append('Integration with work tools')
# Common emotional needs
needs['emotional_needs'] = [
'Feel confident using the product',
'Trust the system with data',
'Feel supported when issues arise'
]
# Extract from interviews
if interviews:
for interview in interviews:
if 'goals' in interview:
needs['primary_goals'].extend(interview['goals'][:2])
if 'needs' in interview:
needs['functional_needs'].extend(interview['needs'][:3])
return needs
def _extract_frustrations(self, patterns: Dict, interviews: List[Dict] = None) -> List[str]:
"""Extract user frustrations"""
frustrations = []
# Common frustrations from patterns
if patterns['pain_points']:
frustration_counter = Counter(patterns['pain_points'])
frustrations = [pain for pain, count in frustration_counter.most_common(5)]
# Add archetype-specific frustrations if not enough from data
if len(frustrations) < 3:
frustrations.extend([
'Slow loading times',
'Confusing navigation',
'Lack of mobile optimization'
])
return frustrations[:5]
def _generate_scenarios(self, archetype: str, patterns: Dict) -> List[Dict]:
"""Generate usage scenarios"""
scenarios = []
# Common scenarios based on archetype
scenario_templates = {
'power_user': [
{
'title': 'Bulk Processing',
'context': 'Monday morning, needs to process week\'s data',
'goal': 'Complete batch operations quickly',
'steps': ['Import data', 'Apply bulk actions', 'Export results'],
'pain_points': ['No keyboard shortcuts', 'Slow processing']
}
],
'casual_user': [
{
'title': 'Quick Task',
'context': 'Needs to complete single task',
'goal': 'Get in, complete task, get out',
'steps': ['Find feature', 'Complete task', 'Save/Exit'],
'pain_points': ['Can\'t find feature', 'Too many steps']
}
],
'business_user': [
{
'title': 'Team Collaboration',
'context': 'Working with team on project',
'goal': 'Share and collaborate efficiently',
'steps': ['Create content', 'Share with team', 'Track feedback'],
'pain_points': ['No real-time collaboration', 'Poor permission management']
}
],
'mobile_first': [
{
'title': 'On-the-Go Access',
'context': 'Commuting, needs quick access',
'goal': 'Complete task on mobile',
'steps': ['Open mobile app', 'Quick action', 'Sync with desktop'],
'pain_points': ['Feature parity issues', 'Poor mobile UX']
}
]
}
return scenario_templates.get(archetype, scenario_templates['casual_user'])
def _select_quote(self, interviews: List[Dict] = None, archetype: str = 'casual_user') -> str:
"""Select representative quote"""
if interviews:
# Try to find a real quote
for interview in interviews:
if 'quotes' in interview and interview['quotes']:
return interview['quotes'][0]
# Use archetype default
return self.archetype_templates[archetype]['quote']
def _calculate_data_points(self, user_data: List[Dict]) -> Dict:
"""Calculate supporting data points"""
return {
'sample_size': len(user_data),
'confidence_level': 'High' if len(user_data) > 50 else 'Medium' if len(user_data) > 20 else 'Low',
'last_updated': 'Current',
'validation_method': 'Quantitative analysis + Qualitative interviews'
}
def _derive_design_implications(self, patterns: Dict) -> List[str]:
"""Derive design implications from persona"""
implications = []
# Based on frequency
if patterns['usage_frequency'].get('daily', 0) > patterns['usage_frequency'].get('weekly', 0):
implications.append('Optimize for speed and efficiency')
implications.append('Provide keyboard shortcuts and power features')
else:
implications.append('Focus on discoverability and guidance')
implications.append('Simplify onboarding experience')
# Based on device
if patterns['devices'].get('mobile', 0) > 0:
implications.append('Mobile-first responsive design')
implications.append('Touch-optimized interactions')
# Based on context
if patterns['contexts'].get('work', 0) > patterns['contexts'].get('personal', 0):
implications.append('Professional visual design')
implications.append('Enterprise features (SSO, audit logs)')
return implications[:5]
def format_persona_output(self, persona: Dict) -> str:
"""Format persona for display"""
output = []
output.append("=" * 60)
output.append(f"PERSONA: {persona['name']}")
output.append("=" * 60)
output.append(f"\n📝 {persona['tagline']}\n")
output.append(f"Archetype: {persona['archetype'].replace('_', ' ').title()}")
output.append(f"Quote: \"{persona['quote']}\"\n")
output.append("👤 Demographics:")
for key, value in persona['demographics'].items():
if value:
output.append(f" • {key.replace('_', ' ').title()}: {value}")
output.append("\n🧠 Psychographics:")
if persona['psychographics']['motivations']:
output.append(f" Motivations: {', '.join(persona['psychographics']['motivations'])}")
if persona['psychographics']['values']:
output.append(f" Values: {', '.join(persona['psychographics']['values'])}")
output.append("\n🎯 Goals & Needs:")
for goal in persona['needs_and_goals'].get('primary_goals', [])[:3]:
output.append(f" • {goal}")
output.append("\n😤 Frustrations:")
for frustration in persona['frustrations'][:3]:
output.append(f" • {frustration}")
output.append("\n📊 Behaviors:")
for pref in persona['behaviors'].get('feature_preferences', [])[:3]:
output.append(f" • Frequently uses: {pref}")
output.append("\n💡 Design Implications:")
for implication in persona['design_implications']:
output.append(f" → {implication}")
output.append(f"\n📈 Data: Based on {persona['data_points']['sample_size']} users")
output.append(f" Confidence: {persona['data_points']['confidence_level']}")
return "\n".join(output)
def create_sample_user_data():
"""Create sample user data for testing"""
return [
{
'user_id': f'user_{i}',
'age': 25 + (i % 30),
'usage_frequency': ['daily', 'weekly', 'monthly'][i % 3],
'features_used': ['dashboard', 'reports', 'settings', 'sharing', 'export'][:3 + (i % 3)],
'primary_device': ['desktop', 'mobile', 'tablet'][i % 3],
'usage_context': ['work', 'personal'][i % 2],
'tech_proficiency': 3 + (i % 7),
'pain_points': ['slow loading', 'confusing UI', 'missing features'][:(i % 3) + 1]
}
for i in range(30)
]
def main():
import sys
generator = PersonaGenerator()
# Create sample data
user_data = create_sample_user_data()
# Optional interview insights
interview_insights = [
{
'quotes': ["I need to see all my data in one place"],
'motivations': ['Efficiency', 'Control'],
'goals': ['Save time', 'Make better decisions']
}
]
# Generate persona
persona = generator.generate_persona_from_data(user_data, interview_insights)
# Output
if len(sys.argv) > 1 and sys.argv[1] == 'json':
print(json.dumps(persona, indent=2))
else:
print(generator.format_persona_output(persona))
if __name__ == "__main__":
main()
Related skills
FAQ
What outputs does ux-researcher-designer produce?
ux-researcher-designer produces user personas, journey maps, usability test plans, and research synthesis documents. Each output follows a dedicated workflow designed for Senior UX Designer and Researcher tasks.
What input does ux-researcher-designer need?
ux-researcher-designer expects raw user research input such as interview transcripts or survey data. The skill transforms that material into structured personas, maps, and test plans with design recommendations.
Is Ux Researcher Designer safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.