The pattern
- What happened?
- Why did it happen?
- What can I do about it?
Error message types
- Validation errors
- System errors
- Blocking errors
- Permission errors
Validation errors (inline)
Show as user completes a field or on blur. Provide brief, specific guidance to correct input.Pattern:[Field] [specific requirement]Examples:- “Email must include @”
- “Password must be at least 8 characters”
- “Choose a date in the future”
Keep validation errors extremely concise. Users are still filling out the form and need quick guidance.
What to avoid
- Technical codes without explanation: “Error 403” tells users nothing
- Blame language: “Invalid input” or “illegal character” sounds accusatory
- Robotic tone: “An error has occurred” feels cold and unhelpful
- Dead ends: Error with no recovery path leaves users stuck
- Vague causes: “Something went wrong” doesn’t help users fix the problem
Before and after examples
Example 1: Payment failure
❌ Before
❌ Before
“An error has occurred while processing your payment. Please try again later or contact customer support if the problem persists.”Problems:
- Passive voice (“has occurred”)
- Vague timeframe (“later”)
- Doesn’t suggest likely cause
- Forces user to escalate immediately
✅ After
✅ After
“We couldn’t process your payment. Check your card details and try again.”Why it works:
- Active voice (“we couldn’t”)
- Suggests likely cause (card details)
- Immediate action user can take
- Only 11 words
Example 2: Form validation
❌ Before
❌ Before
“Invalid email address. Please enter a valid email.”Problems:
- Uses word “invalid” (blame language)
- Doesn’t specify what’s wrong
- Redundant (says “email” twice)
✅ After
✅ After
“Email must include @”Why it works:
- Specific requirement
- No blame language
- Only 4 words
- Tells user exactly what to fix
Example 3: File upload
❌ Before
❌ Before
“Error: Upload failed.”Problems:
- No explanation of why
- No recovery action
- Dead end for user
✅ After
✅ After
“Upload failed. File is too large. Choose a file under 10MB.”Why it works:
- Explains what failed
- States the cause
- Provides specific limit
- Clear recovery action
Writing empathetic errors
Never blame the user
Even when the error is user-caused, avoid accusatory language.
- Good: “Password must be at least 8 characters”
- Avoid: “You entered an invalid password”
Be specific about the problem
Vague errors create anxiety. Tell users exactly what went wrong.
- Good: “Your session expired after 30 minutes of inactivity”
- Avoid: “Session timeout”
Provide actionable next steps
Every error should have a clear recovery path.
- Good: “Connection lost. Check your internet and try again.”
- Avoid: “Network error”
Accessibility considerations
Use
Error: prefix for screen readers to identify error messagesAssociate error text with form fields programmatically
Don’t rely on color alone - include text and icons
Keep critical errors under 14 words for 90% comprehension
Quick checklist
Before shipping an error message, verify:- Explains what failed
- Explains why it failed (when helpful)
- Provides recovery action
- Uses empathetic, non-blaming tone
- Avoids technical jargon
- Works without color (includes text)
- Under 18 words (ideal: 12-15)