1.2 KiB
Error Handling — First Principles
1. The Principles
P1. Errors are Data
Errors are structured, typed, and intentional. They are values, not exceptions to the flow of code.
P2. Fail Loudly
Never swallow an error. Silent failure is worse than visible failure.
P3. Fail Specifically
Generic errors are debugging enemies. "Something went wrong" is never acceptable.
P4. Preserve Context
Errors carry where (file, line, function), when (timestamp, request), why (cause), and what (user-facing message).
P5. Recoverable When Possible
Retry, fallback, or degrade. Do not crash what can be salvaged.
P6. Unrecoverable Means Stop
When recovery is impossible or unsafe, fail fast. Do not limp on after fatal errors.
P7. Errors are Boundaries
Define how errors cross API, service, and module boundaries. Translation is explicit, not accidental.
P8. User-Facing Errors are UX
Error messages are a feature. They are written for the user, not the developer.
P9. Errors are Logged
Even when handled, errors are recorded. The handling is the recovery; the log is the memory.
P10. Errors Don't Lie
Never catch what you cannot handle. Never claim success on failure. Never claim failure on success.