Connected devices can generate a lot of events — a sensor threshold crossed, a status change, a routine check-in — and it's tempting to surface all of them as push notifications, especially early in a product's life when every signal feels important to show off. The predictable result is notification fatigue: users mute the app, disable notifications at the OS level, or simply stop reading them, at which point even the alerts that genuinely mattered go unseen. Getting this right is mostly about deciding what deserves to interrupt someone, not about notification delivery mechanics.
Not every event deserves a push notification
A useful first filter: would a user be upset if they missed this? A battery critically low, a security event, a safety-relevant threshold crossed — yes. A routine successful sync, a minor sensor reading within normal range, a firmware update that completed without incident — usually no, or at most a passive in-app indicator rather than an interruption. Being disciplined about this distinction, and revisiting it based on real user behavior (are people disabling notifications, are they engaging with certain alert types and ignoring others), is the highest-leverage decision in the whole notification system.
A tiered alert model
- Critical/interrupt-worthy — genuinely time-sensitive or safety-relevant events that warrant a push notification, potentially with a distinct sound/vibration pattern from routine ones
- Informational — worth surfacing but not urgent; an in-app badge or notification-center entry rather than an interrupting push
- Routine/logged only — recorded in device history for the user to review if they choose, but not actively surfaced at all
Letting users adjust which tier a given alert type falls into — not just a blanket on/off toggle — gives people who genuinely want more visibility the option, without forcing that verbosity on everyone by default.
Debouncing and rate-limiting at the source
A sensor reading that oscillates around a threshold can generate a stream of alert-triggering and alert-clearing events in rapid succession if the alerting logic doesn't debounce them — a real, common failure mode that produces a burst of contradictory notifications ("temperature high" immediately followed by "temperature normal" several times) that erodes trust in the alerting system faster than almost anything else. Requiring a condition to persist for a minimum duration, or requiring a minimum time between repeat notifications of the same type, prevents this without suppressing genuinely persistent conditions.
Notification content that's actually actionable
"Device alert" as a notification title forces the user to open the app to find out what's wrong — a generic notification is barely more useful than no notification. Specific, actionable content ("Water leak detected — Kitchen sensor") lets the user assess urgency without opening the app, and where relevant, notification actions (acknowledge, snooze, view details) that don't require a full app launch reduce friction for the response the alert is actually asking for.
Delivery reliability matters as much as content
A well-designed alert that never arrives is worse than a mediocre one that does — push notification delivery isn't guaranteed by any platform, and for genuinely critical alerts (a security event, a safety threshold), relying on push notifications alone without a fallback (an SMS or phone-call escalation path for the most critical tier, for products where that's warranted) leaves a real gap for the alerts that matter most.
How we approach this
We design the alert taxonomy and tiering as a deliberate product decision early, not an afterthought layered onto whatever events the device happens to emit. See our mobile & web app work for how this fits into building companion apps for connected hardware.
