UI audit
An audit that returns "the spacing feels cramped and the blue is a bit harsh" is worth nothing: it
cannot be prioritised, argued with, or fixed. Every finding names a place, a consequence to a
person trying to do something, and a change.
When this fires
An interface already exists and someone wants to know what is wrong with it — your work or theirs,
a shipped screen or a prototype. It does not fire to prove a change works (browser-verification)
or to establish a direction where none exists (frontend-design).
Procedure
- Get the interface in front of you, rendered. Source is not the interface. If you can only
see screenshots or code, say so up front and mark the audit partial — several lens passes below
are simply not available to you, and pretending otherwise is the main way these go wrong.
- Establish what the screen is for before judging it: the primary task, who does it, and how
often. An audit without this produces preferences. If nobody can tell you, write down your
assumption and audit against it explicitly.
- Walk the primary task end to end, as the user, at realistic data volume — not the demo
three rows. Note every point you hesitated, guessed, backtracked or re-read. Those moments are
the findings; everything after this is structure for them.
- Pass in fixed lenses, in this order, so the cheap and structural problems surface before
cosmetics:
- Hierarchy — does what matters most read first? Is anything shouting that shouldn't?
- Language — do labels say what the thing does, in the user's words? Any jargon, any
ambiguous verb, any button whose name doesn't match what happens?
- Affordance and feedback — is it obvious what is clickable? Does every action acknowledge
itself? Is destructive action distinguishable from routine action?
- States — empty, loading, error, partial permission, very long content, zero results.
Reach them if you can; list the ones you could not reach.
- Density and scan — can the eye find one row among many? Is the whitespace doing work or
just filling?
- Accessibility basics — text contrast, visible focus, target size, keyboard reachability
of every action, semantic structure and label association. Basics only: a conformance audit
is separate work and should be named as such, not implied by this pass.
- Consistency — with the rest of this product, and with platform convention. A local
improvement that breaks a product-wide pattern is a finding against itself.
- Write each finding as four parts: where it is, what a user does wrong or slowly because of
it, the evidence (screenshot, the string, the state you reached), and one concrete fix. If you
cannot name the user consequence, it is a preference — drop it, or put it in a clearly separate
"taste, not defect" list the reader can ignore.
- Rank by user cost times frequency, never by how easy the fix is. The cheap fix at the bottom
of a ranked list still gets done first; a list sorted by cheapness hides the expensive problem
that actually matters.
- Band the findings: blocks the task / costs time or confidence / polish. Three bands, so the
reader can stop after the first.
- Report; do not rebuild. Changing the interface is separate work with separate authorization.
If you were asked to fix as well as audit, fix after the findings are agreed, and keep the
before/after evidence.
Checklist
Failure handling
- Screenshots only. Audit hierarchy, language, density and visible contrast; say that
interaction, keyboard, focus order and every non-visible state went unchecked. Do not infer that
a control works because it looks like one.
- A state you cannot reach — say which, and what would be needed. An unreachable error state
is itself worth reporting if real users reach it.
- A finding that will not reproduce — report it as intermittent with what you did. An
intermittent problem reported as fixed is worse than one reported as intermittent.
- The fix is not local — it belongs to a shared component or a token. Say so, and hand it to
design-systems rather than proposing a local override that forks the system.
- You designed this screen. Say so in the report. A self-audit is still useful, but the reader
must know it is not an independent review.
- Everything looks fine. That is a legitimate result if you walked the task and passed the
lenses. Report what you checked; do not manufacture findings to look thorough.
Evidence to report
The route or screen and the viewports seen. The task you walked, and where you hesitated. Per
finding: the screenshot or quoted string that shows it. The lenses passed and the states reached,
plus the ones not reached. Say plainly that this is a review, not verification — an audit proves
nothing about whether the interface works, and the fixes it recommends remain untested until
someone renders and operates them.
1---2name: ui-audit3description: Review an existing interface and return ranked, concrete findings — each with its location, the user consequence, and a specific fix — instead of taste notes. Use when asked to critique, audit or review a screen or flow, when someone's UI work needs judging, or when an interface "feels off" and the problem needs naming. Not for proving a change renders and functions, not for inventing a new visual direction, and not for an accessibility conformance audit, which is its own discipline.4---56# UI audit78An audit that returns "the spacing feels cramped and the blue is a bit harsh" is worth nothing: it9cannot be prioritised, argued with, or fixed. Every finding names a place, a consequence to a10person trying to do something, and a change.1112## When this fires1314An interface already exists and someone wants to know what is wrong with it — your work or theirs,15a shipped screen or a prototype. It does not fire to prove a change works (`browser-verification`)16or to establish a direction where none exists (`frontend-design`).1718## Procedure19201. **Get the interface in front of you, rendered.** Source is not the interface. If you can only21 see screenshots or code, say so up front and mark the audit partial — several lens passes below22 are simply not available to you, and pretending otherwise is the main way these go wrong.232. **Establish what the screen is for** before judging it: the primary task, who does it, and how24 often. An audit without this produces preferences. If nobody can tell you, write down your25 assumption and audit against it explicitly.263. **Walk the primary task end to end**, as the user, at realistic data volume — not the demo27 three rows. Note every point you hesitated, guessed, backtracked or re-read. Those moments are28 the findings; everything after this is structure for them.294. **Pass in fixed lenses**, in this order, so the cheap and structural problems surface before30 cosmetics:31 - **Hierarchy** — does what matters most read first? Is anything shouting that shouldn't?32 - **Language** — do labels say what the thing does, in the user's words? Any jargon, any33 ambiguous verb, any button whose name doesn't match what happens?34 - **Affordance and feedback** — is it obvious what is clickable? Does every action acknowledge35 itself? Is destructive action distinguishable from routine action?36 - **States** — empty, loading, error, partial permission, very long content, zero results.37 Reach them if you can; list the ones you could not reach.38 - **Density and scan** — can the eye find one row among many? Is the whitespace doing work or39 just filling?40 - **Accessibility basics** — text contrast, visible focus, target size, keyboard reachability41 of every action, semantic structure and label association. Basics only: a conformance audit42 is separate work and should be named as such, not implied by this pass.43 - **Consistency** — with the rest of this product, and with platform convention. A local44 improvement that breaks a product-wide pattern is a finding against itself.455. **Write each finding as four parts**: where it is, what a user does wrong or slowly because of46 it, the evidence (screenshot, the string, the state you reached), and one concrete fix. If you47 cannot name the user consequence, it is a preference — drop it, or put it in a clearly separate48 "taste, not defect" list the reader can ignore.496. **Rank by user cost times frequency**, never by how easy the fix is. The cheap fix at the bottom50 of a ranked list still gets done first; a list sorted by cheapness hides the expensive problem51 that actually matters.527. **Band the findings**: blocks the task / costs time or confidence / polish. Three bands, so the53 reader can stop after the first.548. **Report; do not rebuild.** Changing the interface is separate work with separate authorization.55 If you were asked to fix as well as audit, fix after the findings are agreed, and keep the56 before/after evidence.5758## Checklist5960- [ ] The interface was rendered, or the audit is explicitly marked partial61- [ ] The primary task is stated, from the product or as a written assumption62- [ ] The task was walked end to end at realistic data volume63- [ ] Every lens was passed, or named as not passed64- [ ] Each finding has location, consequence, evidence and a fix65- [ ] Findings are ranked by user cost and frequency, and banded66- [ ] Preferences are separated from defects, not blended into them67- [ ] States and paths you could not reach are listed6869## Failure handling7071- **Screenshots only.** Audit hierarchy, language, density and visible contrast; say that72 interaction, keyboard, focus order and every non-visible state went unchecked. Do not infer that73 a control works because it looks like one.74- **A state you cannot reach** — say which, and what would be needed. An unreachable error state75 is itself worth reporting if real users reach it.76- **A finding that will not reproduce** — report it as intermittent with what you did. An77 intermittent problem reported as fixed is worse than one reported as intermittent.78- **The fix is not local** — it belongs to a shared component or a token. Say so, and hand it to79 `design-systems` rather than proposing a local override that forks the system.80- **You designed this screen.** Say so in the report. A self-audit is still useful, but the reader81 must know it is not an independent review.82- **Everything looks fine.** That is a legitimate result if you walked the task and passed the83 lenses. Report what you checked; do not manufacture findings to look thorough.8485## Evidence to report8687The route or screen and the viewports seen. The task you walked, and where you hesitated. Per88finding: the screenshot or quoted string that shows it. The lenses passed and the states reached,89plus the ones not reached. Say plainly that this is a review, not verification — an audit proves90nothing about whether the interface works, and the fixes it recommends remain untested until91someone renders and operates them.