User feedback patterns for interactions - loading states, success/error messages, form validation, empty states. Ensures users understand system state and next steps. Use when implementing user-facing state changes and interactions: - Form submissions with validation feedback, success/error messages - Async operations needing loading indicators (API calls, data fetching) - Error handling flows with clear recovery paths and retry options - Empty state designs with helpful messaging (no data, ...
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: ux-feedback-patterns
description: |
User feedback patterns for interactions - loading states, success/error messages,
form validation, empty states. Ensures users understand system state and next steps.
Use when implementing user-facing state changes and interactions:
- Form submissions with validation feedback, success/error messages
- Async operations needing loading indicators (API calls, data fetching)
- Error handling flows with clear recovery paths and retry options
- Empty state designs with helpful messaging (no data, no results)
- User mentions "form", "loading", "error", "validation", "async", "API call"
Keywords: loading, success, error, form, validation, async, feedback, toast, empty state
Focus on WHEN to show feedback, WHAT type (toast/inline/modal), HOW LONG (timing).
---
# UX Feedback Patterns
## Purpose
Ensure users never wonder "What's happening?" or "Did that work?" through clear, consistent feedback patterns.
---
## Core Principle
**Users must receive feedback for EVERY interaction.**
Every user action needs feedback in one or more states:
1. Loading/Processing
2. Success
3. Error
4. Empty
---
## Loading States
### When to Show Loading
**Timing thresholds (adjust to your context):**
- **< 100ms**: Perceived as instant, no feedback needed
- **100-300ms**: Optional subtle indicator
- **300ms-1s**: Show spinner or skeleton
- **1-5s**: Spinner + explanatory text
- **5-10s**: Progress bar with percentage
- **10s+**: Progress bar + explanation + cancel option
### Loading Patterns
**Button Loading:**
- Disable button to prevent double-submission
- Show spinner inside button or change text
- Keep button in place (don't shift layout)
**Content Loading:**
- Prefer skeleton screens over spinners
- Match skeleton structure to actual content
- Maintain layout space (prevent content jump)
**Progress Indicators:**
- Use for file uploads, large operations
- Show percentage when determinable
- Provide cancel option for long operations
---
## Success States
### When to Show Success
**Always show for:**
- Form submissions
- Data mutations (create, update, delete)
- File uploads
- Account changes
**Skip for:**
- Very quick actions (near-instant completion)
- Continuous interactions (likes, toggles) - use optimistic updates
- Actions where feedback is inherent in result
### Success Patterns
**Toast Notifications:**
- Auto-dismiss after 3-5 seconds
- Position: top-right or top-center (consistent)
- Specific message, not generic "Success"
**Inline Messages:**
- For form submissions: show below form
- Less intrusive than toasts
- Can stay visible longer
**Visual Confirmation:**
- Button state change (e.g., "Save" → "Saved ✓")
- Brief color change (green tint)
- Return to normal after 2-3 seconds
---
## Error States
### Error Message Principles
**Be Specific:**
- ❌ "Error occurred"
- ✅ "Email already exists. Try logging in instead."
**Be Helpful:**
- Explain what happened
- Suggest what to do next
- Provide recovery action when possible
**Be Human:**
- Natural language, avoid technical jargon
- Don't blame user
- Empathetic tone for serious errors
**Severity Levels:**
- **Critical**: System failure, data loss - modal, manual dismiss
- **High**: Form validation, API errors - prominent, actionable
- **Medium**: Warnings, non-blocking - dismissible notices
- **Low**: Helper text, suggestions - subtle, informative
### Error Patterns
**Form Field Errors:**
- Show inline, next to/below field
- Trigger on blur (not every keystroke)
- Include error icon for visibility
- Keep visible until corrected
**Global Errors:**
- Prominent alert at top or modal
- Include error icon and title
- Explain what failed and why
- Provide action: Retry, Contact support, Learn more
- Manual dismiss (don't auto-hide critical errors)
**Error Recovery:**
- Always provide a path forward
- "Try Again" button for transient errors
- Link to help/support for persistent issues
- Save user's work when possible
---
## Empty States
### Never Show Blank Screens
**Empty state must include:**
1. **Icon/Illustration**: Visual context
2. **Title**: "No [items] yet"
3. **Description**: Brief explanation
4. **Action** (when possible): CTA to create first item
### Empty State Types
**First-Time Empty:**
- Welcoming, encouraging tone
- Clear next step to get started
**Search No Results:**
- Acknowledge the query
- Suggest alternatives (check spelling, try different terms)
- Provide way to clear/modify search
**Filtered Empty:**
- Explain filters are active
- Show way to clear filters
---
## Interaction Patterns
### Form Validation
**Validation Timing:**
- On blur: Validate individual field
- On submit: Validate entire form
- On change: Only for real-time feedback (password strength, username availability)
**Success Indicators:**
- Optional: show checkmark for valid fields
- Only after field touched
- Subtle, not distracting
### Button States
**Required states:**
- Default: Normal appearance
- Hover: Visual feedback
- Active/Pressed: Depressed appearance
- Loading: Spinner + disabled
- Disabled: Grayed out + tooltip/explanation
- Success: Brief confirmation (2-3s)
### Optimistic Updates
**Pattern:** Update UI immediately, rollback on error
**Best for:**
- Fast, reliable operations (likes, favorites)
- Low-stakes actions
- When instant feedback improves perceived performance
**How it works:**
1. Update UI immediately (assume success)
2. Send API request
3. If success: nothing (already updated)
4. If error: rollback + show error
**When NOT to use:**
- Destructive actions (delete)
- Complex validations
- Critical operations (payments)
### Destructive Actions
**Always confirm before:**
- Deleting items
- Permanent changes
- Bulk actions
**Confirmation pattern:**
- Modal dialog with clear title
- Explain consequences: "This cannot be undone"
- Primary action labeled clearly ("Delete", not "Yes")
- Use danger color (red) for destructive button
- Provide "Cancel" as escape hatch
---
## Best Practices
### Timing
- Feedback should feel immediate (instant perceived response)
- Success messages: auto-dismiss after 3-5 seconds
- Error messages: manual dismiss or longer timeout
- Loading threshold: Show indicators after ~300ms
### Tone
- Be specific, not vague
- Be helpful, suggest next steps
- Be human, avoid technical jargon
- Don't blame user
### Accessibility
- Use ARIA live regions for dynamic messages
- Associate errors with form fields
- Provide text alternatives for visual indicators
- Don't rely on color alone
### Consistency
- Same pattern for same action across app
- Predictable feedback locations
- Consistent timing and animations
- Unified messaging tone
---
## Common Mistakes
1. **Silent failures** - Action fails with no feedback
2. **Vague errors** - "Error" tells nothing useful
3. **No loading state** - User clicks repeatedly
4. **Blank screens** - Empty state without explanation
5. **Disabled without reason** - No tooltip explaining why
6. **Flickering loaders** - Show only for operations with noticeable delay
7. **Success overload** - Toast for every tiny action
8. **Technical error codes** - Show user-friendly messages
9. **No recovery path** - Error with no next step
10. **Blocking entire UI** - Use local loading when possible
---
## Validation Checklist
For every interactive feature:
- [ ] Loading state for async operations with noticeable delay
- [ ] Success feedback (toast, inline, or visual confirmation)
- [ ] Error messages specific and actionable
- [ ] Empty states have helpful messaging + action
- [ ] Optimistic updates rollback on failure
- [ ] Destructive actions require confirmation
- [ ] All feedback is accessible (ARIA, alt text)
- [ ] States are visually distinct and clear
- [ ] No silent failures
- [ ] Consistent patterns across application
---
## Key Takeaway
**Never leave users guessing.** Clear, timely feedback is the difference between a frustrating experience and a delightful one.
Timing guidelines are based on UX research but should be adjusted to your context. When in doubt, over-communicate rather than under-communicate.
No comments yet. Be the first to comment!