Error Handling
Design resilient applications through intentional error handling strategies. Errors are data, not just exceptions — design them intentionally.
Quick Decision Guide
| Situation | Pattern | Reference | |-----------|---------|-----------| | Typed error categories | Custom error classes | error-patterns.md | | Explicit handling (no throws) | Result/Either type | error-patterns.md | | React component crash | Error boundary | react-errors.md | | API error response | Structured API errors | api-errors.md | | Network calls that fail | Retry with backoff | recovery-patterns.md | | Unreliable downstream service | Circuit breaker | recovery-patterns.md |
Key Principles
- Debuggable: Rich context, stack traces, correlation IDs
- Recoverable: Retry logic, fallbacks, circuit breakers
- User-friendly: Clear messages, recovery guidance, no leaked internals
- Consistent: Same error shape across all API endpoints
Quick Start Checklist
- Define base AppError class with code and context
- Create domain-specific error subclasses
- Implement consistent API error response shape
- Add error boundaries at app, route, and component levels
- Set up error tracking (Sentry) with scrubbing
References
| Reference | Description | |-----------|-------------| | error-patterns.md | Custom errors, Result types, error hierarchies | | react-errors.md | Error boundaries, Suspense, React error handling | | api-errors.md | HTTP errors, response shapes, status codes | | recovery-patterns.md | Retry, circuit breaker, fallbacks, degradation | | overview.md | Error types, Result pattern, user messages, tracking, anti-patterns | | anti-rationalization.md | Iron Law, common rationalizations, red flag STOP list for error handling discipline | | tdd-patterns.md | Test-first patterns for error paths, retry logic, boundaries | | review-checklist.md | Error handling review checklist (classes, messages, recovery, tracking) |