Files
tommygeoco_ui-audit/references/25-patterns-feedback.md

317 lines
7.6 KiB
Markdown

# Patterns: System Feedback
Patterns for communicating system status and action outcomes to users.
---
## What is System Feedback?
Communication from the system that keeps users informed about what's happening. Based on Nielsen's first heuristic: "Visibility of system status."
**Core principle:** Users should never wonder what's happening. The system should always speak.
---
## Progress Indicators
**What:** Visual communication of ongoing processes.
### Types
| Type | Use When |
|------|----------|
| **Determinate** | Duration known (upload 45%, step 2/4) |
| **Indeterminate** | Duration unknown (spinner, loading bar) |
| **Skeleton screens** | Loading structured content |
| **Background indicator** | Process running but not blocking |
### Timing Guidelines
| Duration | Feedback |
|----------|----------|
| < 100ms | None needed |
| 100ms - 1s | Simple spinner |
| 1s - 10s | Progress indicator with context |
| 10s+ | Background process with notification |
### Implementation Guidelines
**DO:**
- Show progress immediately on action
- Use determinate when possible (more reassuring)
- Include text explaining what's happening
- Allow cancellation for long processes
- Celebrate completion (subtle success state)
**DON'T:**
- Leave users staring at nothing
- Use spinners for > 10 seconds
- Show fake progress
- Block unnecessarily (show skeleton, load in background)
- Forget edge cases (slow connections, failures)
### Skeleton Screens
Best practices:
- Match layout of loading content
- Animate subtly (pulse or shimmer)
- Show as soon as structure is known
- Replace with content progressively
- Don't make more complex than the content
---
## Notifications & Alerts
**What:** System messages about events, status changes, or required attention.
### Types by Urgency
| Type | Persistence | Attention Level |
|------|-------------|-----------------|
| **Toast** | Auto-dismiss (3-5s) | Low, informational |
| **Banner** | Persistent until dismissed | Medium, action needed |
| **Alert/Modal** | Blocks interaction | High, immediate action |
| **Inline** | Contextual, persistent | Medium, related to specific element |
### Notification Anatomy
```
[Icon] [Title] (optional)
[Message explaining what happened]
[Action button] [Dismiss]
```
### Implementation Guidelines (Toasts)
**DO:**
- Brief, clear message
- Auto-dismiss (3-5 seconds typical)
- Allow manual dismiss
- Stack if multiple
- Position consistently (top-right or bottom-right common)
**DON'T:**
- Use for errors requiring action
- Auto-dismiss critical information
- Cover important content
- Show too many simultaneously
- Require immediate reading
### Implementation Guidelines (Banners)
**DO:**
- Span full width (usually top of page)
- Clear close/dismiss button
- Explain what and why
- Include action if applicable
- Use semantic colors (red=error, yellow=warning, blue=info)
**DON'T:**
- Stack multiple banners
- Use for non-critical info
- Make hard to dismiss
- Show vague messages
---
## Validation Feedback
**What:** Communicating input validity to users.
### Validation Timing
| Timing | Best For |
|--------|----------|
| **Real-time** | Format validation (email, phone) |
| **On blur** | Field completion check |
| **On submit** | Final validation |
| **Debounced** | Async validation (username availability) |
### Validation States
```
Empty → Neutral (no validation shown)
Typing → Neutral or real-time hints
Valid → Success indicator (green check)
Invalid → Error state (red, message)
```
### Error Message Guidelines
**DO:**
- Explain what's wrong specifically
- Explain how to fix it
- Place near the field
- Use plain language
- Persist until fixed
**DON'T:**
- Use generic messages ("Invalid input")
- Blame the user ("You entered wrong value")
- Use technical jargon
- Place far from the field
- Show all errors at once without field highlighting
### Examples
| Bad | Good |
|-----|------|
| "Invalid email" | "Enter a valid email address (e.g., name@example.com)" |
| "Required field" | "Email is required" |
| "Password error" | "Password must be at least 8 characters" |
| "Error" | "This username is already taken. Try another." |
---
## Success Feedback
**What:** Confirming successful completion of actions.
### Types
| Type | Use Case |
|------|----------|
| **Inline** | Form field valid, item added |
| **Toast** | Action completed successfully |
| **Success page** | Major workflow complete |
| **Animation** | Delightful confirmation |
### Success Message Guidelines
**DO:**
- Confirm what was accomplished
- Indicate next steps if applicable
- Be brief but clear
- Match tone to significance
- Celebrate appropriately
**DON'T:**
- Over-celebrate minor actions
- Be vague about what succeeded
- Require action to dismiss (usually)
- Miss the success feedback entirely
### Examples
```
Minor: ✓ (checkmark appears)
Standard: "Changes saved"
Significant: "Your order is confirmed! Check your email for details."
Major: [Success page with next steps]
```
---
## Contextual Help
**What:** In-context guidance and explanation.
### Types
| Type | Use Case |
|------|----------|
| **Tooltips** | Icon/term explanations |
| **Inline hints** | Form field guidance |
| **Helper text** | Persistent guidance below inputs |
| **Info icons** | "What's this?" explanations |
| **Empty states** | Guidance when no content |
### Implementation Guidelines
**DO:**
- Explain *why*, not just *what*
- Use plain language
- Keep contextual (near related element)
- Make optional (not blocking)
- Provide examples when helpful
**DON'T:**
- Over-explain obvious things
- Use tooltips for critical info
- Write novels in helper text
- Hide essential instructions
- Require reading help to complete task
### Help Text Examples
**Form fields:**
```
Label: Password
Input: ********
Helper: At least 8 characters with one number and symbol.
```
**Feature explanation:**
```
[i] What are workspaces?
→ Workspaces let you organize projects into separate
areas. Each workspace has its own members and settings.
```
---
## Empty States
**What:** Feedback when there's no content to display.
### Empty State Anatomy
```
[Illustration/Icon] (optional)
[Title explaining the state]
[Description of what goes here and why it's empty]
[CTA to add content or take action]
```
### Types
| Type | Cause | Response |
|------|-------|----------|
| **First use** | New user, no data | Guide to create first item |
| **No results** | Search/filter with no matches | Suggest adjustments |
| **Cleared** | User deleted content | Confirm empty, offer restore |
| **Error** | Failed to load | Explain and offer retry |
### Implementation Guidelines
**DO:**
- Explain why it's empty
- Provide clear action to fix
- Match tone to context
- Design for the state (don't ignore it)
- Use as opportunity to educate
**DON'T:**
- Leave completely blank
- Just say "No results"
- Make user feel they did something wrong
- Offer irrelevant actions
- Use generic illustration for every state
---
## Feedback Timing Matrix
| Action Type | Immediate | Short Delay | Background |
|-------------|-----------|-------------|------------|
| Button click | Visual state change | - | - |
| Form submit | Disable + spinner | Success/error toast | - |
| Save | Inline "saving..." | "Saved" confirmation | - |
| Upload | Progress bar | Completion toast | Status in UI |
| Long process | Initiated message | - | Notification when done |
---
## Feedback Audit
| Element | Feedback Present? |
|---------|-------------------|
| ☐ Loading states defined | |
| ☐ Success feedback clear | |
| ☐ Error states helpful | |
| ☐ Validation timing appropriate | |
| ☐ Empty states designed | |
| ☐ Help available in context | |
| ☐ Progress visible for long actions | |