Why Push, SMS, and Voice Calls Need to Work Together for Critical Alerts
Most teams pick one delivery channel for critical alerts — usually push notifications, because it's the default and it's free — and treat it as good enough until the night it isn't. Push notifications are a fine primary channel. They're a bad only channel, because the specific ways they fail are exactly the ways that matter most during a real incident: a dead phone, Do Not Disturb, or an OS that quietly killed the app in the background.
How each channel actually fails
Push notifications depend on the app staying alive in the background, the phone having signal, and the notification not getting silently swallowed by whatever Do Not Disturb or Focus mode is active. All three of those failure modes are common and none of them are rare edge cases — they're exactly what a phone looks like at 3am on a nightstand.
SMS is more reliable in one specific way: it doesn't depend on an app staying alive, and it usually bypasses app-level notification settings since it comes through the carrier, not a background process. It can still be delayed by carrier routing, and — this is the part people forget — a phone fully in silent mode will still silence an SMS just as quietly as a push notification, unless the contact is specifically starred or the phone has an SMS-specific override configured.
Voice calls are the most disruptive channel, and that's the point. On the overwhelming majority of phones, an incoming call rings through silent mode and Do Not Disturb by default, or at minimum is far more likely to than a text or push alert. That's not a coincidence — it's the one channel actually designed, at the OS level, to interrupt whatever else is happening. It's also the most annoying channel to use for anything that isn't genuinely urgent, which is exactly why it should be reserved for the point in an escalation where something really does need a human, right now.
Escalating through channels, not just through people
Most escalation policies are designed around one dimension: if person A doesn't respond, page person B. That's necessary, but it's not sufficient on its own — because it doesn't help if person A is reachable, just not through the channel that was tried. A more complete pattern escalates on two dimensions at once: the same person, but through a progressively harder-to-ignore channel, before moving on to the next person in the rotation at all.
A concrete pattern that works
A sequence that holds up well in practice: push notification immediately, on the theory that most pages are caught the normal way. If it's not acknowledged within a short window — a minute or two — follow up with SMS as backup, since it doesn't share push's failure modes. If it's still unacknowledged after that, escalate to a voice call, which is disruptive enough that it should reliably wake someone up if they're reachable at all. Only after all three channels have failed for the same person does it make sense to move to the next person in the rotation — at that point, the problem probably isn't the channel, it's that the first responder genuinely isn't available.
Why this needs to be built in, not bolted on
This only works if repeating and channel-escalation are handled automatically by the paging tool itself, not manually by whoever's coordinating the incident. PingParrot pages repeat on a configurable interval until acknowledged, and escalation policies can combine channel and person: hit the same target across push, SMS, and voice before falling through to the next step in the chain. The goal isn't more notifications — it's making sure the one that actually needs a response can't get lost in a channel that happened to be the wrong one that night.