# 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 | |