A heuristic evaluation checks an interface against ten research-backed usability principles, scores each violation by severity, and outputs a ranked list of fixes. Most explanations stop at the definitions. This one runs the whole method, end to end, on an app that deserves it.
Meet Driftly, a project tracker for busy teams. Driftly is fictional. Every one of its problems is not: each screen below reproduces a failure pattern that ships in real SaaS products every day. Inventing the app lets us roast at full temperature without dragging a real team, which is also ClapBack policy: punch at products, never at people.
How a heuristic evaluation works
An evaluator walks through the product screen by screen, comparing what they see against the 10 usability heuristics Jakob Nielsen published in 1994. Every mismatch becomes a finding: which heuristic it violates, where, how bad, and what to do about it. No users are recruited. That is the method’s superpower (it takes hours, not weeks) and its known limit: Nielsen’s research found single evaluators catch only about 35% of usability problems on average, which is why evaluations use multiple evaluators, or multiple passes.
For severity, NN/g rates problems on a 0 to 4 scale combining frequency, impact, and persistence. We collapse that into the three tiers a ticket queue understands: Blocker (severity 4: users fail or lose work), Major (severity 3: users struggle, some give up), and Minor (severity 1 to 2: friction and irritation). Ratings 3 and 4 are where NN/g says your fix budget should go.
Now the fun part. Ten heuristics, ten Driftly screens, ten findings.
#1 · Visibility of system status
The system should always tell users what is going on, through timely feedback. Driftly’s data import has been running for four minutes. The progress bar is a gray rectangle. It is not loading. It is just gray.
“Importing…” is not a status. It is a shrug in sans-serif.
Users abandoned tasks they believed had frozen. With no progress signal, a working import and a crashed one look identical, so the rational move is to bail. Severity: Major. Fix: show step names and a real percentage; if duration is unknowable, say so. ⚡ Quick win · ~1 hr.
Nielsen #1 · Visibility of system status#2 · Match between system and the real world
Speak the user’s language, not yours. Driftly greets new users with an empty state that asks them to “instantiate a workstream artifact.” The button that creates a project does not contain the word project.
Your onboarding should not require a glossary. Nobody has ever opened a project tracker hoping to resource-load their delivery cadence.
The first task of a first session is comprehension. Jargon at the entry point taxes every single new user, at the exact moment they are least committed. Severity: Major. Fix: rename to “New project” and rewrite the empty state in words a customer would say out loud. ⚡ Quick win · ~1 hr.
Nielsen #2 · Match with the real world#3 · User control and freedom
Users need an emergency exit: undo, redo, cancel. Driftly’s archive action fires instantly, permanently, and from a button one row away from “Rename.” The toast proudly announces the board is gone forever.
#4 · Consistency and standards
Same action, same words, same place. Driftly’s three settings tabs commit changes with three different verbs (“Save”, “Apply changes”, “Commit”) in three different colors, one of which is the same red the app uses for destructive actions.
Every synonym you ship is a tiny quiz for the user. Driftly’s settings are a vocabulary test with a fire alarm painted on one answer.
Users learn a pattern once and expect it to hold. Each deviation forces re-reading and invites hesitation, and color-coding a safe action as dangerous trains people to ignore your danger color. Severity: Minor. Fix: one verb, one style, everywhere. ⚡ Quick win · ~1 hr.
Nielsen #4 · Consistency and standards#5 · Error prevention
The best error message is the one you made impossible. Driftly’s sprint form happily accepts an end date two weeks before the start date, waits for submit, then rejects the whole form with “Submission failed. Please review your input.” Review what? It does not say.
Letting users pick an impossible date and then scolding them for it is entrapment with extra steps.
The form permits a state the system will never accept. Constrain the picker (end date can’t precede start), validate inline, and the error message becomes unnecessary. Severity: Major. Fix as described. ⚡ Quick win · ~1 hr.
Nielsen #5 · Error prevention#6 · Recognition rather than recall
Minimize memory load: options should be visible, not memorized. Driftly’s board toolbar is seven unlabeled glyphs. No text, no tooltips. One of them archives things (see finding #3 for how that goes).
Icons are recognized reliably only when paired with labels; abstract glyphs mean users must recall each one’s meaning from past exploratory clicks. Severity: Major, because exploration here has a Blocker inside it. Fix: labels on the five most-used actions, tooltips on all. ⚡ Quick win · ~1 hr.
Nielsen #6 · Recognition rather than recall#7 · Flexibility and efficiency of use
Experts should have accelerators. Driftly has 41 completed tasks to archive and exactly one way to do it: 41 individual clicks, each with its own page reload. No multi-select, no “archive all done,” no keyboard path.
This screen bills itself as productivity software while manufacturing 41 units of pure friction.
Routine maintenance scales linearly with content, so the product punishes exactly its most successful users. Severity: Major. Fix: multi-select with bulk actions. ⚒ Deep fix · ~2 days.
Nielsen #7 · Flexibility and efficiency#8 · Aesthetic and minimalist design
Every extra element competes with the ones that matter. Driftly’s dashboard loads with four stacked banners (a conference ad, an upsell, a beta announcement, and a plea for G2 reviews) before any actual work is visible.
The signal-to-announcement ratio inverts the product’s hierarchy: marketing outranks the user’s own data. Severity: Minor (individually dismissible), trending Major every time another team adds a banner. Fix: one announcement slot, rotated, dismissed means dismissed. ⚡ Quick win · ~1 hr.
Nielsen #8 · Aesthetic and minimalist design#9 · Help users recognize, diagnose, and recover from errors
Error messages should say what happened, in plain language, and how to recover. Driftly’s save failure produces “ERR_SAVE_FAILED 0x80040154 (REGDB_E_CLASSNOTREG)” and a single button: OK. It is not OK. The user’s edits are gone.
#10 · Help and documentation
Ideally the product needs no manual; when it does, help should be searchable and contextual. Driftly’s Help page contains one artifact: a 214-page PDF, last updated 14 months ago, with “FINAL(2)” in the filename.
Help that lives outside the product cannot answer a question at the moment it is asked, and stale help quietly teaches users wrong answers. Severity: Minor. Fix: searchable in-app docs for the top 20 questions; retire the PDF. ⚒ Deep fix · ~2 days.
Nielsen #10 · Help and documentationThe Driftly report card
Ten findings: 2 Blockers, 5 Majors, 3 Minors, and 7 of the 10 fixes are roughly an hour of work. That distribution is the punchline of most real audits too: the scary part is rarely the effort, it is that nobody had receipts before.
| # | Heuristic | Driftly’s crime | Severity | Effort |
|---|---|---|---|---|
| 1 | Visibility of system status | Progress bar with no progress | Major | ⚡ ~1 hr |
| 2 | Match with the real world | “Instantiate a workstream artifact” | Major | ⚡ ~1 hr |
| 3 | User control and freedom | Permanent archive, no undo | Blocker | ⚡ ~1 hr |
| 4 | Consistency and standards | Save / Apply / Commit roulette | Minor | ⚡ ~1 hr |
| 5 | Error prevention | Date picker accepts impossible dates | Major | ⚡ ~1 hr |
| 6 | Recognition rather than recall | Seven unlabeled mystery glyphs | Major | ⚡ ~1 hr |
| 7 | Flexibility and efficiency | 41 archives, 41 clicks | Major | ⚒ ~2 days |
| 8 | Aesthetic and minimalist design | Four banners before content | Minor | ⚡ ~1 hr |
| 9 | Recover from errors | Hex code, lost work, “OK” | Blocker | ⚒ ~2 days |
| 10 | Help and documentation | A 214-page PDF from last year | Minor | ⚒ ~2 days |
How to run this on your own product
You just watched the whole method. To repeat it on your app: pick your three money flows (signup, onboarding, the core loop), walk each one against the 10 heuristics above, and write every violation down with a severity and a fix before you touch any code. Two practical notes from the field:
- Fresh eyes matter more than expertise. You have gone blind to your own product’s rough edges; anyone who has never seen it will find things you cannot. Nielsen’s multi-evaluator data exists precisely because single familiar evaluators miss most problems.
- A violation that never becomes a ticket never gets fixed. Write each one with severity, evidence, and effort so it can go straight into the sprint. We wrote up the exact format in how to turn UX findings into tickets devs actually fix.
If you want the checklist version of this method, scoped to what a founder can do in an afternoon, that is the founder’s UX audit checklist. And if you would rather an agent run the walk-through for you, that is the entire reason ClapBack exists.