Teardown·11 min read

A complete heuristic evaluation, run on the worst app we could imagine

Most guides list Nielsen's 10 heuristics and stop. This one runs the entire method on Driftly, a fictional project tracker that violates every single one, and shows the report card.

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.

driftly.app/import
Importing your data
Importing…
Started 4 minutes ago
What the agent sawThe bar never fills. There is no percentage, no current step, no time estimate, and no way to know whether closing this modal cancels the import.
tap the pin
Driftly's import modal: a progress bar with no progress, no steps, no estimate. Four minutes and counting.
The roast

“Importing…” is not a status. It is a shrug in sans-serif.

The receipt

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.

driftly.app/home
Driftly
No workstream artifacts yet
Instantiate a workstream artifact to begin resource-loading your delivery cadence.
Instantiate artifact
What the agent sawThe primary action of the entire product is labeled 'Instantiate artifact'. New users must translate the interface before they can use it.
tap the pin
Driftly's empty dashboard. Somewhere in this sentence is the concept 'create a project'.
The roast

Your onboarding should not require a glossary. Nobody has ever opened a project tracker hoping to resource-load their delivery cadence.

The receipt

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.

driftly.app/boards
Driftly
Board “Q3 launch” archived forever
What the agent sawThe toast confirms permanent deletion but offers no Undo action. The only recovery path is emailing support and hoping.
tap the pin
One click, no confirm, no undo. The toast is a eulogy.
DRIFT-3Blocker
Archiving a board is instant, permanent, and unrecoverable
EvidenceNo confirmation before a destructive action, no undo after it, and the archive control sits adjacent to frequent-use actions.
RuleNielsen #3 · User control and freedom
FixSoft-delete with a 30-day archive, an Undo action in the toast, and distance (or a confirm) between destructive and routine controls.
Effort⚡ Quick win · ~1 hr for the undo toast

#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.

driftly.app/settings
Driftly
ProfileBillingTeam
Save
Apply changes
Commit
What the agent saw'Apply changes' is styled in the same red as Driftly's delete buttons, so saving your billing details feels like detonating them.
tap the pin
Three tabs, three verbs, three colors for the identical action. One of them is danger-red.
The roast

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.

The receipt

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.

driftly.app/sprints/new
New sprint
Starts
Jul 18, 2026
Ends
Jul 4, 2026
Submission failed. Please review your input.
Create sprint
What the agent sawThe end-date field accepts any date, including ones before the start date. Validation runs only on submit, and the error names no field.
tap the pin
The date picker allowed this. The form blamed the user for it.
The roast

Letting users pick an impossible date and then scolding them for it is entrapment with extra steps.

The receipt

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).

