Skip to content

The Art of Managing Notifications: Why Not Everything Needs to be a Toast

I often see apps that just feel...

3 min read
Toast
Notifications
Accessibility
Live Regions
React
UX

I often see apps that just feel... noisy. You click one button, a notification pops up in the top right. Click again, another one. When you're actually trying to focus on something important, these aggressive toasts can easily break your flow.

The problem is, it’s easy to treat toasts as a "one size fits all" solution for every kind of message. But if you don't manage them properly, your notification system just becomes visual clutter that users eventually learn to ignore.

In my experience, notifications actually need their own little architecture. You have to think about who's in control, how the queue works, and most importantly: when you should just not use a toast at all.

When do we actually need a toast?

Toasts have a very specific job. They’re great for confirming background actions—like "Invoice sent"—or reporting a system failure that doesn't actually break the user's workflow, such as "Sync failed: Try again."

But they aren't everything. It makes more sense to avoid using toasts as a replacement for in-form validation. If there’s a typo, show the error directly under the input field. And please, don't show a "Page changed successfully" notification every time a user navigates; that's just annoying.

One rule I live by: if the user must take immediate action, don't use a toast. Toasts are designed to disappear. If a message requires serious attention, use a dialog or an inline message on the page itself. You don't want a user to miss something critical just because the toast timed out and vanished.

Managing queues and accessibility

One of the messiest things I see is when too many notifications trigger at once. If a user performs several actions quickly, the corner of the screen just gets crowded.

This is where a queueing system becomes essential. I usually follow a few simple rules: first, avoid duplicate messages. Second, cap the number of toasts on screen at once—maybe three is enough. Third, differentiate by importance. A critical error should stay visible or be "sticky" so it can be closed manually, while a success message can disappear instantly.

We also have to think about accessibility. A toast shouldn't "steal" the user's focus. Imagine you're halfway through a long form and suddenly your cursor focus jumps to a success notification in the corner. You've just lost your place. Using aria-live="polite" is a much better approach—it lets screen readers announce the message without breaking the user's actual workflow.

The "silent" strategy

There’s one thing that is often underestimated: silent success.

If a user does something and the data updates immediately on the screen—like a new row appearing in a list after saving—you probably don't need a "fireworks" style success notification. The visual change in the data itself is enough confirmation.

Not every interaction needs an animation or a flashy alert. Sometimes, the best design is the one that stays out of the user's way while they're working.

Of course, any system I build has its downsides too. There’s no such thing as a perfect notification system. But by having clear rules about when to speak up and when to stay quiet, at the very least, your app won't feel noisy and confusing.

A short note for later.