Five Kinds of Hints
Badge, toast, banner, bulletin, push—escalating in how much they interrupt.
Hints must match the severity of the matter. Use a modal for something trivial, and users learn to click "OK" without reading. The one test that decides which intensity to start from: if the user doesn't act on this, will something go wrong?
What you'll run into:
- Users click through every modal without reading a word
- Important notices are delivered as a flash-and-gone toast nobody sees
- You push too much, and users switch off notification permission entirely
The five forms
| Form | Use it when | What it looks like |
|---|---|---|
| Badge | A number of items need attention | A small dot with a count on the icon corner; interrupts nothing |
| Toast | Pointing users at a new feature | A short text bubble in the corner; optional to read |
| Banner | Important state changes or urgent info | Top banner or centered modal, covering the content |
| Bulletin | Long-form info like maintenance notices and changelogs | A dedicated announcements section users open on their own |
| Push | Users aren't in the app, but you need them to know | The system notification center. The most expensive form; overuse gets it disabled |
Beyond these five, a few less common but useful ones exist: tooltips (hover explanations), focus hints (highlighting the active input), progress hints (upload/download bars), confirmation dialogs (one gate before a critical action), and animated hints (the checkmark flourish on completion). Push deserves a special boundary: it borrows the system's channel, and once users revoke permission it's very hard to earn back. Overusing it is the surest way to kill the strongest and priciest channel you have. push-wiki
Strength isn't something you work up to tier by tier. Use the one test directly: if the user doesn't act, will something go wrong? If yes, go straight to a banner or modal; if no, always use the lightest form. Most products don't have too few messages—they deliver light messages in heavy forms, and every such delivery loosens the user's respect for the heavy forms by a notch.
Three levels of strength
Judge the strength before picking a form. The only standard: if the user doesn't act, will something go wrong?
- Must act immediately → modal. Payment failed, draft unsaved.
- A state has changed → global banner. Sync complete, rules updated.
- Nice to know → toast. "A new version is available."
Skip a tier and users learn fast to click "OK" without reading. Use the heaviest form for a trivial message, and the next time something genuinely matters, they'll ignore you out of habit.
Warning, tip, and error
By purpose, message copy falls into only three types, each with its own tone and placement:
| Type | Purpose | Example |
|---|---|---|
| Warning | States the consequence in advance, but doesn't block | "Delete these files? This cannot be undone" |
| Tip | Helps them do better, not corrects a mistake | "For account safety, consider a stronger password" |
| Error | Says what went wrong and how to fix it | "Wrong password, please try again" |
The key to a warning is that it doesn't stop the user—it gives them a moment to think. Turn warnings into blockers and users start clicking mechanically, and the warning loses all effect.
All three kinds share one rule of tone: talk like a person. Change "Operation failed, please retry later" to "Couldn't reach the server—check your connection and try again," and users actually know what to do. The purpose of a message is never to report status; it's to let users act next.
