Alert fatigue is a reliability problem
A team that has learned to ignore its alerts is less safe than a team with no alerts at all, because the second team knows it is flying blind. The first believes it is covered.
Every false alarm spends a little of the trust that makes the next real alert effective. Treating alert precision as a feature — rather than sending everything and letting humans filter — is the only way that trust survives contact with production.
Choosing a channel by urgency
Not every notification deserves the same intrusiveness. Matching channel to severity is what keeps the loud channels meaningful.
- Chat (Slack, Discord)Team-visible, low friction. Good default for most incidents during working hours.
- EmailBest for low-urgency and informational events such as a 30-day certificate warning.
- WebhookFor routing into your own systems — ticketing, automation, custom on-call logic.
- Pager (PagerDuty, OpsGenie)Reserved for genuine wake-someone-up severity, with real escalation policies behind it.
What a good alert contains
An alert should be actionable on its own. Which monitor, what specifically failed, how long it has been failing, which regions confirmed it, and a direct link to the detail view. If the first thing a responder has to do is go find out what the alert means, the alert is incomplete.
Specifications
| Channels | Email, Slack, Discord, Telegram, WhatsApp, SMS, voice, webhook, PagerDuty, OpsGenie |
|---|---|
| Trigger condition | Cross-region confirmed state change |
| Deduplication | One thread per incident |
| Recovery alerts | Sent on confirmed recovery |
| Payload | Monitor, failure reason, duration, confirming regions, deep link |