Patterns for communicating system status and action outcomes to users.
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.
What: Visual communication of ongoing processes.
| 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 |
| Duration | Feedback |
|---|---|
| < 100ms | None needed |
| 100ms - 1s | Simple spinner |
| 1s - 10s | Progress indicator with context |
| 10s+ | Background process with notification |
DO:
DON'T:
Best practices:
What: System messages about events, status changes, or required attention.
| 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 |
[Icon] [Title] (optional)
[Message explaining what happened]
[Action button] [Dismiss]
DO:
DON'T:
DO:
DON'T:
What: Communicating input validity to users.
| Timing | Best For |
|---|---|
| Real-time | Format validation (email, phone) |
| On blur | Field completion check |
| On submit | Final validation |
| Debounced | Async validation (username availability) |
Empty → Neutral (no validation shown)
Typing → Neutral or real-time hints
Valid → Success indicator (green check)
Invalid → Error state (red, message)
DO:
DON'T:
| 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." |
What: Confirming successful completion of actions.
| Type | Use Case |
|---|---|
| Inline | Form field valid, item added |
| Toast | Action completed successfully |
| Success page | Major workflow complete |
| Animation | Delightful confirmation |
DO:
DON'T:
Minor: ✓ (checkmark appears)
Standard: "Changes saved"
Significant: "Your order is confirmed! Check your email for details."
Major: [Success page with next steps]
What: In-context guidance and explanation.
| 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 |
DO:
DON'T:
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.
What: Feedback when there's no content to display.
[Illustration/Icon] (optional)
[Title explaining the state]
[Description of what goes here and why it's empty]
[CTA to add content or take action]
| 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 |
DO:
DON'T:
| 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 |
| 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 |