capacityplann.ing by Foretelian

Resiliency planning for contact centres

Plan for the range, not the point.

Every capacity plan commits to one headcount. Demand never lands on one number. Resiliency planning sizes the P10–P90 range of people you will actually need, measures how far your team has really flexed before, and tells you plainly whether the plan survives a bad week.

Is your plan resilient?

Move the inputs. The verdict uses the same rule our engine applies to every week of a capacity plan.

Realised daily error, not reported MAPE. See why below.

Overtime, borrowing, cancelled leave — what your team has actually delivered.

Demand range against flex envelope
  • Demand range P10–P90
  • Your flex envelope
  • Committed plan
Coverage ratio
Headroom
Bad-week gap

Illustration only: the band here is a lognormal demand factor around your P50. The product runs Erlang C on every Monte Carlo draw, so the √-staffing effect and Poisson arrival noise are in the real number.

Three verdicts. Each one says what to do.

The verdict is never a colour on its own. It's a word, a shape and a rule you can check by hand.

Resilient
Flex ceiling clears P90 by ≥ 1.5% of plan
The whole demand range fits inside what your team can already absorb. Hold the plan.
Tight
P90 fits, headroom < 1.5%
You cover a bad week, but only just. One forecast miss eats the buffer. Watch it and line up contingency.
Exposed
P90 > plan × (1 + flex up)
A bad week needs more people than your flex has ever delivered, however good the forecast is. Pre-commit overtime, temps or cross-skilling now.

How the band is built

No black box. Every assumption below is visible in the plan and can be overridden.

  1. 01

    Split the uncertainty

    Forecast error is shared across the day (one lognormal factor per day). Arrival noise is independent Poisson per interval. Keeping them apart keeps the daily tail honest.

  2. 02

    Erlang C per draw

    Each of ~400 draws is sized to your SLA with Erlang C required servers. Staffing is non-linear in volume, so the band isn't just P50 ± x%.

  3. 03

    Measure your flex

    Actual vs scheduled staffing and overtime hours from your own history set the envelope: plan × (1 − down) to plan × (1 + up).

  4. 04

    Backcast and calibrate

    We replay past forecasts against actuals and check that the P10–P90 band really catches ~80% of outcomes. If it doesn't, the CV is corrected and stored per queue.

Your MAPE is probably flattering you

The usual conversion from forecast accuracy to error spread is CV = MAPE × √(π/2). It's only as good as the MAPE you feed it, and reported MAPE is often in-sample or aggregated. That's why the band is calibrated against what actually happened, not what the forecast report claims.

Reported MAPE implies
CV 0.065
from a 5.2% MAPE
Backcast measured
CV 0.244
nearly 4× wider
On one demo queue, a band sized from the reported MAPE caught 31% of real outcomes, against a nominal 80%. After calibration it was back near target.

Run it on your own queues

Resiliency planning is built into Foretelian capacity plans. Every week gets a band, a flex envelope and a verdict.