Skip to main content
Back to blog

Contact center staffing math: Erlang C, shrinkage, and seasonal headcount

Calculate contact-center seats from arrival rate, handle time, and a service-level target, then apply shrinkage and seasonal forecasts to a weekly staffing plan.

Orbit Editorial Team

A staffing plan starts with the busiest interval, not a daily call total. Convert arrivals and average handle time into offered load, use Erlang C to estimate the seats needed for a service-level goal, then add the time agents are unavailable. The calculation is a planning baseline; actual routing, breaks, and arrivals require an intraday review.

1. Calculate seats with Erlang C

Erlangs measure concurrent work. For one 30-minute interval, divide calls by 30 minutes to get calls per minute, then multiply by average handle time in minutes:

offered load (A) = calls per interval ÷ interval minutes × AHT minutes

Erlang C estimates the probability a call waits, assuming arrivals are Poisson, service times are independent, and every agent can handle every call. For N seats and load A (where N > A):

P(wait) = [A^N / (N! × (1 − A/N))] ÷ [Σ(k=0 to N−1) A^k/k! + A^N / (N! × (1 − A/N))]

For a target answer time T and AHT H, the estimated service level is:

service level = 1 − P(wait) × exp(−(N − A) × T/H)

Consider a 30-minute interval with 480 calls, an eight-minute AHT, and a target of 80% answered within 20 seconds. The arrival rate is 16 calls per minute, so offered load is 128 Erlangs. Increase N until the service-level estimate reaches the target. The table shows the same calculation for four loads at eight-minute AHT and a 20-second target; values are illustrative and rounded to the first whole seat meeting 80%.

Calls per 30 minutesAHTOffered loadSeats for ≥80% in 20 secEstimated service level
3008 min80 Erlangs8983.8%
3308 min88 Erlangs9782.5%
3608 min96 Erlangs10581.3%
4808 min128 Erlangs13881.2%

Use a calculator or spreadsheet that evaluates the Erlang C sum to reproduce the seats. Do not round the Erlang load before calculating. The 80% target here is a worked assumption, not a recommended service target for every queue.

2. Add shrinkage and auxiliary load

Erlang C gives seats available to handle offered calls. It does not account for scheduled agents who are on breaks, in training, handling follow-up, absent, or otherwise unavailable. Convert required on-phone seats into scheduled headcount with:

scheduled headcount = required on-phone seats ÷ (1 − shrinkage)

Suppose the 138 seats for the 480-call interval need to be staffed. Your team's planned non-contact time is 25% of scheduled hours, then unplanned absence removes 8% of the remaining coverage. Combined shrinkage is 1 − (1 − 0.25) × (1 − 0.08) = 31%, not 33%. Plan 138 ÷ 0.69 = 200 people scheduled in that interval, rounding up. If your reporting defines both percentages against the same denominator, use the measured combined shrinkage instead of multiplying them.

Break, lunch, training, coaching, and meetings are planned auxiliary activities. Unplanned absence and system outages are not. Keep those categories separate in your assumptions: the AUX-code break taxonomy explains how tenant-defined reasons distinguish scheduled activities from unexplained unavailable time. Your own policy and historical reports should supply the percentages; they are not universal constants.

3. Turn seasonal volume into weekly headcount deltas

Start from a representative baseline week, then forecast demand for each 30-minute interval and week of the peak period. If calls rise 15% and AHT remains steady, offered load rises 15%, but seats do not scale by a simple percentage because the service-level target and queueing delay are nonlinear. Recalculate Erlang C at each interval's forecast load, apply the week's shrinkage, and compare scheduled headcount with the baseline.

For example, the baseline's 480 calls per interval requires 138 on-phone seats, or 200 scheduled people at 31% shrinkage. A week forecast at 552 calls (+15%) has 147.2 Erlangs; an Erlang C calculation at the same AHT and 80/20 target requires 158 on-phone seats. At unchanged shrinkage, schedule ceil(158 ÷ 0.69) = 229, a delta of 29 scheduled people for that interval. Recompute each interval and week; do not apply this one interval's delta to the whole week. The holiday-season volume playbook covers the demand-planning calendar for seasonal peaks; this staffing calculation translates a voice forecast into coverage.

Build the plan in weekly buckets that operations can act on: required seats by interval, scheduled coverage, and the resulting surplus or gap. Revisit forecast and shrinkage assumptions as actuals arrive rather than hiring against a single peak-day total.

4. Check the plan against intraday reality

A weekly model cannot see a late-running break, a sudden absence, a sharper-than-forecast arrival burst, or a queue where agents have different skills. In Voice → Scheduling, the intraday staffing view compares required with actual coverage interval by interval for the current date. Use it to spot where today's plan has drifted, then respond through the staffing optimizer and the available open-shift, overtime, or VTO workflows. The forecast and staffing optimizer use the forecast and shrinkage assumptions to produce a plan; the intraday view is where you compare that plan with the day as it unfolds.

Treat the optimizer's output as a starting schedule, not a guarantee that every queue will meet target. Confirm skills and queue coverage before publishing, and reforecast when actual volume or availability changes materially.

5. Feed adherence back into next season

After the peak, compare forecast with actual by interval, queue, and channel. Review adherence and auxiliary-code time to learn whether a coverage miss came from demand, planned activities, unplanned absence, or schedule conformance. Replace assumptions with the observed pattern, document exceptions, and rerun next season's weekly forecast. The forecast-to-adherence walkthrough follows this loop through the shipped Workforce Management surfaces.

6. Limits to keep visible

Erlang C assumes Poisson arrivals, statistically similar service times, and a single pool of interchangeable agents. Real contact centers may have bursty arrivals, callbacks, abandonment, priority rules, and multiple skills. Multi-skill routing divides the nominal pool into smaller effective pools; a total-headcount answer can therefore look adequate while a specialist queue is short. Calculate and validate by queue or skill group where practical, then compare the model with actual service levels and the intraday staffing view.

This is a planning method, not a promise of a service level or a substitute for local labor rules. Shrinkage, break placement, staffing actions, and forecast data belong to your organization; set them from your own policies and reports.

Related

Contact center staffing math: Erlang C, shrinkage, and seasonal headcount — Orbit by Devotel