Usability Testing
What it is
Section titled “What it is”Usability testing observes real people trying to complete real tasks with your product, and studies where they succeed and where they struggle. It measures effectiveness (did they do it), efficiency (how much effort) and satisfaction (how did it feel).
task ──► user attempts ──► observe ──► measure ──► iterate │ │ │ │ think-aloud notes, success rate, fix the (what they say) recordings time, SUS top issueIt is qualitative first: five participants usually surface most major problems, long before a statistically large sample is worth the cost.
When to use it / when to avoid it
Section titled “When to use it / when to avoid it”Use it for
- Before writing more code for a feature people may not understand
- When analytics show drop-off but not why
- Validating a design with the people who will actually use it
- Comparing two design options with the same tasks
Avoid or reduce it when
- You ask users what they want instead of watching what they do
- You recruit only teammates or power users and call them representative
- You test a prototype so rough that the feedback is about the mockup, not the idea
- You run it once and never close the loop by fixing the top issues
Frameworks & tools
Section titled “Frameworks & tools”| Tool | Ecosystem | Notes |
|---|---|---|
| Maze | Web | Remote, unmoderated task studies at scale |
| Lookback | Multi | Moderated sessions with recording and notes |
| UserTesting | Web / mobile | Large participant panel on demand |
| Hotjar | Web | Heatmaps, session replays, on-site survey |
| System Usability Scale | Method | Ten-item questionnaire producing a 0-100 score |
| Nielsen heuristics | Method | Ten heuristics for expert review |
| Optimal Workshop | Web | Card sorting and tree testing for IA |
| Playwright | JS/TS | Capture flows and screenshots for annotation |
Quick setup
Section titled “Quick setup”npm install -D @playwright/testnpx playwright install// record a task flow for later review with participantsawait page.screenshot({ path: 'flow-step-1.png', fullPage: true });pip install pandas matplotlib# analyse SUS scores and task success ratesgo get golang.org/x/text/language# localise locale-specific usability content<!-- export survey data for analysis --><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.11.0</version></dependency>dotnet add package CsvHelper# export and score usability session dataExample
Section titled “Example”import { test } from '@playwright/test';
test('signup task flow for usability review', async ({ page }) => { await page.goto('/signup'); await page.screenshot({ path: 'step-1-email.png' }); await page.getByLabel('Email').fill('user@example.com'); await page.getByRole('button', { name: 'Continue' }).click(); await page.screenshot({ path: 'step-2-confirm.png' });});import pandas as pd
def sus_score(responses): # responses: 10 ints 1-5, odd items positive, even items reversed total = 0 for i, r in enumerate(responses, start=1): total += (r - 1) if i % 2 else (5 - r) return total * 2.5
df = pd.read_csv("sus_responses.csv")df["sus"] = df.iloc[:, :10].apply(sus_score, axis=1)print(df["sus"].mean())func successRate(completed, attempted int) float64 { if attempted == 0 { return 0 } return float64(completed) / float64(attempted) * 100}enum Heuristic { VISIBILITY_OF_STATUS, MATCH_TO_REAL_WORLD, USER_CONTROL, CONSISTENCY, ERROR_PREVENTION, RECOGNITION_OVER_RECALL, FLEXIBILITY, AESTHETIC_MINIMALISM, ERROR_RECOVERY, HELP}record Finding(Heuristic heuristic, String evidence, Severity severity) {}using CsvHelper;using System.Globalization;
using var writer = new StreamWriter("usability_sessions.csv");using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);csv.WriteRecords(sessions);Anti-patterns & best practices
Section titled “Anti-patterns & best practices”- Watch behaviour, not opinions. What users do is more reliable than what they say they would do.
- Give real tasks, not leading questions. “Book a return flight to Da Nang”, not “Do you like the booking screen?”
- Stay quiet during the task. Defer help; a moderator who rescues participants hides the very problem you are looking for.
- Recruit representative users. Five real target users beat fifty colleagues.
- Report observed problems and evidence. Tie each finding to a clip or quote, then prioritise by severity.
- Close the loop. A study whose top issues never get fixed is theatre.
Self-assessment quiz
Section titled “Self-assessment quiz”Self-assessment quiz
Pick one answer per question, then press Check answers.