Writing Insanely Great Error Messages

An error message is a conversation with someone who is already frustrated. It's some of the most important writing in your product — and usually the least considered.

Great error messages are not cute. They are clear, timely, accountable, and useful. The best ones feel calm because they respect the user's situation: something has gone wrong, and now the product owes them the truth.

What a Good Error Message Does #

A good message answers three questions, fast:

  1. What happened? In plain language, from the user's point of view — not the system's.
  2. Why does it matter? What can't they do now, what still works, and is their work safe?
  3. What can they do? The next step, ideally as an action they can take right there.

Principles (Apple HIG-Inspired) #

A Simple Template #

[What happened, plainly]. [Why it matters / is your work safe]. [What to do next].

Example: "Couldn't save your note — you're offline. Your changes are kept and will sync when you reconnect."

Checkout examples:

Messages for Operators #

User-facing messages and logs serve different audiences. Do not make the user read your logs, and do not make your logs so vague that support cannot help.

Observability is communication with future maintainers. A good error message tells the user what they need now. A good log line tells the team what they need later.

Anti-Patterns #

Front End vs. Back End Notes #


Related chapters: Whose Fault Is It Anyway? · Keep Informed and Carry On · Test Once, Measure Always