The issue gallery — spot these in the wild

Real, common UX failures — each shown as it actually appears on screen. Two families: deceptive patterns (working as designed, harming on purpose — taxonomy per Harry Brignull's deceptive.design, now cited in EU & FTC enforcement) and usability failures (nobody meant harm, users suffer anyway). Every card tells you how to log it.

Part A — Deceptive patterns (intentional · report even though they "work")

These pass every functional test. That's the point. Your report is often the only voice the user has.

Sneak into basket / PreselectionSEV HIGH
Trailhead Tent 2P£129.00 ✓Gear-Guard™ £4.99/mo — added for you Total£133.99
A paid add-on arrives pre-ticked. The user never chose it — they just failed to notice it.
Log: "Paid add-on preselected at checkout — opt-OUT instead of opt-in. Repro: open checkout, observe ticked box."
Hidden costs / Drip pricingSEV HIGH
checkout — step 3 of 3 Subtotal£147.00 Handling & processing+£6.50 "Small order" fee+£2.99 Total£156.49
Fees that only appear at the last step, after the user is invested. The advertised price was fiction.
Log: "Fees first disclosed at final step — price on product page ≠ checkout total. Screenshot both."
ConfirmshamingSEV MED
Get 10% off your first order Yes, I love saving money No thanks, I prefer paying full price
The decline option is written to insult you. Choice is legal; humiliation is the pattern.
Log: "Opt-out copy uses shaming language — quote it verbatim in the ticket."
Hard to cancel (Roach motel)SEV HIGH
Join: one click ✓ Cancel: call us Mon–Fri 9–11am, wait ~40 min, confirm by post
Easy in, hard out. Sign-up is one tap; cancelling needs a phone call and a stamp.
Log: "Cancellation path materially harder than signup — count the steps of each and put both numbers in the report."
Fake scarcitySEV MED
Ridgeline 55LOnly 2 left! …same "2 left" yesterday, last week, and in incognito
Stock pressure that never changes. If "2 left" survives a week, it's not inventory — it's theater.
Log: "Scarcity claim not backed by stock data — same count across sessions/days. Attach dated screenshots."
Fake urgency (countdown)SEV MED
Flash sale ends in 01:59:12 refresh the page… it's 01:59:12 again
A timer that resets on refresh. The deadline is a prop.
Log: "Countdown resets on reload — record screen while refreshing to prove it."
Fake social proofSEV HIGH
★★★★★"Best tent ever!" — Anna K., 2 min ago — Anna K., 2 min ago (identical, different product)
Reviews or activity popups that are generated, duplicated, or unverifiable.
Log: "Identical review text/name across products — link both URLs side by side."
Trick wordingSEV MED
✓Untick this box if you do not want to avoid missing offers
Double and triple negatives engineered so any answer means "yes, email me."
Log: "Consent copy requires multi-negative parsing — paste the sentence, note the default state."
Disguised adsSEV MED
⬇ DOWNLOAD NOW actual download is a tiny text link below get file (2.3 MB)
The big shiny button is an advert; the real action is the small grey link. Classic on download sites.
Log: "Ad styled as the primary action — mark which element is the real control in an annotated screenshot."
NaggingSEV LOW
Enable notifications? YesAsk me later "later" = every single visit, forever · no "never" option
The same interruption on every visit with no permanent "no". Wears users down until they surrender.
Log: "Prompt reappears each session; no permanent decline. Note frequency and absence of 'never'."
Bait and switchSEV HIGH
Advertised: Tent £89from the ad On arrival: "Sold out" → shows £149 model
You came for one thing; it's mysteriously unavailable and a pricier one is waiting.
Log: "Advertised item consistently unavailable; redirect targets higher-price SKU. Keep the ad + landing screenshots."
Forced continuitySEV HIGH
FREE TRIAL — day 14card on file Tomorrow: charged £19reminder email: none
The free trial silently becomes a paid subscription. No warning, no reminder, charge first.
Log: "Trial converts to paid with no notice — verify: is there a reminder email/notification before charge? Test with a real trial."
Comparison preventionSEV MED
Scout
£9 /mo
Trekker
£0.63 /day*
Expedition
£499 /2yrs
three plans, three different units — good luck comparing
Prices shown in deliberately mismatched units (per day / per month / per 2 years) so no honest comparison is possible.
Log: "Plan prices use inconsistent units — normalize all to monthly in the ticket to show the obfuscation."

Part B — Usability failures (unintentional · still costs users and money)

Nobody designed these to hurt. They hurt anyway — and they're the easiest wins in your report.

Silent failureSEV HIGH
Delivery notes: leave at №14 Save changes…clicked. nothing. saved? who knows.
The action works (or fails) with zero feedback. Users click again, then distrust everything.
Log: "No success/failure feedback on Save — expected: toast/confirmation. Actual: silence. Video helps."
Cryptic error messageSEV HIGH
ERROR 204: VALIDATION_FAILED which field? what's wrong? what now?
An error that names nothing, blames nothing, offers nothing. The user's only option is to give up.
Log: "Error text is developer-facing — expected: what happened + how to fix. Paste exact string + trigger steps."
Form wipes on errorSEV HIGH
Email: dana@example ✗ Password: (was filled — now empty) Address: (gone too)
One invalid field and the form deletes everything the user typed. Punishment for a typo.
Log: "Validation error clears sibling fields — data loss on retry. List which fields survive and which don't."
Dead clickSEV MED
Free shipping over £50* underlined, blue, cursor: pointer… does nothing
Looks clickable, isn't. Every dead click erodes trust in every other control on the page.
Log: "Element styled as link but has no action — expected either behavior or non-link styling."
Rage-click magnetSEV MED
Continue disabled — but WHY? no hint. users click ×7
A disabled button with no explanation. The user can't know what's missing, so they hammer it.
Log: "Disabled CTA gives no reason — expected inline hint ('add a size first'). Session recordings will show rage clicks."
Infinite spinnerSEV HIGH
3 minutes now · no timeout · no error · no retry
Loading forever with no timeout or fallback. The app never admits it failed.
Log: "Request hangs with endless loader — expected timeout + retry after Ns. Note network state (throttle to repro)."
Totals disagreeSEV HIGH
Plan card says£19.00/mo Checkout says£22.80/mo VAT? fee? nobody says
Two screens, two different numbers for the same thing, no explanation between them.
Log: "Price mismatch: plan page vs checkout (£19 vs £22.80) — screenshot both, note if any label explains the delta."
No undo on destructive actionSEV HIGH
Delete project? DeleteCancel one tap · permanent · no undo · no grace period
Permanent destruction one accidental tap away, with no undo window or soft-delete.
Log: "Irreversible delete without undo/grace — expected: 30-day soft delete or undo toast."
Layout shift (CLS)SEV MED
ad loads 2s late, pushes everything down… Confirm orderCancel ← was where Confirm just was
Content jumps as things load and the user's finger lands on the wrong button.
Log: "Late-loading element shifts CTA position — misclick risk. Capture on slow 3G throttle; mention CLS."
Low contrast textSEV MED
Shipping takes 5–7 business days This line is readable. The one above failed WCAG.
Grey-on-white "aesthetic" text that fails accessibility contrast — invisible in sunlight, invisible to many always.
Log: "Text fails WCAG AA contrast (measure the ratio — DevTools shows it). Element + computed colors in ticket."
Tiny tap targetSEV MED
Gear-Guard™ £4.99/mo✕ the remove ✕ is 9px on mobile — thumb needs 44px
The control users need most is the smallest thing on the screen. Coincidence, surely.
Log: "Tap target under 44×44px on mobile — name the element, device, and miss rate when you try it 5 times."
Keyboard trap / focus lostSEV HIGH
Newsletter modal Tab… Tab… Tab… focus cycles inside forever — Esc does nothing
Keyboard users get stuck inside a dialog with no Escape and no way out. A hard accessibility failure.
Log: "Modal traps keyboard focus; Esc/close unreachable without mouse — WCAG 2.1.2. Steps: open modal, Tab through."
Stale cache shows old dataSEV MED
Price shown£129 Price charged£149 page cached yesterday · price changed this morning
The page shows yesterday's price, the backend charges today's. Cache made the UI lie.
Log: "Displayed price stale vs charged price — repro with hard-refresh comparison; note cache headers if you can."