Skip to main content
TurnellaBeta
Formula reference

Call centre staffing formulas — the complete WFM reference

Every formula used in contact centre workforce planning: Erlang C and service level for voice queues, Little's Law for chat concurrency, backlog flow for email and cases, shrinkage conversion, occupancy, AHT, and cost per contact. With worked examples and links to free calculators.

Key rule

The channel determines the model. Erlang C is for voice queues only; it does not apply to chat, email, or back-office work. Using the wrong formula will overstate or understate headcount by 30–60%.

Erlang traffic intensity (A)

Voice queue
A = λ × h
AErlangs (traffic intensity)
λCall arrival rate per second
hAverage handle time in seconds

Worked example

120 calls/hour = 2 calls/min = 0.0333 calls/sec. AHT = 240s. A = 0.0333 × 240 = 8.0 Erlangs.

Erlangs represent the traffic load: the average number of agents needed to handle the arriving contacts without any waiting at all. A whole number (N > A) of agents is needed to form a stable queue.

Erlang C (probability of queuing)

Voice queue
C(N, A) = [Aᴺ/N! × N/(N−A)] / [Σₖ₌₀ᴺ⁻¹ Aᵏ/k! + Aᴺ/N! × N/(N−A)]
NNumber of agents
AErlang traffic intensity
C(N,A)Probability a call will have to queue (not be answered immediately)

Worked example

At N=10 agents and A=8.0 Erlangs: C(10,8) ≈ 0.337. About 33.7% of calls will have to queue.

The Erlang C formula gives the probability that all agents are busy when a call arrives, so the caller will have to wait. Service level is derived from this probability.

Service level (Erlang C)

Voice queue
SL(t) = 1 − C(N,A) × e^{−(N−A) × t/h}
SL(t)Service level: % of calls answered within t seconds
tTarget answer time in seconds (e.g. 20 for 80/20)
C(N,A)Erlang C probability of queuing
NNumber of agents
AErlang traffic intensity
hAHT in seconds

Worked example

At N=10, A=8.0, t=20, h=240: SL(20) = 1 − 0.337 × e^{−(10−8)×20/240} = 1 − 0.337 × e^{−0.167} ≈ 0.86 = 86%.

This is the formula that Erlang C calculators evaluate. The result is the fraction of calls answered within t seconds: your service level.

Agent occupancy rate

Voice queue
ρ = A ÷ N
ρOccupancy rate (0–1)
AErlang traffic intensity
NNumber of agents

Worked example

A=8.0, N=10: ρ = 8.0 ÷ 10 = 0.80 = 80% occupancy.

Occupancy is the fraction of time agents are busy on contacts. It equals traffic intensity divided by agents. Target 75–85% for most operations; higher causes SL degradation under variance.

Average handle time (AHT)

All channels
AHT = talk time + hold time + ACW
AHTAverage handle time (all time per contact)
Talk timeTime agent is speaking with the customer
Hold timeTime customer is on hold during the contact
ACWAfter-call work (wrap, notes, tasks completed after the call)

Worked example

Talk = 3:30, Hold = 0:25, ACW = 0:45. AHT = 4:40 = 280 seconds.

AHT is the per-contact time that drives all staffing calculations. A 10% reduction in AHT reduces the Erlang traffic intensity by 10%, and typically reduces required agents by a similar proportion.

Shrinkage and scheduled headcount

All channels
Scheduled headcount = Seated agents ÷ (1 − shrinkage rate)
Scheduled headcountAgents you need to put on the roster
Seated agentsOutput of Erlang C (or other model): agents handling contacts
Shrinkage rateFraction of paid time not available for contacts (0–1)

Worked example

Seated = 10, shrinkage = 30% (0.30). Scheduled = 10 ÷ 0.70 = 14.3 → 15 agents.

Do NOT multiply by (1 + shrinkage). The correct formula divides by (1 − shrinkage). Multiplying by 1.30 gives 13, not 15, and understaffs by 2 agents.

Little's Law (live chat concurrency)

Live chat
L = λ × W
LAverage number of active chat sessions at any moment
λChat arrival rate (sessions per minute)
WAverage session duration in minutes (full chat AHT)

Worked example

60 chats/hour = 1/min. Session AHT = 12 minutes. L = 1 × 12 = 12 active sessions. At 3 concurrent per agent: 12 ÷ 3 = 4 agents seated.

Little's Law applies to any stable queue. For chat, L is the average simultaneous sessions. Agents needed = L ÷ concurrency cap (typically 2–4 per agent). Do not use Erlang C for chat.

Backlog flow (email and cases)

Email / back-office
End backlog = Start backlog + Inflow − Throughput
ThroughputCases processed per day = agents × productive hours × (3600 ÷ AHT seconds)
InflowNew cases arriving per day
Productive hoursShift hours × (1 − shrinkage)

Worked example

50 cases/day inflow, 100-case backlog, 5-day SLA clearance target. Needed throughput = (100 ÷ 5) + 50 = 70 cases/day. At AHT 25 min and 5.5 productive hours: cases/agent/day = 5.5h × 60 ÷ 25 = 13.2. Agents = 70 ÷ 13.2 = 5.3 → 6.

Erlang C does not apply to email or back-office work. SLAs are days, not seconds. The correct model is a flow equation comparing inflow against throughput capacity.

Cost per contact

Cost & budget
Cost per contact = Daily staffing cost ÷ Daily contacts handled
Daily staffing costHeadcount × shift hours × (hourly rate × (1 + on-cost %))
Daily contacts handledAgents × productive hours per day × (3600 ÷ AHT seconds)

Worked example

15 agents, 7.5h shift, £13/hr, 25% on-costs, AHT 240s, shrinkage 30%. Daily cost = 15 × 7.5 × (13 × 1.25) = £1,828. Productive hours = 7.5 × 0.70 = 5.25h. Contacts = 15 × 5.25 × 15 = 1,181. Cost per contact = 1828 ÷ 1181 = £1.55.

Cost per contact is the most useful single efficiency metric: it captures both the cost and the throughput. It changes when AHT, shrinkage, headcount, or hourly rate change.

Don't calculate by hand: use the free calculators

The Erlang C formula is computationally intensive and easy to get wrong manually. Use the free calculators. They implement the correct formulas and give you results in seconds.