Back to blog
FILE 0x89·NIGHTDESK: ELIMINATING THE MONDAY ON-CALL UPDATE

NightDesk: eliminating the Monday on-call update

June 17, 2026 · msp, nightdesk, on-call, automation, infrastructure

Every MSP with an on-call rotation has the same Monday morning ritual: update the runbook.

Someone swaps into rotation. Someone swaps out. The phone number changes. If you forget — and eventually everyone forgets — a call escalates to someone who stopped being on-call two months ago.

NightDesk now has a better model.

The sentinel approach

Instead of hard-coding who to page, the runbook uses a sentinel value "on-call" and a rotation schedule:

{
  "on_call_rotation": {
    "timezone": "America/Chicago",
    "period_days": 7,
    "schedule": [
      {"name": "Alice",  "phone": "+15551234567", "start": "2026-06-16"},
      {"name": "Bob",    "phone": "+15557654321", "start": "2026-06-23"},
      {"name": "Carol",  "phone": "+15559876543", "start": "2026-06-30"}
    ]
  },
  "escalation_rules": [
    {"trigger": "server down", "page": "on-call", "method": "sms"}
  ]
}

At page time, NightDesk resolves "on-call" to whoever is in the current rotation slot. The escalation page goes to the right person without any manual update.

Adding someone to the rotation

When a new tech joins on-call duty, one JSON edit:

  "schedule": [
    {"name": "Alice", "phone": "+15551234567", "start": "2026-06-16"},
    {"name": "Bob",   "phone": "+15557654321", "start": "2026-06-23"},
+   {"name": "David", "phone": "+15558765432", "start": "2026-06-30"}
  ]

Push to S3. Done. The rotation automatically includes David starting June 30.

How the resolution works

The algorithm is anchor-based: it finds the earliest entry with a start date, computes how many days have elapsed since that anchor, and divides by period_days to get the rotation slot. The slot wraps modulo the number of entries, so the cycle repeats automatically.

Everything is timezone-aware — if your rotation switches at midnight Monday Chicago time, a call at 1am UTC Tuesday (which is 7pm Monday in Chicago) still goes to the outgoing tech, not the incoming one.

The page now includes the name

Because the system resolves who's on-call at dispatch time, the page message includes the tech's name:

Server down — Acme Manufacturing. Caller: Bob (CTO). First message: "the VPN has been down for 20 minutes." On-call: Alice

The morning debrief also shows "Alice was paged" instead of "on-call was paged," so the weekly report is actually readable.

Old runbooks keep working

If a runbook has "page": "alice@msp.com" without a rotation, nothing changes. The sentinel resolver passes non-sentinel targets straight through. Existing runbooks are unaffected.


NightDesk is currently in private pilot. If you run an MSP and want to test it against your after-hours call volume, reach out.