{
  "slug": "oncall-load-calculator",
  "title": "On-Call Load Calculator",
  "heading": "On-Call Rotation Load Calculator",
  "category": "other",
  "url": "https://www.revenuelab.fyi/toolbox/oncall-load-calculator",
  "summary": "See how sustainable your on-call rotation actually is.",
  "description": "On-call burnout usually creeps up gradually and is hard to see from inside a single rotation, but it shows up clearly once you compute pages per person per week and compare it against known sustainability thresholds. This calculator takes your team size, rotation length, and total pages per week, and computes pages per person per on-call shift, plus an estimated sleep-disrupting page count based on the share of pages that land during typical off-hours (10pm-7am). Industry guidance from PagerDuty and Google's SRE book generally treats more than 2 pages per on-call shift per week as a sign the rotation needs attention — either through better alert tuning, a larger rotation pool, or follow-the-sun coverage — and more than 1 disruptive night-time page per week per person as a leading indicator of attrition risk within the team.",
  "formula": "Pages per person per week = total weekly pages ÷ team size (in single-person rotation) or ÷ concurrent on-call count. Night pages estimated as pages × night-hours share.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=oncall-load-calculator",
  "inputs": [
    {
      "id": "teamSize",
      "label": "People in rotation",
      "kind": "number",
      "hint": null,
      "default": 6,
      "unit": null,
      "min": 1,
      "max": null
    },
    {
      "id": "rotationDays",
      "label": "Days per on-call shift",
      "kind": "number",
      "hint": null,
      "default": 7,
      "unit": null,
      "min": 1,
      "max": null
    },
    {
      "id": "weeklyPages",
      "label": "Total pages per week (whole rotation)",
      "kind": "number",
      "hint": null,
      "default": 14,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "nightSharePct",
      "label": "% of pages during 10pm-7am",
      "kind": "number",
      "hint": null,
      "default": 30,
      "unit": "%",
      "min": 0,
      "max": 100
    }
  ],
  "outputs": [
    {
      "id": "pagesPerShift",
      "label": "Pages per on-call shift",
      "format": "decimal",
      "hint": null,
      "primary": true
    },
    {
      "id": "status",
      "label": "Sustainability assessment",
      "format": "raw",
      "hint": null,
      "primary": false
    },
    {
      "id": "shiftsPerPersonPerMonth",
      "label": "On-call shifts per person per month",
      "format": "decimal",
      "hint": null,
      "primary": false
    },
    {
      "id": "nightPagesPerPersonPerMonth",
      "label": "Night pages per person per month",
      "format": "decimal",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "People in rotation: 6",
      "Days per on-call shift: 7",
      "Total pages per week (whole rotation): 14",
      "% of pages during 10pm-7am: 30 %"
    ],
    "outputs": [
      "Pages per on-call shift: 14",
      "Sustainability assessment: Overloaded — needs attention",
      "On-call shifts per person per month: 0.72",
      "Night pages per person per month: 3"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter people in rotation.",
      "Enter days per on-call shift.",
      "Enter total pages per week (whole rotation).",
      "Enter % of pages during 10pm-7am (%).",
      "Read your pages per on-call shift on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "teamSize": 4,
        "rotationDays": 4,
        "weeklyPages": 8,
        "nightSharePct": 20
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "teamSize": 6,
        "rotationDays": 7,
        "weeklyPages": 14,
        "nightSharePct": 30
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "teamSize": 10,
        "rotationDays": 11,
        "weeklyPages": 22,
        "nightSharePct": 50
      }
    }
  ],
  "limitations": [
    "Estimates assume standard, average conditions — local rules, pricing, and materials vary.",
    "Results are rounded for readability; add a buffer before ordering, booking, or committing.",
    "Double-check anything with a real cost attached against a local quote."
  ],
  "faq": [
    {
      "q": "What's a healthy number of pages per on-call week?",
      "a": "Most SRE teams target under 2 actionable pages per person per on-call week as a sustainability ceiling, with anything above that treated as a signal to invest in alert tuning or auto-remediation rather than just adding people to the rotation. If pages are frequent but mostly non-actionable, the fix is alert quality, not headcount."
    },
    {
      "q": "How many people do I need in a rotation to keep it sustainable?",
      "a": "A common floor is 6-8 engineers per rotation so no one is on-call more than roughly one week in six to eight, giving enough recovery time between shifts. Smaller teams should consider secondary/backup on-call, shared cross-team rotations, or reducing alert volume before adding a punishing 1-in-3 or 1-in-4 rotation cadence."
    },
    {
      "q": "Does this account for compensation for on-call time?",
      "a": "No, this only measures load, not pay. Many companies pay a flat on-call stipend plus overtime-equivalent pay for actual incident response time; if yours doesn't, high page volume paired with no on-call compensation is one of the strongest predictors of engineer attrition and should be flagged to leadership alongside the load numbers."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/incident-cost-per-minute",
    "https://www.revenuelab.fyi/toolbox/mttr-impact-calculator",
    "https://www.revenuelab.fyi/toolbox/error-budget-burn-rate"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — On-Call Load Calculator (https://www.revenuelab.fyi/toolbox/oncall-load-calculator)"
}