Modern QA2026Core Alert Design Principles — tiles
Log inJoin
51 / 67 · 06 Observability-Driven Testing · Alert Design: Detecting Real Problems Without Alert Fatigue← prev⊞ allnext →☰ Read as one page

8.2Core Alert Design Principles

1. Alert on Symptoms, Not Causes

Alert on what users experience, not what the infrastructure is doing:

Symptom (Good Alert) Cause (Bad Alert)
"Error rate > 1% for checkout API" "CPU > 80% on checkout-pod-3"
"p99 latency > 2s for search" "Memory usage > 90% on search-worker"
"Zero orders processed in 5 minutes" "Database connection pool at 95%"

High CPU that causes no user impact is not alert-worthy. Database connection pool at 95% might be perfectly normal under load. Focus on what the user sees.

2. Use Multi-Window, Multi-Burn-Rate Alerts

Instead of a single threshold, use a tiered approach that catches both fast-burn (sudden outage) and slow-burn (gradual degradation):

Alert Type Short Window Long Window For Duration Severity
Fast burn 5 min 1 hour 2 min Critical (page)
Moderate 15 min 3 hours 5 min High (page)
Slow burn 30 min 6 hours 15 min Warning (ticket)

The dual-window requirement reduces false positives: a brief spike triggers the short window but not the long window, so it does not fire.

3. Every Alert Must Have a Runbook

An alert without a runbook is a question without an answer. The runbook should include:

## Runbook: Checkout Error Rate > SLO

### What this alert means
The checkout service error rate has exceeded the SLO burn rate for the
specified window, indicating a potential reliability issue.

### Impact
Users may be unable to complete purchases. Revenue impact is proportional
to the duration and severity.

### Diagnosis steps
1. Check the error rate dashboard: [link]
2. Check recent deployments: `kubectl rollout history deployment/checkout`
3. Check dependency health: [payment-service dashboard link]
4. Check logs: `query: service=checkout level=error | last 15m`

### Common causes and fixes
- **Recent deployment**: Roll back with `kubectl rollout undo deployment/checkout`
- **Payment provider outage**: Enable fallback payment processor
- **Database connection exhaustion**: Scale up connection pool
- **Rate limiting from downstream**: Check rate limit headers

### Escalation
If not resolved within 30 minutes, escalate to:
- #checkout-team Slack channel
- Checkout team lead (page)

4. Page Only for Immediate Human Action

Action Needed Notification Type Response Time
Immediate human intervention Page (PagerDuty) Minutes
Fix within a day Ticket (Jira) Hours
Awareness, no action Dashboard / weekly report Days

If the answer to "what should the on-call do?" is "nothing, it will resolve itself," it should not be a page.