A customer-service centre receives telephone calls at random times. Each call needs an agent for a few minutes; if all agents are busy, the caller waits in a queue, listening to music. Agents are expensive, but so are long waits — customers hang up, complain, or take their business elsewhere. How many agents should be on duty in each half-hour?
This is the staffing problem for call centres (and, with different vocabulary, for emergency dispatch, help desks, hospital admissions and checkout lanes). Its classical answer is a hundred-year-old queueing formula due to A. K. Erlang, a Danish mathematician at the Copenhagen Telephone Company, who developed it to size telephone exchanges. The formula, together with a remarkably accurate rule of thumb derived from it, is still at the heart of every workforce management system sold to contact centres.
The decision
Fix a single planning period — say a half-hour — in which conditions are roughly stable.
- Calls arrive at an average rate of per unit time.
- Each call occupies an agent for an average handle time (talk time plus after-call work). The service rate per agent is .
- Management sets a service-level target, most commonly of the form "at least 80% of calls answered within 20 seconds", written 80/20.
The decision is the number of agents . More agents means shorter waits and a higher wage bill; we want the smallest that meets the target. The answer becomes the staffing requirement for that period, which feeds the shift scheduling model of the previous lecture.
The offered load is , measured in Erlangs. It is the average number of agents that would be busy if every call were answered immediately. With agents the utilization (or occupancy) is .
A stable queue needs : if agents could, on average, handle no more work than arrives, the queue would grow without bound. So is a hard floor on staffing; the question is how much safety staffing to add on top.
Formulation
The standard model is the M/M/c queue: arrivals form a Poisson process with rate (the first M), handle times are independent and exponentially distributed with mean (the second M), there are identical agents, callers wait in a single first-come first-served queue, and nobody hangs up.
Under these assumptions the long-run behaviour has closed forms. Let be the waiting time (before reaching an agent) of an arriving call.
If , the probability that an arriving call has to wait is
Conditional on having to wait, is exponentially distributed with rate .
The second statement makes the two standard performance measures easy to compute.
- Average speed of answer (ASA), the mean wait over all calls, including those answered at once:
- Service level, the fraction of calls answered within a threshold :
The staffing problem is then the one-dimensional integer optimization
where is the target fraction (0.8 for an 80/20 target). Because the service level increases with , the answer is found by trying until the target is met.
Evaluating the formula directly overflows for large because of the factorials. A stable route is the Erlang B recursion , , followed by . Here is the blocking probability of a system with servers and no waiting room.
Solution methods
For a single period the exact search above takes microseconds, so computation is not the issue. What matters is understanding how the answer scales with the load, and for that the key result is the square-root staffing rule.
Square-root staffing. Write the number of agents as the offered load plus a multiple of its square root:
where is a quality-of-service parameter. The intuition is that the number of calls in progress, if every caller were served immediately, is Poisson with mean and standard deviation ; safety staffing proportional to is safety stock against that variability, exactly as in inventory theory.
Let the load with for a fixed . Then the probability of waiting converges to a limit strictly between 0 and 1:
where and are the standard normal distribution function and density.
This quality-and-efficiency-driven (QED) regime explains the economics of large call centres. Holding fixed keeps the probability of waiting roughly constant, while utilization . Large centres can therefore run their agents much harder than small ones at the same service quality: the safety staffing grows only like the square root of the volume. This is the economies-of-scale argument for pooling small centres into large ones.
The practical recipe is: pick from the limit formula to hit a target probability of waiting, set , and if needed adjust by one using the exact formula.
Worked example
A centre expects 400 calls per hour with an average handle time of 3 minutes, and wants to answer 80% of calls within 20 seconds. The offered load is
so at least 21 agents are needed for stability. The Erlang C measures for a range of staffing levels are:
| Agents | Utilization | ASA (s) | ||
|---|---|---|---|---|
| 21 | 95.2% | 0.761 | 136.9 | 31.9% |
| 22 | 90.9% | 0.568 | 51.1 | 54.5% |
| 23 | 87.0% | 0.416 | 24.9 | 70.2% |
| 24 | 83.3% | 0.298 | 13.4 | 80.9% |
| 25 | 80.0% | 0.209 | 7.5 | 88.0% |
| 26 | 76.9% | 0.143 | 4.3 | 92.6% |
| 27 | 74.1% | 0.096 | 2.5 | 95.6% |
| 28 | 71.4% | 0.063 | 1.4 | 97.4% |
The minimum staffing that meets the 80/20 target is agents: 4 above the load. With 24 agents, about 30% of callers wait at all, the average wait is 13 seconds, and agents are busy 83% of the time.
Two features of the table are worth noticing. First, the marginal value of an agent falls steeply: going from 21 to 22 agents cuts the ASA by nearly 86 seconds, while going from 27 to 28 saves about one second. Second, performance is very sensitive to the load when utilization is high. If call volume turns out 5% above forecast (420 calls per hour, so ), the same 24 agents answer only 69.6% of calls within 20 seconds and the ASA nearly doubles to 25.5 seconds; at 10% above forecast () the service level drops to 53.3%.
Suppose instead the target is "at most 30% of callers wait at all". Solving gives . Applying the rule at three different loads and comparing with the exact Erlang C answer:
| Load | Rule (rounded up) | Exact minimum | Utilization at exact | |
|---|---|---|---|---|
| 20 | 23.71 | 24 | 24 | 83.3% |
| 80 | 87.41 | 88 | 88 | 90.9% |
| 320 | 334.83 | 335 | 336 | 95.2% |
The rule is exact or one agent short — remarkably accurate for a one-line formula. Quadrupling the load from 20 to 80 Erlangs raises the safety staffing only from 4 to 8 agents, and utilization climbs from 83% to 91% with the same chance of waiting.
Limitations and extensions
The M/M/c model is a starting point. Each of its assumptions fails in practice, and the failures have well-developed remedies.
Abandonment. Real callers hang up. In the Erlang A model (M/M/c+M) each waiting caller abandons after an exponentially distributed patience time with mean . Abandonment acts as a safety valve: the queue is stable even when , because impatient callers remove themselves. Erlang C, which assumes infinite patience, therefore tends to overstate waits and to recommend more agents than needed when abandonment is significant. The abandonment rate becomes a performance measure in its own right, and service targets are often set on it directly.
Non-exponential handle times. Handle times are typically closer to lognormal than exponential. The Erlang formulas are fairly robust, but for precise work centres use approximations for the M/G/c queue or simulation.
Time-varying arrivals. Call volumes follow strong daily and weekly patterns, so is really . The common approach is stationary independent period-by-period (SIPP) staffing: treat each half-hour as a separate stationary M/M/c queue using its own forecast rate, and compute a requirement for each period. This works well when periods are long relative to handle times and the rate changes slowly; when the load ramps up sharply, the queue lags behind the arrival rate and SIPP understaffs. Refinements shift the load forward by one handle time, or use the offered load of an infinite-server queue in place of .
Forecast uncertainty. The formulas treat as known, but forecasts for a given half-hour are often wrong by 10% or more. Given the sensitivity seen in the worked example, planners add a buffer, or choose staffing to meet the target in expectation over a distribution of possible .
Linking to shift scheduling. The output of this lecture — a requirement per half-hour — is precisely the input to the set covering model for shift scheduling. Because shifts are long and requirements vary, the resulting schedule over-covers many periods. Better plans come from integrating the two steps: let the shift model choose staffing levels directly, with a penalty for the service level achieved in each period (a concave, increasing function of agents, which can be approximated piecewise linearly), rather than imposing fixed requirements.
Skills-based routing. Large centres serve several call types (languages, products) with agents who have different skill sets. Deciding who answers which call, and how many agents of each skill combination to hire, leads to queueing networks that are usually tackled with simulation-based optimization.
Further reading: Gans, Koole and Mandelbaum, "Telephone call centres: tutorial, review, and research prospects", Manufacturing & Service Operations Management (2003); Koole, Call Centre Optimization.