Skip to content
Back to skills

Feedback Patterns

ASecurity

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, ...

  • 666 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 8, 2026
designrustgoapiperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill feedback-patterns --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Feedback Patterns?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Feedback Patterns
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-feedback-patterns/badge)](https://www.skillsdirectory.com/skills/majiayu000-feedback-patterns)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.