← semua materi
19:00 Tips · 31 Oct 2026 · 19:01

On-call yang sehat: kenapa alert-mu bikin orang berhenti peduli

Isi

Ada pola yang hampir selalu sama di tim yang baru mulai on-call. Minggu pertama, semua orang siaga. Minggu ketiga, mulai ada yang mematikan notifikasi malam. Minggu keenam, alert pagi jam 3 di-snooze tanpa dibaca — dan satu insiden nyata lolos karena semua orang sudah belajar bahwa "alert ini biasanya palsu".

Itu alert fatigue. Bukan masalah disiplin orang. Masalah desain sistem alert.

Tanda kebiasaan buruk sudah parah: - Alert masuk lebih dari ~2x per shift tanpa tindakan berarti - Ada alert yang selalu di-ack lalu diabaikan ("nanti juga hijau sendiri") - Orang takut pegang jadwal on-call → jadwal selalu kosong H-1 - Satu insiden menghasilkan 40 notifikasi untuk satu akar masalah

Prinsip yang lebih realistis: alert = panggilan bangun tengah malam. Kalau tidak layak membangunkan orang, jangan kirim sebagai page — kirim ke channel/dashboard saja. Google SRE mendefinisikan page sebagai "harus actionable sekarang" dan sisanya cukup tiket. Dua jalur ini beda, dan mencampurnya adalah akar fatigue.

Aturan praktis yang bisa dipakai tim kecil:

Jenis sinyal Nasib
User terdampak sekarang (error rate, latency SLO breach) Page
Resource mendekati batas tapi belum berdampak Dashboard + tiket pagi
Deploy sukses/gagal Log/deploy channel, bukan page
Alert yang 90 hari terakhir selalu false positive Hapus, bukan di-tune

Poin terakhir itu yang paling sering dilewat. Alert yang sering palsu punya biaya: kepercayaan. Satu false positive per minggu cukup untuk melatih seluruh tim mengabaikan semua alert.

Runbook = beda antara panik 20 menit dan fix 3 menit.

Runbook yang berguna bukan dokumen 12 halaman Confluence. Cukup 5 baris, ditulis saat insiden masih hangat:

Symptom: 5xx naik di /api/checkout, >2% selama 5 menit
Cek pertama: dashboard payment, lihat error code dominan
Langkah 1: kalau 502 dari upstream → cek health endpoint provider
Langkah 2: kalau DB connection pool habis → restart pod (aman, stateless)
Eskalasi: kalau >15 menit belum jelas → panggil @backend-lead
Rollback: git revert deploy terakhir, lihat #deploys

Yang bikin runbook mati: ditulis setelah insiden selesai oleh satu orang, disimpan di tempat yang tidak dibuka jam 3 pagi. Solusi: taruh link runbook langsung di isi alert. Satu klik dari notifikasi ke instruksi.

Postmortem tanpa blameless akan jadi ajang pembelaan diri. Kalau pertanyaannya "siapa yang deploy", orang akan menyembunyikan informasi. Kalau pertanyaannya "kenapa sistem mengizinkan perubahan itu lolos", orang akan jujur. Selalu arahkan ke sistem, bukan orang.

Satu hal yang bisa langsung dipakai

Buka daftar alert-mu hari ini, urutkan berdasarkan frekuensi 30 hari terakhir. Ambil 3 teratas yang paling sering muncul. Untuk masing-masing, jawab satu pertanyaan: "Kalau alert ini dihapus, apa yang benar-benar hilang?" Kalau jawabannya "tidak ada", hapus. Kalau jawabannya "kami tidak tahu", itu justru alert yang paling berbahaya — hapus juga, lalu buat alert baru yang mengukur dampak ke user, bukan gejala internal.

Takeaway

Alert yang tidak pernah ditindaklanjuti bukan alarm — itu noise yang melatih tim untuk tidak percaya pada sistemnya sendiri. Lebih baik 5 alert yang selalu benar daripada 50 yang kadang-kadang berguna.