Anti-patterns are approaches that fewer than 3 of 10 systems use—often for good reason. Each includes frequency data, why it fails, and what to do instead.
Visual Anti-Patterns
Anti-Pattern 1: Illustrations in Utility Contexts
Frequency: 0 of 43 utility instances
Using custom illustrations in search results, settings, filters, or dashboards.
Context
Illustration Usage
Search results
0 of 14
Settings pages
0 of 11
Filtered results
0 of 8
Dashboards
0 of 7
Why it fails: Illustrations signal importance. Utility contexts need efficiency, not emotion. Feels patronizing.
Better alternative: Contextual icon or text-only.
Edge case: Brand mascots (GitHub's Octocat) can work—that's identity, not decoration.
Anti-Pattern 2: Hiding Dashboard Structure
Frequency: 0 of 7 dashboard instances
Replacing dashboard metrics with a centered "No data yet" message instead of showing zeros.
The correct approach: Stripe shows zeros while maintaining full dashboard structure—users see what metrics exist and where data will appear
Why it fails: Layout shifts when data arrives. User doesn't know what metrics exist. Feels broken.
Better alternative: Show metric cards with "$0.00", "0", "0%". Maintain full structure.
Anti-Pattern 3: Breaking Layout for Empty States
Frequency: Less than 10% of instances
Centering empty state content when full state has sidebars, navigation, or consistent structure.
Why it fails: Disorienting when data appears. Inconsistent spatial memory. Feels like different page.
Better alternative: Keep all structural elements. Empty message appears where content would be.
Edge case: Full-page onboarding for MAJOR features can center—but only when there's no persistent layout yet.
Anti-Pattern 4: Generic Icons That Don't Match Context
Frequency: Rare, but notable
Using the same generic "empty" icon everywhere regardless of context.
Why it fails: Missed opportunity to reinforce what belongs here. Harder to scan. Feels lazy.
Better alternative: Contextual icons—shield for security, tag for labels, person for users, key for API.
Microcopy Anti-Patterns
Anti-Pattern 5: Encouraging Tone in Search Results
Frequency: 0 of 14 search instances
"Don't worry, we couldn't find anything!" or "No worries! Try a different search."
The correct approach: Linear's search empty state uses neutral tone and minimal text—no encouragement, no apology, just information
Why it fails: User is trying to accomplish a task, potentially frustrated. Encouragement feels patronizing.
Better alternative: "No results" (2 words). Optional: "Try adjusting your search."
Anti-Pattern 6: Negative Framing
Frequency: Less than 10% of instances
Starting with "You don't have..." or "There are no..." when neutral framing works.
Why it fails: Emphasizes absence over possibility. "You don't" puts blame on user. More words to say less.
Better alternative: "No [noun] yet" (neutral) or "Create your first [noun]" (encouraging, for onboarding).
Edge case: "You haven't created any rulesets" works when user action is truly required.
Anti-Pattern 7: Overly Long Body Text
Frequency: 15% of instances exceed 20 words
Multi-sentence explanations in empty state body text.
Why it fails: Users don't read long text. Competes with CTA. Feels like documentation.
Better alternative: Under 20 words. One concept per sentence. If more needed, link to docs.
The test: If you need 3+ sentences, link to documentation instead.
Anti-Pattern 8: Vague CTAs
Frequency: Less than 5% of instances
"Click here", "OK", "Submit", "Go", "Continue"
Why it fails: User doesn't know what action they're taking. Reduces confidence. Accessibility issues.