Error & empty-state messages
The messages people meet at the hardest moments — when something failed, when there's nothing yet, or when an action can't be undone. In a continuity product these are often read under stress, so they must be calm, specific, and always offer a way forward.
Errors: situation, cause, next step
Lead with the user's situation, not the system's. Be specific when you can, and always give a way forward. Never expose stack traces, status codes, or internal IDs.
Name what the user can do next — retry, edit a field, choose another option.
Don't blame the user (“You entered invalid data”); describe the situation neutrally.
Put field-level errors next to the field, not in a banner at the top.
Don't surface raw codes, IDs, or stack traces — translate them into a next step.
Empty states: what's missing, then the first step
An empty state is an invitation, not a dead end. Two parts: a brief line naming what's empty, then the action that fills it — usually the same primary action as the full view.
Confirmations: state the consequence, label the action
Only confirm when an action is hard to reverse. The button repeats the verb so it's clear even when skimmed, and the body says plainly what will happen.
Reserve confirmations for irreversible or high-impact actions.
Don't confirm reversible actions — offer undo instead; constant dialogs train people to click through.
Label the confirm button with the verb (“Delete plan”), never “OK”.
Don't bury the consequence — say “can't be undone” when it's true.
Success: usually silent
The result is the feedback. When a saved change is visible on screen, announcing it adds noise. Confirm only when the outcome isn't obvious or happens elsewhere.
| Situation | What to do |
|---|---|
| Inline edit that updates on screen | Say nothing — the new value is the confirmation. |
| Action whose result is off-screen | Brief toast: “Reminders sent to 8 owners.” |
| Long or background job | Confirm it started, then notify on completion. |
| Destructive action with undo | “Plan archived. Undo” — pair the confirmation with the recovery. |
Loading: reassure, don't narrate
Keep loading copy quiet and brief. Prefer a skeleton that mirrors the layout; use a short label only when the wait is indeterminate.