1"use strict";(self.webpackChunktheuxshop=self.webpackChunktheuxshop||[]).push([[8505],{6495:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>h,contentTitle:()=>d,default:()=>x,frontMatter:()=>c,metadata:()=>t,toc:()=>u});const t=JSON.parse('{"id":"guides/usability-testing-quickstart","title":"Usability Testing Quickstart","description":"Run your first usability test with this practical guide covering recruitment, task design, facilitation, and analysis.","source":"@site/.tmp/docs-published/guides/usability-testing-quickstart.mdx","sourceDirName":"guides","slug":"/guides/usability-testing-quickstart","permalink":"/guides/usability-testing-quickstart","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"id":"usability-testing-quickstart","title":"Usability Testing Quickstart","description":"Run your first usability test with this practical guide covering recruitment, task design, facilitation, and analysis.","sidebar_position":4},"sidebar":"guidesSidebar","previous":{"title":"Research Planning","permalink":"/guides/research-planning"},"next":{"title":"Accessibility Checklist","permalink":"/guides/accessibility-checklist"}}');var n=i(4848),r=i(8453),l=i(9176),a=i(5920),o=i(5388);const c={id:"usability-testing-quickstart",title:"Usability Testing Quickstart",description:"Run your first usability test with this practical guide covering recruitment, task design, facilitation, and analysis.",sidebar_position:4},d="Usability Testing Quickstart",h={},u=[{value:"What usability testing is (and isn't)",id:"what-usability-testing-is-and-isnt",level:2},{value:"The basic process",id:"the-basic-process",level:2},{value:"Preparing for the test",id:"preparing-for-the-test",level:2},{value:"Define what you're testing",id:"define-what-youre-testing",level:3},{value:"Create realistic tasks",id:"create-realistic-tasks",level:3},{value:"Plan 5-7 tasks per session",id:"plan-5-7-tasks-per-session",level:3},{value:"Write a test script",id:"write-a-test-script",level:3},{value:"Recruit participants",id:"recruit-participants",level:3},{value:"Set up the environment",id:"set-up-the-environment",level:3},{value:"During the test",id:"during-the-test",level:2},{value:"Facilitator role",id:"facilitator-role",level:3},{value:"Note-taker role",id:"note-taker-role",level:3},{value:"Common facilitator mistakes",id:"common-facilitator-mistakes",level:3},{value:"When participants struggle",id:"when-participants-struggle",level:3},{value:"Session timing",id:"session-timing",level:3},{value:"After the test",id:"after-the-test",level:2},{value:"Analyze while it's fresh",id:"analyze-while-its-fresh",level:3},{value:"Look for patterns",id:"look-for-patterns",level:3},{value:"Severity assessment",id:"severity-assessment",level:3},{value:"Create actionable recommendations",id:"create-actionable-recommendations",level:3},{value:"Reporting findings",id:"reporting-findings",level:2},{value:"Who needs what",id:"who-needs-what",level:3},{value:"Report format",id:"report-format",level:3},{value:"Video clips",id:"video-clips",level:3}];function p(e){const s={em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"usability-testing-quickstart",children:"Usability Testing Quickstart"})}),"\n",(0,n.jsx)(s.p,{children:"Usability testing is the most direct way to see how people actually use your product. This guide helps you run your first test - or improve tests you're already doing."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.em,{children:"Last updated: October 2023"})}),"\n",(0,n.jsx)(s.h2,{id:"what-usability-testing-is-and-isnt",children:"What usability testing is (and isn't)"}),"\n",(0,n.jsx)(s.p,{children:"Usability testing means watching representative users attempt realistic tasks with your product (or prototype) while you observe."}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"What it reveals"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Whether users can complete tasks"}),"\n",(0,n.jsx)(s.li,{children:"Where users get confused or stuck"}),"\n",(0,n.jsx)(s.li,{children:"How users interpret your interface"}),"\n",(0,n.jsx)(s.li,{children:"Unexpected behaviors and workarounds"}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"What it doesn't reveal"}),":"]}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Whether users want your product"}),"\n",(0,n.jsx)(s.li,{children:"Whether users will pay for your product"}),"\n",(0,n.jsx)(s.li,{children:"What features users want (necessarily)"}),"\n",(0,n.jsx)(s.li,{children:"Statistical significance (with typical sample sizes)"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Usability testing complements other research methods - it doesn't replace them."}),"\n",(0,n.jsx)(s.h2,{id:"the-basic-process",children:"The basic process"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.strong,{children:"Prepare"}),": Define tasks, recruit participants, set up the environment"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.strong,{children:"Facilitate"}),": Guide participants through tasks while observing"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.strong,{children:"Analyze"}),": Review findings and identify patterns"]}),"\n",(0,n.jsxs)(s.li,{children:[(0,n.jsx)(s.strong,{children:"Report"}),": Share insights and recommendations"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"preparing-for-the-test",children:"Preparing for the test"}),"\n",(0,n.jsx)(s.h3,{id:"define-what-youre-testing",children:"Define what you're testing"}),"\n",(0,n.jsx)(s.p,{children:"Be specific:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Which part of the product?"}),"\n",(0,n.jsx)(s.li,{children:"Which user flows?"}),"\n",(0,n.jsx)(s.li,{children:"What questions are you trying to answer?"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"You can't test everything in one session. Focus on the areas with the most uncertainty or the highest stakes."}),"\n",(0,n.jsx)(s.h3,{id:"create-realistic-tasks",children:"Create realistic tasks"}),"\n",(0,n.jsx)(s.p,{children:"Tasks should:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Reflect real user goals (not feature demonstrations)"}),"\n",(0,n.jsx)(s.li,{children:"Be specific enough to observe"}),"\n",(0,n.jsx)(s.li,{children:"Avoid revealing the answer in the wording"}),"\n"]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Weak task"}),': "Use the filter feature to narrow results"\n',(0,n.jsx)(s.strong,{children:"Better task"}),': "You\'re looking for Italian restaurants within 2 miles that are open now. Find some options."']}),"\n",(0,n.jsx)(s.p,{children:"The weak version tells users where to go. The better version gives a realistic goal and lets you see if users find and use the filter."}),"\n",(0,n.jsx)(s.h3,{id:"plan-5-7-tasks-per-session",children:"Plan 5-7 tasks per session"}),"\n",(0,n.jsx)(s.p,{children:"More than that exhausts participants and dilutes focus. Fewer may
1not provide enough insight. Prioritize ruthlessly - you can always run more sessions."}),"\n",(0,n.jsx)(s.h3,{id:"write-a-test-script",children:"Write a test script"}),"\n",(0,n.jsx)(s.p,{children:"Your script should include:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Introduction (purpose, think-aloud instructions, reassurance)"}),"\n",(0,n.jsx)(s.li,{children:"Background questions (brief)"}),"\n",(0,n.jsx)(s.li,{children:"Tasks in order"}),"\n",(0,n.jsx)(s.li,{children:"Follow-up questions for each task"}),"\n",(0,n.jsx)(s.li,{children:"Wrap-up questions"}),"\n",(0,n.jsx)(s.li,{children:"Thanks and next steps"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Having a script ensures consistency across sessions and keeps you from forgetting important elements."}),"\n",(0,n.jsx)(l.A,{variant:"note",title:"Think-aloud instructions",children:(0,n.jsx)(s.p,{children:"Ask participants to say what they're thinking as they work. \"Please think out loud - tell me what you're looking at, what you're thinking, what you're trying to do.\" This gives insight into their mental model, not just their clicks."})}),"\n",(0,n.jsx)(s.h3,{id:"recruit-participants",children:"Recruit participants"}),"\n",(0,n.jsx)(s.p,{children:"Who to recruit:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"People who match your actual user profile"}),"\n",(0,n.jsx)(s.li,{children:"Mix of characteristics relevant to your product"}),"\n",(0,n.jsx)(s.li,{children:"Not colleagues, friends, or family if avoidable"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"How many:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"5 participants often reveals most major issues"}),"\n",(0,n.jsx)(s.li,{children:"6-8 provides more confidence"}),"\n",(0,n.jsx)(s.li,{children:"More than 10 rarely justifies the time unless you're testing multiple segments"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"How to recruit:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"In-app invitations to existing users"}),"\n",(0,n.jsx)(s.li,{children:"Customer lists (with appropriate consent)"}),"\n",(0,n.jsx)(s.li,{children:"Recruiting services"}),"\n",(0,n.jsx)(s.li,{children:"Community outreach (forums, social media)"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Plan for 20-30% no-show/cancel rate."}),"\n",(0,n.jsx)(s.h3,{id:"set-up-the-environment",children:"Set up the environment"}),"\n",(0,n.jsx)(s.p,{children:"You need:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"A quiet space (or reliable remote tool)"}),"\n",(0,n.jsx)(s.li,{children:"The product/prototype ready to test"}),"\n",(0,n.jsx)(s.li,{children:"Recording method (with consent)"}),"\n",(0,n.jsx)(s.li,{children:"Note-taking system"}),"\n",(0,n.jsx)(s.li,{children:"Backup plan for technical issues"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"during-the-test",children:"During the test"}),"\n",(0,n.jsx)(s.h3,{id:"facilitator-role",children:"Facilitator role"}),"\n",(0,n.jsx)(s.p,{children:"Your job is to observe, not to help, teach, or defend:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Ask the task, then be quiet"}),"\n",(0,n.jsx)(s.li,{children:"Don't answer questions about how to use the product"}),"\n",(0,n.jsx)(s.li,{children:'Redirect questions: "What would you do if I weren\'t here?"'}),"\n",(0,n.jsx)(s.li,{children:"Observe body language and hesitation, not just success/failure"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"note-taker-role",children:"Note-taker role"}),"\n",(0,n.jsx)(s.p,{children:"If possible, have a separate note-taker. They should capture:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Exact quotes"}),"\n",(0,n.jsx)(s.li,{children:"Behavioral observations"}),"\n",(0,n.jsx)(s.li,{children:"Timestamps of key moments"}),"\n",(0,n.jsx)(s.li,{children:"Non-verbal cues"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"common-facilitator-mistakes",children:"Common facilitator mistakes"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Leading participants"}),': "Did you notice the search button?" \u2192 This points them to what you wanted them to find.']}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Helping stuck users"}),": Jumping in to explain. Instead, note that they were stuck and what they tried."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Defending the design"}),': "Well, that feature is supposed to..." \u2192 The test isn\'t about being right.']}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Talking too much"}),": Every word you say is a word they're not saying. Embrace silence."]}),"\n",(0,n.jsx)(s.h3,{id:"when-participants-struggle",children:"When participants struggle"}),"\n",(0,n.jsx)(s.p,{children:"It's uncomfortable to watch someone struggle, but that struggle is data."}),"\n",(0,n.jsx)(s.p,{children:"If someone is completely stuck:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"Note how long they struggled and what they tried"}),"\n",(0,n.jsx)(s.li,{children:"Offer a hint only if needed to continue to other tasks"}),"\n",(0,n.jsx)(s.li,{children:'Mark this task as "required assistance"'}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"session-timing",children:"Session timing"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Introduction: 5 minutes"}
1),"\n",(0,n.jsx)(s.li,{children:"Background questions: 5 minutes"}),"\n",(0,n.jsx)(s.li,{children:"Tasks: 30-45 minutes"}),"\n",(0,n.jsx)(s.li,{children:"Wrap-up: 5-10 minutes"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Total: 45-65 minutes. Don't schedule back-to-back - you need buffer for overruns and decompression."}),"\n",(0,n.jsx)(s.h2,{id:"after-the-test",children:"After the test"}),"\n",(0,n.jsx)(s.h3,{id:"analyze-while-its-fresh",children:"Analyze while it's fresh"}),"\n",(0,n.jsx)(s.p,{children:"Review notes and recordings soon after sessions. You'll remember context that doesn't make it into notes."}),"\n",(0,n.jsx)(s.p,{children:"For each task, note:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Success/failure"}),"\n",(0,n.jsx)(s.li,{children:"Time taken"}),"\n",(0,n.jsx)(s.li,{children:"Errors made"}),"\n",(0,n.jsx)(s.li,{children:"Confusion points"}),"\n",(0,n.jsx)(s.li,{children:"Quotes"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"look-for-patterns",children:"Look for patterns"}),"\n",(0,n.jsx)(s.p,{children:"Individual sessions reveal individual experiences. Patterns across sessions reveal design issues."}),"\n",(0,n.jsx)(s.p,{children:"Focus on:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Problems multiple participants encountered"}),"\n",(0,n.jsx)(s.li,{children:"Points where participants did something unexpected"}),"\n",(0,n.jsx)(s.li,{children:"Confusion that even successful participants expressed"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"severity-assessment",children:"Severity assessment"}),"\n",(0,n.jsx)(s.p,{children:"Not all problems are equal. Assess severity:"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Critical"}),": Prevents task completion. Users cannot work around it."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Serious"}),": Significantly impairs task completion. Users can work around it with difficulty."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Minor"}),": Causes confusion or minor delay. Users recover easily."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Cosmetic"}),": Noted by users but doesn't affect task success."]}),"\n",(0,n.jsx)(s.h3,{id:"create-actionable-recommendations",children:"Create actionable recommendations"}),"\n",(0,n.jsx)(s.p,{children:"For each finding, suggest:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"What to do about it (specific action)"}),"\n",(0,n.jsx)(s.li,{children:"Why that would help (connection to observed problem)"}),"\n",(0,n.jsx)(s.li,{children:"Priority (based on severity and frequency)"}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"Recommendations without evidence are opinions. Link everything back to what you observed."}),"\n",(0,n.jsx)(s.h2,{id:"reporting-findings",children:"Reporting findings"}),"\n",(0,n.jsx)(s.h3,{id:"who-needs-what",children:"Who needs what"}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Executives"}),": Summary of major findings, key recommendations, impact"]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Designers"}),": Detailed findings, video clips, specific recommendations"]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Developers"}),": Implementation-relevant details, edge cases discovered"]}),"\n",(0,n.jsx)(s.h3,{id:"report-format",children:"Report format"}),"\n",(0,n.jsx)(s.p,{children:"A useful report includes:"}),"\n",(0,n.jsxs)(s.ol,{children:["\n",(0,n.jsx)(s.li,{children:"Executive summary (1 page)"}),"\n",(0,n.jsx)(s.li,{children:"Methodology (brief: who, how many, what you tested)"}),"\n",(0,n.jsx)(s.li,{children:"Key findings (organized by theme or severity)"}),"\n",(0,n.jsx)(s.li,{children:"Detailed findings (task by task if helpful)"}),"\n",(0,n.jsx)(s.li,{children:"Recommendations (prioritized)"}),"\n",(0,n.jsx)(s.li,{children:"Appendix (screener, script, raw data)"}),"\n"]}),"\n",(0,n.jsx)(s.h3,{id:"video-clips",children:"Video clips"}),"\n",(0,n.jsx)(s.p,{children:"Short clips showing problems in action are worth pages of description. Edit clips to 30-60 seconds showing the moment of confusion."}),"\n",(0,n.jsx)(a.A,{items:[{question:"What if users keep asking me questions during the test?",answer:"Redirect with 'What do you think?' or 'What would you try?' If they ask about your intentions, defer: 'I'm interested in your experience. I can answer questions after we're done.'"},{question:"Can I test with colleagues if I can't recruit real users?",answer:"It's better than nothing, but expect biased results. Colleagues know too much about the product and company context. Use them for catching obvious issues, not for validating that the design works."},{question:"How do I test something that isn't built yet?",answer:"Prototypes. They can range from paper sketches to clickable mockups to functional prototypes. Test with the lowest-fidelity prototype that lets users attempt realistic tasks."},{question:"What if stakeholders want to attend sessions?",answer:"Great - observation builds empathy. But establish ground rules: observers don't talk, don't help, and save discussion for after. Consider having observers in another room watching a stream."},{question:"How do I know if a finding is a real problem or just one user's experience?",answer:"Multiple participants encountering the same issue is strong evidence. A single occurrence might be an anomaly or might be a sign of something others would hit too. Use judgment, and note confidence level in your reports."},{question:"Remote or in-person testing?",answer:"Both work. In-person provides richer observation (body language, physical context). Remote is easier logistically and may better represent real-world use. Choose based on what you need to learn and practical constraints."}]}),"\n",(0,n.jsx)(o.A,{title:"Related resources",links:[{label:"Research Planning",to:"/guides/research-planning"},{label:"Usability Test Script Tool",to:"/tools/usability-test-script"},{label:"Heuristic Review Tool",to:"/tools/heuristic-review"},{label:"Error States Pattern",to:"/patterns/error-states"}]})]})}function x(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},9176:(e,s,i)=>{i.d(s,{A:()=>r});i(6540);var t=i(4164),n=i(4848);function r({variant:e="default",title:s,children:i}){return(0,n.jsxs)("div",{className:(0,t.A)("ux-callout","default"!==e&&`ux-callout--${e}`),children:[(0,n.jsx)("div",{className:"ux-callout__title",children:s||{default:"Note",tip:"Tip",warning:"Warning",note:"Field Note"}[e]}),(0,n.jsx)("div",{className:"ux-callout__content",children:i})]})}},5920:(e,s,i)=>{i.d(s,{A:()=>n});i(6540);var t=i(4848);function n({items:e}){return(0,t.jsx)("div",{className:"ux-faq",children:e.map((e,s)=>(0,t.jsxs)("div",{className:"ux-faq__item",children:[(0,t.jsx)("div",{className:"ux-faq__question",children:e.question}),(0,t.jsx)("div",{className:"ux-faq__answer",children:(0,t.jsx)("p",{children:e.answer})})]},s))})}},5388:(e,s,i)=>{i.d(s,{A:()=>r});i(6540);var t=i(6289),n=i(4848);function r({title:e="Related Resources",links:s}){return(0,n.jsxs)("div",{className:"ux-related",children:[(0,n.jsx)("div",{className:"ux-related__title",children:e}),(0,n.jsx)("ul",{className:"ux-related__list",children:s.map((e,s)=>(0,n.jsx)("li",{children:(0,n.jsx)(t.A,{to:e.to,className:"ux-related__link",children:e.label})},s))})]})}},8453:(e,s,i)=>{i.d(s,{R:()=>l,x:()=>a});var t=i(6540);const n={},r=t.createContext(n);function l(e){const s=t.useContext(r);return t.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.