driftly.app/board/q3-launch
Driftly
What the agent sawIcon-only controls with no tooltips force users to click to find out, and clicking to find out is how boards get archived (finding #3).
tap the pin
Seven icons, zero labels, zero tooltips. One is load-bearing and destructive.
The receipt

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.

driftly.app/tasks?filter=done
Driftly
41 completed tasks
Archive
Archive
Archive
Archive
+ 37 more, one Archive click each
What the agent sawEach Archive button acts on one row and triggers a full reload. There is no select-all, no bulk action, no shortcut.
tap the pin
41 tasks, 41 clicks. Driftly's idea of a workflow is a treadmill.
The roast

This screen bills itself as productivity software while manufacturing 41 units of pure friction.

The receipt

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.

driftly.app/dashboard
Driftly
🎉 Driftly Summit early-bird tickets are live!
Upgrade to Pro and unlock 14 more widgets
New: AI sprint names (beta)
Rate us on G2 and get a sticker pack
What the agent sawFour dismissible banners stack above the fold. Each returns next session. The actual dashboard starts at 55% of viewport height.
tap the pin
Content begins somewhere below the fourth banner. Allegedly.
The receipt

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.

driftly.app/tasks/2481
!
Something went wrong
ERR_SAVE_FAILED 0x80040154 (REGDB_E_CLASSNOTREG)
OK
What the agent sawThe dialog exposes an internal error code, names no cause, offers no retry, and dismissing it discards the user's unsaved work.
tap the pin
The error message: a hex code and a lie. Nothing about this is OK.
DRIFT-9Blocker
Failed save shows a hex code and throws away the user's work
EvidenceError text is an internal code with no cause and no next step. The only action, OK, closes the dialog and drops unsaved edits.
RuleNielsen #9 · Recognize, diagnose, recover from errors
FixPlain-language message (what failed, why, what to do), a Retry action, and edits preserved locally until a save succeeds.
Effort⚒ Deep fix · ~2 days with draft-saving

#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.

driftly.app/help
Need help?
PDF
Driftly_Manual_v3_FINAL(2).pdf
214 pages · updated 14 months ago
What the agent sawHelp is a downloadable PDF: unsearchable from the app, unindexed, 14 months stale, and invisible to anyone mid-task.
tap the pin
Driftly_Manual_v3_FINAL(2).pdf. The filename alone is a confession.
The receipt

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 documentation

The 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.

#HeuristicDriftly’s crimeSeverityEffort
1Visibility of system statusProgress bar with no progressMajor⚡ ~1 hr
2Match with the real world“Instantiate a workstream artifact”Major⚡ ~1 hr
3User control and freedomPermanent archive, no undoBlocker⚡ ~1 hr
4Consistency and standardsSave / Apply / Commit rouletteMinor⚡ ~1 hr
5Error preventionDate picker accepts impossible datesMajor⚡ ~1 hr
6Recognition rather than recallSeven unlabeled mystery glyphsMajor⚡ ~1 hr
7Flexibility and efficiency41 archives, 41 clicksMajor⚒ ~2 days
8Aesthetic and minimalist designFour banners before contentMinor⚡ ~1 hr
9Recover from errorsHex code, lost work, “OK”Blocker⚒ ~2 days
10Help and documentationA 214-page PDF from last yearMinor⚒ ~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.

Receipts for this article
NN/g · 10 Usability Heuristics for User Interface Design (Nielsen, 1994) · NN/g · How to Rate the Severity of Usability Problems · NN/g · How to Conduct a Heuristic Evaluation · NN/g · The Theory Behind Heuristic Evaluations (Nielsen, 1994)

Questions people actually ask

What are the 10 usability heuristics?
Jakob Nielsen's 10 usability heuristics (1994): visibility of system status, match between system and the real world, user control and freedom, consistency and standards, error prevention, recognition rather than recall, flexibility and efficiency of use, aesthetic and minimalist design, help users recognize, diagnose, and recover from errors, and help and documentation.
How long does a heuristic evaluation take?
A single-evaluator pass over 3 core flows takes half a day to two days depending on product size. Traditional multi-evaluator studies take longer; agent-based tools compress the walk-through to under an hour.
What severity scale should I use for usability problems?
NN/g rates severity 0 to 4 based on frequency, impact, and persistence. In practice, three tiers map cleanly to a ticket queue: Blocker (users fail or lose work), Major (users struggle), Minor (friction).
Is a heuristic evaluation the same as a UX audit?
A heuristic evaluation is one method inside a UX audit. Audits typically combine heuristics with accessibility checks (WCAG), analytics review, and flow walk-throughs.

Reading about UX debt is the slow way.

Paste your URL and an AI agent will use your product like a real user, find what breaks, and hand you the tickets. From $49, no install, no retainer.

Get my free roast →
Your site or a competitor’s. We won’t tell.
Keep reading
Do it yourself
The founder's UX audit checklist: 24 checks, 3 flows, one afternoon
Workflow
The anatomy of a UX ticket an engineer accepts without a meeting
Teardown
Your signup is a bouncer, and the line outside is leaving