On-call rotation & burnout prevention concept page. Architecture: Production tier (app + db) emits metrics to Prometheus, which fires alerts via Alertmanager into PagerDuty. PagerDuty pages region-specific primary on-call (US/EU/APAC for follow-the-sun) with escalation chain to secondary then manager. Primary uses Slack #incident channel, Runbook wiki, and Statuspage for comms. Includes ADR on PagerDuty node about on-call pay model (base stipend + per-page premium vs flat salary uplift). Five scenarios: weekly rotation handoff Monday morning, alert fatigue tuning to reduce noise 80%, follow-the-sun handoff between US/EU/APAC timezones, escalation chain when primary doesn't ack, and burnout prevention loop with pages-per-person metric tracking and toil reduction.
On-call ротация — это операционный контракт между бизнесом и инженерами: кто-то 24/7 держит pager и реагирует на инциденты в production. Без неё MTTR растёт до часов (пока кто-то случайно заметит alert в почте), SLO рушится, платящие клиенты уходят.
Но плохо устроенная ротация убивает команду быстрее, чем отсутствие ротации вообще. Симптомы знакомы: senior-инженеры уходят «потому что заколебал ночной pager», junior-ы боятся брать pager («я не разберусь, что делать в 3 ночи»), оставшиеся 2-3 человека дежурят каждую вторую неделю, выгорают, увольняются, цикл повторяется.
CAP описывает distributed systems. On-call — это distributed system из людей. Те же законы: partition (человек спит / в самолёте / болен) неизбежна; ты выбираешь между paging response time (always page многих → noise → fatigue) и paging quality (page одного, escalation chain → задержка). Без сознательного дизайна получишь worst-of-both.
Эта концепт-страница про архитектуру on-call как системы: follow-the-sun, primary+secondary, escalation chains, alert tuning, burnout signals, blameless postmortems, оплата дежурств.
«On-call — это work, не goodwill. Без compensation, без bounded hours, без noise budget, без escalation, без cross-training — это не ротация, это organized hazing. Хорошая on-call — это когда pager звонит редко (tuned alerts), но когда звонит — actionable; когда звонит — есть runbook; когда runbook не помог — есть кому escalate; и за всё это платят отдельно от base salary.»
Три «партиции», которые ты обязан спроектировать:
Четыре группы:
Связи показывают три потока:
В ноде PagerDuty прикреплён ADR-001 про модель оплаты on-call (base stipend + per-page premium vs flat salary uplift) — это самое load-bearing decision во всей системе, потому что оно создаёт economic feedback loop: каждый ложный page = реальные деньги в финотчёте, что мотивирует компанию tune-ить alerts.
Стандартная передача pager между primary on-call. Outgoing пишет written summary прошлой недели (3 pages: 2 disk-full, 1 deploy rollback), указывает watch list (ticket #4421 — DB CPU), 30-минутный standup, PagerDuty schedule swap. Outgoing уходит в honest weekend off — pager не звонит. Правило: no solo on-call, всегда есть backup.
Page в 3 ночи: disk 81% при threshold 80%, runbook говорит «wait or scale утром» — no action. Это false page #7 за неделю. Делаем weekly page review, считаем delete ratio (% pages, по которым ничего не сделали). Tune: threshold 80% → 90% + auto-scale при 85%; symptom-based вместо cause-based; disk-warning → email, disk-critical (PVC fail) → page. Outcome: 7 pages/week → 1.4 pages/week.
US team в 17
PT пишет handoff doc, делает 30-min overlap standup с EU (02 CET), PagerDuty схема авто-переключает pager. US ложится спать — pager не звонит. EU держит 9:00-17 CET, передаёт APAC, цикл замыкается через 24 часа на US. Outcome: zero ночных pages во всех 3 регионах. Trade-off: hand-off overhead, knowledge fragmentation, требует одинаковую expertise во всех регионах.HighErrorRate → page primary. No-ack 5 min (телефон сел / DND включён) → page secondary. No-ack ещё 5 min (secondary на самолёте) → page manager. Manager ack-ает, declare incident, war room, runbook, statuspage. Постмортем: blameless — почему escalation сработал? Action items: phone-die check (battery low → SMS), secondary BYOD policy, weekend 2 backups вместо 1.
Трекаем pages per person per week. Signal: Engineer A — 50 pages/week (30 ночных) vs team avg 12. 1
показывает cynicism, sleep issues, ownership decreases — burnout signs. Root cause: 70% pages — knowledge silo (только A знает legacy biller). Actions: (1) tune noisy alerts, (2) rebalance — A на shadow-week, (3) cross-train 2 других на biller — kill silo, (4) automation для top-3 biller-pages, (5) hire +1 SRE (4-person rotation). Outcome: pages distributed, A retention preserved, knowledge spread.Самое load-bearing decision во всей системе. Три модели:
(1) Flat salary uplift («on-call включён в зарплату senior-grade»). Легко считать, но фиксирован вне зависимости от нагрузки, демотивирует уменьшать pages (нет связи pain↔pay), скрывает understaffing. Anti-pattern. Через год senior-ы уходят, junior-ы не учатся.
(2) Hourly on-call rate (10-30% от обычной ставки за каждый час pager-duty). Справедливо, дорого считать, не отражает интенсивность (спокойная неделя оплачивается так же, как ад).
(3) Base stipend + per-page premium — принимаем.
PagerDuty / Stripe / Heroku публикуют похожие схемы.
Anti-pattern: senior-only «как часть зарплаты» — junior-ы не учатся, senior-ы выгорают, knowledge silo растёт. Anti-pattern: flat 10% salary без per-page — нет economic feedback loop на noise.
On-call ротация — overkill, если:
availability-numbers —
three nines vs four nines: что значит для on-call (43 min downtime/month
vs 4.3 min/month).error-budgets-slo-sli —
как считать error budget, и как он управляет: deploy freeze, on-call
intensity, priorities.incident-management-process —
что происходит после того, как pager зазвонил: roles (IC, comms,
scribe), war room, postmortem.monitoring-alerting —
как строить symptom-based alerts (RED, USE), что page-ить vs
email-ить.chaos-engineering —
GameDay-и тренируют on-call: planned incidents в рабочее время,
чтобы junior-ы научились без real-prod pressure.