Design Review
When to use: Before shipping any page. During design critiques. Weekly self-audits. When reviewing someone else's work.
The test: Can you answer "why" for every element on the page?
The 5-Question Audit
Before any detailed review, answer these five. If you can't answer all five, the page isn't ready for detailed review.
| # | Question | What a Good Answer Looks Like |
|---|---|---|
| 1 | Who is this for? | A specific person, not "everyone" |
| 2 | What do they need to know? | One essential piece of information |
| 3 | What do they need to do? | One clear action |
| 4 | Why should they trust us? | Specific proof (testimonial, logo, number) |
| 5 | What's stopping them? | The real objection, not the stated one |
First Impression
Look at the page cold. No context. Answer immediately:
- Can you state what this page is about in one sentence?
- Can you name the target audience?
- Can you identify the single primary action?
- Can you summarize the page message without scrolling?
- Can you describe the intended feeling in one word?
Measurement
| Check | Threshold | How to Measure |
|---|---|---|
| Five-second test | 5/5 people identify purpose, audience, action | Test with 5 real people who haven't seen it |
| First meaningful content | Visible within 1.5s (FCP) | Lighthouse |
| Above-fold value | Full value proposition visible without scrolling | Load page at 768px viewport height |
Message Clarity
Is It Clear?
- Ask 3 people to restate the page's message -- do all 3 match your intent?
- Can you state the one takeaway in under 10 words?
- Zero terms used without definition or link
- Removing any sentence still communicates the core message
- Zero repeated ideas across sections (search for synonym overlap)
Is It Necessary?
- Every section earns its place (removing it would lose something)
- No element pulls attention from the primary goal
- Missing this section would change the outcome
- Removing it wouldn't go unnoticed
Visual Design Pass
Hierarchy
| Check | Question | Pass If |
|---|---|---|
| Dominance | What matters most here? | One element is 1.5x+ larger than everything else per viewport |
| Order | Why are things in this order? | Sections match: problem before solution, proof before CTA |
| Clarity | Can you see hierarchy at 25% zoom? | Screenshot at 25%: 3+ distinct size tiers visible |
| Importance | How would someone know what's important? | Important elements are largest, highest-contrast, or topmost |
Elements
For each element on the page, ask:
- Can you name the specific problem this element solves?
- Does removing this element break the page's goal?
- Is the format optimal? (data = table, process = diagram, emotion = image)
- Does every edge align to the grid? (DevTools: check for sub-pixel misalignment)
User Flow Pass
Actions
- Every link/button leads to content that delivers on its label
- Each scroll-length contains at least one new idea, proof point, or CTA
- At the bottom of every viewport, the next action is visible
- Every button label describes what will happen ("Save draft" not "OK")
- After every action, a visible confirmation appears within 200ms
Friction
- Ask 3 people: "Where would you leave?" -- fix every point they name
- Each step requires fewer decisions than the previous step
- Ask 3 people to complete the goal -- zero hesitations longer than 5 seconds
- Count clicks from landing to goal completion -- can you reduce by 1?
Review Workflow
Solo Review
| Phase | Duration | What to Do |
|---|---|---|
| Fresh eyes | 2 min | Look at page cold, write first impressions |
| 5-Question Audit | 3 min | Answer all five questions, note gaps |
| Message clarity | 5 min | Read every word, check for redundancy and confusion |
| Visual hierarchy | 5 min | Squint test, check focal points, scan headings only |
Team Review
| Phase | Duration | What to Do |
|---|---|---|
| Context | 5 min | Designer presents intent (not execution) |
| Silent observation | 3 min | Everyone looks at the page in silence |
| First impressions | 5 min | Each person shares first impressions uninfluenced |
| Structured questions | 15 min | Walk through 5-Question Audit as a group |
| Action items | 2 min | Document specific changes with owners |
Critique Rules
- Ask "why" before suggesting "what if"
- Questions before solutions
- Discuss intent before execution
- One speaker at a time
- Critique the work, not the person
Automated Audit Script
Run this in browser console for a quick technical audit:
(function designAudit() {
const results = { pass: [], fail: [], warn: [] };
// 1. Check contrast on text elements
document.querySelectorAll('p, h1, h2, h3, h4, span, a, li, td, th, label, button').forEach(el => {
const styles = getComputedStyle(el);
if (styles.color === styles.backgroundColor && el.textContent.trim()) {
results.fail.push(`Invisible text: "${el.textContent.substring(0, 40)}..."`);
}
});
// 2. Check images for alt text
const imgsWithoutAlt = document.querySelectorAll('img:not([alt])');
if (imgsWithoutAlt.length > 0) {
results.fail.push(`${imgsWithoutAlt.length} images missing alt text`);
} else {
results.pass.push('All images have alt text');
}
// 3. Check heading hierarchy
let lastLevel = 0;
let headingIssues = 0;
document.querySelectorAll('h1, h2, h3, h4, h5, h6').forEach(h => {
const level = parseInt(h.tagName[1]);
if (level > lastLevel + 1 && lastLevel !== 0) headingIssues++;
lastLevel = level;
});
if (headingIssues > 0) {
results.fail.push(`${headingIssues} skipped heading levels`);
} else {
results.pass.push('Heading hierarchy intact');
}
// 4. Check H1 count
const h1Count = document.querySelectorAll('h1').length;
if (h1Count !== 1) {
results.fail.push(`Found ${h1Count} H1 elements (expected 1)`);
} else {
results.pass.push('Single H1 present');
}
// 5. Check touch targets
document.querySelectorAll('a, button, input, select, textarea, [role="button"]').forEach(el => {
const rect = el.getBoundingClientRect();
if (rect.width > 0 && rect.height > 0 && (rect.width < 44 || rect.height < 44)) {
results.warn.push(`Small target (${Math.round(rect.width)}x${Math.round(rect.height)}): ${el.textContent.substring(0, 30) || el.tagName}`);
}
});
// 6. Check for horizontal overflow
if (document.documentElement.scrollWidth > document.documentElement.clientWidth) {
results.fail.push('Page has horizontal overflow');
} else {
results.pass.push('No horizontal overflow');
}
// 7. Check links without accessible names
document.querySelectorAll('a[href]').forEach(a => {
const name = a.textContent.trim() || a.getAttribute('aria-label') || a.getAttribute('title');
if (!name) {
results.fail.push(`Link without accessible name: ${a.href.substring(0, 50)}`);
}
});
// Output
console.log('%c DESIGN AUDIT RESULTS', 'font-size: 16px; font-weight: bold;');
console.log(`%c PASS (${results.pass.length})`, 'color: green; font-weight: bold;');
results.pass.forEach(r => console.log(` ✓ ${r}`));
console.log(`%c FAIL (${results.fail.length})`, 'color: red; font-weight: bold;');
results.fail.forEach(r => console.log(` ✗ ${r}`));
console.log(`%c WARN (${results.warn.length})`, 'color: orange; font-weight: bold;');
results.warn.forEach(r => console.log(` ! ${r}`));
})();
Anti-Patterns in Feedback
| Bad Feedback | Better Question |
|---|---|
| "I don't like it" | "What problem does this element solve?" |
| "Make it pop" | "What should draw attention first?" |
| "It feels off" | "What's competing for attention?" |
| "Users won't get it" | "What might confuse someone at this step?" |
| "We need more" | "What information is missing for the decision?" |
| "Can we make it bigger?" | "What's the hierarchy of importance here?" |
Quick Reference Card
Print this for reviews:
FIRST LOOK (30 sec)
[ ] What is it?
[ ] Who's it for?
[ ] What do I do?
MESSAGE (2 min)
[ ] Is it clear?
[ ] Is it necessary?
[ ] Is it simple?
VISUAL (2 min)
[ ] What's most important?
[ ] Why this order?
[ ] Why this element?
FLOW (2 min)
[ ] Worth a click?
[ ] Obvious next step?
[ ] Why would someone leave?
TECHNICAL (2 min)
[ ] Does it render correctly?
[ ] Is it accessible?
[ ] Is it fast?
Context
- Rendering Verification -- Technical rendering checks
- Visual Design -- Measurable visual standards
- Landing Page -- Conversion-specific review criteria
- Interaction + Accessibility -- Accessibility audit