PebbleWFM

How to calculate Erlang C staffing for a contact centre

A step-by-step worked example of the Erlang C calculation: from contact volume and handle time to the agents you need for an 80/20 service level.

Published

Erlang C is the formula behind almost every staffing number in a contact centre. It answers one question: given how many contacts arrive, how long each one takes, and how quickly you want them answered, how many agents must be available at once? This guide walks through the calculation with a worked example you can follow in the calculator below.

What you need before you start

Three inputs, all for a single planning interval:

  • Contacts in the interval. From your forecast. If you plan in 30-minute intervals, this is the volume for one 30-minute slot, not the hourly or daily total.
  • Average handle time (AHT) in seconds: talk time plus hold plus after-call wrap-up.
  • A service level target. Usually written as two numbers, such as 80/20: 80 per cent of contacts answered within 20 seconds.

The worked example uses 200 contacts in a 30-minute interval, an AHT of 300 seconds, and an 80/20 target.

Step 1: turn volume and handle time into erlangs

An erlang is one hour of work in one hour, or, more usefully, the average number of contacts in progress at any moment. It is arrival rate multiplied by handle time in the same unit:

erlangs = (contacts ÷ interval minutes) × (AHT seconds ÷ 60)
        = (200 ÷ 30) × (300 ÷ 60)
        = 6.67 contacts per minute × 5 minutes
        = 33.3 erlangs

On average, 33.3 conversations are happening at once. That immediately tells you 33 agents is not enough: with as many agents as erlangs the queue never clears, because arrivals are random and bunch up. The question is how many more than 33.3 you need, and that depends on the target.

Step 2: the probability that a contact has to wait

For a given number of agents N and workload A, Erlang C gives the probability that a new contact finds every agent busy:

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

You will not want to do this by hand, and you should not do it with the factorials in a spreadsheet either, because they overflow past a hundred or so agents. The standard approach is a recurrence that walks up from one agent to N. With 39 agents and 33.3 erlangs, the probability of waiting is 25.4 per cent.

Step 3: from probability of waiting to service level

Contacts that do not wait are answered within the target by definition. For the ones that do wait, the chance of still being in the queue after T seconds falls away exponentially:

service level = 1 − P(wait) × e^( −(N − A) × T ÷ AHT )
              = 1 − 0.254 × e^( −(39 − 33.3) × 20 ÷ 300 )
              = 82.6%

The exponent is where the intuition lives. N − A is spare capacity: the more agents you have above the workload, the faster the queue drains. T ÷ AHT is how generous the target is relative to handle time: a 20-second target against a 5-minute AHT is demanding; the same target against a 90-second AHT is much easier.

Step 4: search for the smallest number of agents

Erlang C does not solve for N directly. You try agent counts until the service level clears the target:

AgentsContacts that waitService levelASAOccupancy
3655.2%53.8%62 s92.6%
3743.2%66.2%35 s90.1%
3833.3%75.6%21 s87.7%
3925.4%82.6%13 s85.5%
4019.1%87.8%9 s83.3%

The answer is 39. Notice how steep the curve is near the target: each agent moves service level by around ten points. Being one agent short does not cost you a little service level, it costs a lot, which is why intervals with a single late log-in can fail.

Step 5: check occupancy, then add shrinkage

Two things remain before the number is usable.

Occupancy. 33.3 erlangs across 39 agents is 85.5 per cent occupancy: agents are handling contacts for 85.5 per cent of their available time. That is on the edge of what people can sustain for a full shift. Many planners cap occupancy at 85 per cent, which would round this interval up to 40 agents. The occupancy guide covers why.

Shrinkage. 39 is the number of agents who must be logged in and available for the whole interval. It is not the number to put on the roster, because some of the people you schedule will be on a break, in a coaching session, or off sick. At 30 per cent shrinkage you need 39 ÷ 0.7 = 55.7, so 56 scheduled. The shrinkage guide shows how to get your own figure, and the staffing requirement calculator runs all three steps together.

Try it with your own numbers

Inputs
Demand

Calls, chats or tickets arriving during one interval.

s

Talk plus hold plus wrap-up.

Targets
%

Share of contacts to answer within the target time.

s
Results
Agents required
39

On the phones for the whole interval, before shrinkage.

Service level achieved
82.6%
Occupancy
85.5%
Average speed of answer
13.4 s
Contacts that will wait
25.4%
Workload
33.3 erlangs
Show the working
  1. Workload = 200 contacts ÷ 30 min × 300 s ÷ 60 = 33.3 erlangs.
  2. The queue is only stable with more agents than erlangs, so the search starts at 34.
  3. With 39 agents, Erlang C gives a 25.4% chance that a new contact finds every agent busy.
  4. Service level = 1 − 0.254 × e^(−(39 − 33.3) × 20 ÷ 300) = 82.6%, which clears the 80% target.
  5. With 38 agents it would be 75.6%, which does not.
  6. Occupancy = 33.3 ÷ 39 = 85.5%.

Doing this for every interval of the week? Pebble WFM computes the requirement from your forecast and builds the roster. Free month, no card needed.

Common mistakes

  • Mixing units. AHT in minutes with a target in seconds, or hourly volume in a 15-minute interval, gives an answer that is wrong by a factor of four or sixty and looks plausible.
  • Using the average interval. Staffing to the day’s average understaffs the peak and overstaffs the trough. Run the calculation for every interval and staff to the curve.
  • Applying it to email and back-office work. Erlang C assumes contacts must be handled the moment an agent is free. Work that can wait hours is a workload calculation, not a queueing one.
  • Forgetting that it ignores abandonment. Erlang C assumes infinite patience. At very low staffing it predicts queues that would never happen because customers hang up. Treat the model’s numbers near the unstable end with caution.
  • Treating the output as headcount. It is agents on the phones for one interval. Headcount comes from covering every interval with shifts, then adding shrinkage.

Where next

Frequently asked questions

Can I calculate Erlang C in Excel?
Yes. Build the Erlang B recurrence down a column (B(k) = A×B(k−1) ÷ (k + A×B(k−1)), starting from B(0) = 1), convert the last row to Erlang C, then apply the service level formula. Avoid the closed form with factorials: it overflows somewhere around 170 agents. The calculator on this page does the same thing without the spreadsheet.
What is Erlang A and should I use it instead?
Erlang A adds customer abandonment to the model. It gives a lower requirement because some contacts leave the queue, and it predicts abandonment rate directly. It needs a patience estimate that most centres do not have a reliable figure for, so in practice most planners still use Erlang C and treat its slight over-staffing as a safety margin.

Stop doing this one interval at a time

Pebble WFM forecasts your demand, computes the staffing requirement for every interval, builds the roster and publishes it, with self-service for agents and a copilot that can do what a planner can. Explore a sample organisation on day one.

Start your free month No card needed.