289 lines
6.8 KiB
Markdown
289 lines
6.8 KiB
Markdown
|
|
# Patterns: Error Prevention & Handling
|
||
|
|
|
||
|
|
Patterns for preventing errors and helping users recover gracefully.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Core Philosophy
|
||
|
|
|
||
|
|
**Prevention > Recovery > Graceful Failure**
|
||
|
|
|
||
|
|
The best error is the one that never happens. The second best is the one users can easily fix.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Error Prevention
|
||
|
|
|
||
|
|
### Constraints
|
||
|
|
|
||
|
|
**What:** Limiting input to valid options.
|
||
|
|
|
||
|
|
| Technique | Example |
|
||
|
|
|-----------|---------|
|
||
|
|
| **Input masks** | Phone: (___) ___-____ |
|
||
|
|
| **Dropdowns** | Choose from valid options |
|
||
|
|
| **Date pickers** | Can't type invalid dates |
|
||
|
|
| **Range limits** | min/max on number inputs |
|
||
|
|
| **Character limits** | maxlength on text |
|
||
|
|
| **Disabled states** | Can't click invalid options |
|
||
|
|
|
||
|
|
### Guidance
|
||
|
|
|
||
|
|
**What:** Helping users get it right the first time.
|
||
|
|
|
||
|
|
| Technique | Example |
|
||
|
|
|-----------|---------|
|
||
|
|
| **Inline hints** | "Password must be 8+ characters" |
|
||
|
|
| **Examples** | "e.g., name@example.com" |
|
||
|
|
| **Format indicators** | Showing expected format |
|
||
|
|
| **Real-time validation** | Check as user types |
|
||
|
|
| **Autocomplete** | Suggest valid values |
|
||
|
|
|
||
|
|
### Confirmations
|
||
|
|
|
||
|
|
**What:** Verifying destructive or irreversible actions.
|
||
|
|
|
||
|
|
**Use confirmation dialogs for:**
|
||
|
|
- Deleting data
|
||
|
|
- Canceling subscriptions
|
||
|
|
- Sending to many recipients
|
||
|
|
- Actions that can't be undone
|
||
|
|
- Financial transactions
|
||
|
|
|
||
|
|
**Don't overuse:** Confirmation fatigue makes users click through without reading.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Form Validation
|
||
|
|
|
||
|
|
### Validation Approaches
|
||
|
|
|
||
|
|
| Approach | Pros | Cons |
|
||
|
|
|----------|------|------|
|
||
|
|
| **On blur** | Good balance, validates after field | Slight delay |
|
||
|
|
| **On submit** | Simple to implement | Errors appear late |
|
||
|
|
| **Real-time** | Immediate feedback | Can be annoying |
|
||
|
|
| **Debounced** | Good for async checks | Timing tuning needed |
|
||
|
|
|
||
|
|
### Recommended Approach
|
||
|
|
|
||
|
|
1. **Format validation** → Real-time or on blur
|
||
|
|
2. **Required fields** → On blur or on submit
|
||
|
|
3. **Async validation** → Debounced (300-500ms)
|
||
|
|
4. **Cross-field validation** → On submit
|
||
|
|
|
||
|
|
### Error Display Guidelines
|
||
|
|
|
||
|
|
**DO:**
|
||
|
|
- Show error adjacent to the field
|
||
|
|
- Use red color + icon (accessible)
|
||
|
|
- Explain the problem specifically
|
||
|
|
- Explain how to fix it
|
||
|
|
- Highlight invalid field
|
||
|
|
- Scroll to first error
|
||
|
|
|
||
|
|
**DON'T:**
|
||
|
|
- Show only at page top
|
||
|
|
- Clear user input on error
|
||
|
|
- Use only color to indicate error
|
||
|
|
- Show technical error codes
|
||
|
|
- Reset the entire form
|
||
|
|
|
||
|
|
### Error Message Template
|
||
|
|
|
||
|
|
```
|
||
|
|
[What's wrong] + [How to fix it]
|
||
|
|
|
||
|
|
Examples:
|
||
|
|
"Email must include @" → "Enter a valid email (e.g., name@example.com)"
|
||
|
|
"Password too short" → "Password must be at least 8 characters"
|
||
|
|
"Username taken" → "This username is taken. Try adding numbers or underscores."
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Undo & Redo
|
||
|
|
|
||
|
|
**What:** Allowing users to reverse their actions.
|
||
|
|
|
||
|
|
### When to Implement Undo
|
||
|
|
|
||
|
|
- Destructive actions (delete, archive, remove)
|
||
|
|
- Significant changes (formatting, reorganizing)
|
||
|
|
- Accidental actions (easy to mis-click)
|
||
|
|
- Actions without confirmation dialog
|
||
|
|
|
||
|
|
### Implementation Patterns
|
||
|
|
|
||
|
|
**Soft delete:**
|
||
|
|
- Move to trash instead of permanent delete
|
||
|
|
- Show "Undo" toast with time limit
|
||
|
|
- Allow recovery from trash
|
||
|
|
|
||
|
|
**Action undo:**
|
||
|
|
- "Undo" button in success toast
|
||
|
|
- Keyboard shortcut (Cmd/Ctrl+Z)
|
||
|
|
- Undo stack for multiple actions
|
||
|
|
|
||
|
|
**Draft preservation:**
|
||
|
|
- Auto-save drafts
|
||
|
|
- Recover unsaved work
|
||
|
|
- Version history
|
||
|
|
|
||
|
|
### Guidelines
|
||
|
|
|
||
|
|
**DO:**
|
||
|
|
- Provide undo for destructive actions
|
||
|
|
- Show clear undo affordance
|
||
|
|
- Time-limit undo window (5-30 seconds)
|
||
|
|
- Make undo discoverable
|
||
|
|
- Support keyboard shortcuts
|
||
|
|
|
||
|
|
**DON'T:**
|
||
|
|
- Require confirmation AND undo (choose one)
|
||
|
|
- Make undo window too short
|
||
|
|
- Hide undo affordance
|
||
|
|
- Forget redo after undo
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Error Dialogs
|
||
|
|
|
||
|
|
**What:** Communicating system errors to users.
|
||
|
|
|
||
|
|
### Error Dialog Anatomy
|
||
|
|
|
||
|
|
```
|
||
|
|
[Icon] [Error Title]
|
||
|
|
|
||
|
|
[Clear explanation of what happened]
|
||
|
|
[What the user can do about it]
|
||
|
|
|
||
|
|
[Primary Action] [Secondary Action]
|
||
|
|
```
|
||
|
|
|
||
|
|
### Error Types
|
||
|
|
|
||
|
|
| Type | Tone | Recovery Options |
|
||
|
|
|------|------|------------------|
|
||
|
|
| **User error** | Helpful, not blaming | Explain how to fix |
|
||
|
|
| **System error** | Apologetic | Retry, contact support |
|
||
|
|
| **Network error** | Informative | Retry when connected |
|
||
|
|
| **Permission error** | Clear | Request access, explain why |
|
||
|
|
|
||
|
|
### Error Message Examples
|
||
|
|
|
||
|
|
| Bad | Good |
|
||
|
|
|-----|------|
|
||
|
|
| "Error 500" | "Something went wrong on our end. Please try again." |
|
||
|
|
| "Invalid operation" | "You don't have permission to delete this. Contact an admin." |
|
||
|
|
| "Failed" | "Couldn't save your changes. Check your connection and try again." |
|
||
|
|
| "Null pointer exception" | "Something unexpected happened. Our team has been notified." |
|
||
|
|
|
||
|
|
### Guidelines
|
||
|
|
|
||
|
|
**DO:**
|
||
|
|
- Use human language
|
||
|
|
- Explain what happened
|
||
|
|
- Offer recovery action
|
||
|
|
- Log details for debugging (not shown to user)
|
||
|
|
- Apologize when it's system's fault
|
||
|
|
|
||
|
|
**DON'T:**
|
||
|
|
- Show technical details to users
|
||
|
|
- Blame the user
|
||
|
|
- Leave users stuck
|
||
|
|
- Use jargon
|
||
|
|
- Panic the user ("FATAL ERROR")
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Autosave & Data Recovery
|
||
|
|
|
||
|
|
**What:** Preventing data loss through automatic preservation.
|
||
|
|
|
||
|
|
### Autosave Strategies
|
||
|
|
|
||
|
|
| Strategy | Best For |
|
||
|
|
|----------|----------|
|
||
|
|
| **Continuous** | Text editors, forms (debounced) |
|
||
|
|
| **On change** | Settings, toggles |
|
||
|
|
| **On blur** | Form fields |
|
||
|
|
| **Periodic** | Long-form content (every 30-60s) |
|
||
|
|
| **Before navigation** | Forms with unsaved changes |
|
||
|
|
|
||
|
|
### Implementation Guidelines
|
||
|
|
|
||
|
|
**DO:**
|
||
|
|
- Indicate save status ("Saved", "Saving...", "Changes pending")
|
||
|
|
- Save to server when possible
|
||
|
|
- Fall back to local storage
|
||
|
|
- Recover on return
|
||
|
|
- Warn before navigating away with unsaved changes
|
||
|
|
|
||
|
|
**DON'T:**
|
||
|
|
- Save too frequently (server load)
|
||
|
|
- Save too infrequently (data loss risk)
|
||
|
|
- Fail silently
|
||
|
|
- Overwrite without user awareness
|
||
|
|
- Rely only on local storage (not synced)
|
||
|
|
|
||
|
|
### Unsaved Changes Warning
|
||
|
|
|
||
|
|
```
|
||
|
|
[Modal]
|
||
|
|
"You have unsaved changes"
|
||
|
|
|
||
|
|
If you leave, your changes will be lost.
|
||
|
|
|
||
|
|
[Leave anyway] [Stay and save]
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Graceful Degradation
|
||
|
|
|
||
|
|
**What:** Maintaining functionality when things go wrong.
|
||
|
|
|
||
|
|
### Strategies
|
||
|
|
|
||
|
|
| Failure | Graceful Response |
|
||
|
|
|---------|-------------------|
|
||
|
|
| Network down | Show cached data, queue actions |
|
||
|
|
| Feature fails | Disable feature, don't crash |
|
||
|
|
| Image fails | Show placeholder |
|
||
|
|
| Third-party down | Fallback or skip gracefully |
|
||
|
|
| Timeout | Auto-retry, then explain |
|
||
|
|
|
||
|
|
### Guidelines
|
||
|
|
|
||
|
|
**DO:**
|
||
|
|
- Anticipate failure modes
|
||
|
|
- Provide fallbacks
|
||
|
|
- Inform users of degraded state
|
||
|
|
- Maintain core functionality
|
||
|
|
- Auto-retry where appropriate
|
||
|
|
|
||
|
|
**DON'T:**
|
||
|
|
- Let one failure cascade
|
||
|
|
- Show blank screens
|
||
|
|
- Hide degraded state
|
||
|
|
- Require user action for every failure
|
||
|
|
- Give up on first error
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Error Prevention Checklist
|
||
|
|
|
||
|
|
| Area | Techniques Applied |
|
||
|
|
|------|-------------------|
|
||
|
|
| ☐ Input constraints (masks, limits) | |
|
||
|
|
| ☐ Guidance before errors occur | |
|
||
|
|
| ☐ Confirmation for destructive actions | |
|
||
|
|
| ☐ Appropriate validation timing | |
|
||
|
|
| ☐ Clear, actionable error messages | |
|
||
|
|
| ☐ Undo for reversible actions | |
|
||
|
|
| ☐ Autosave for data preservation | |
|
||
|
|
| ☐ Graceful handling of system errors | |
|
||
|
|
| ☐ Recovery options always available | |
|