Frontend bugs your automation will never catch

A green test suite means your assertions passed — not that your UI is right. These are the bug classes I only ever find by hand.

Automation checks what you told it to check. The most embarrassing frontend bugs I've found — the ones users screenshot and post — were all invisible to a passing suite, because no assertion covered them. Here are the classes I hunt for manually on every release, and how.

1. Layout breakage at the edges

Every layout works with the data the designer imagined. It breaks with real data: a 40-character name in a badge sized for 10, a price that grows a digit, an address that wraps twice. My checklist: longest realistic text in every field, smallest supported screen, largest font-size accessibility setting. That last one breaks more apps than any device difference.

2. RTL and localization mirroring

As a native Arabic speaker I test the RTL build of everything, and it is astonishing what ships: back arrows pointing the wrong way, progress bars filling backwards, mixed-direction text scrambling phone numbers, truncation cutting the start of words. Automation rarely covers this because the flows are written once, against the LTR build. If your app supports Arabic, Hebrew, or Farsi, a manual RTL pass on core journeys should be non-negotiable.

3. Interrupted and resumed flows

Test scripts run start to finish. Users don't. They get a phone call mid-checkout, background the app for two days, lose signal in an elevator, rotate the screen at the worst moment. My favorite exploratory charter is just: start every important flow, interrupt it in the rudest way available, come back, and watch what happens. Duplicate submissions, lost form state, and stale-token errors all live here.

4. Dead and empty states

The happy path has data. New users have none. Deleted-everything users have less than none. For every screen I ask: what does this look like empty, loading on a slow connection, and failing? A spinner that never resolves into an error message isn't loading — it's a dead end wearing a loading state's clothes.

5. Visual regressions under themes

Dark mode doubles your visual surface. Gray-on-slightly-darker-gray text, invisible dividers, and hardcoded white backgrounds all pass functional tests perfectly — the elements are there, they're just unreadable. A five-minute theme sweep of the main screens catches most of it.

Making it systematic

None of this means abandoning automation — it means being honest about its shape. The suite guards the behaviors you've already specified; exploratory testing finds the ones you haven't. I timebox charters (30–45 minutes, one bug class, one area), log everything in JIRA with severity, and feed anything that recurs back into the automated suite as a new assertion.

The split that works for me: automation owns "does it still work?", exploration owns "what haven't we thought of?" — and the release isn't ready until both have an answer.