What is Erlang C?
Erlang C is a probability model developed by Danish engineer Agner Krarup Erlang in the early 20th century for telephone networks. It calculates the probability that a caller will have to wait before being served, given a certain traffic intensity and number of agents.
In contact centres, Erlang C is the foundation of staffing requirement calculations. It answers the core WFM question: "How many agents do I need to answer X% of calls within Y seconds?"
Traffic Intensity (A) — The Foundation
Before applying the Erlang C formula, you must calculate Traffic Intensity, also called Erlang A or simply A. This represents the average workload — in Erlangs — placed on the system per unit time.
λ (lambda) = call arrival rate per second | h = average handling time in seconds
Practical calculation
In a contact centre, you typically work in 30-minute or 15-minute intervals. To calculate A for a 30-minute interval:
Example: 200 calls in 30 min, AHT = 240 seconds
A = (200 × 240) ÷ 1800 = 26.67 Erlangs
An Erlang of traffic intensity means one agent would be continuously busy for one hour handling that workload. If A = 26.67, you need at minimum 27 agents just to handle the workload — and more to achieve an acceptable service level.
| Calls per 30 min | AHT (seconds) | Traffic Intensity (A) | Min Agents Needed |
|---|---|---|---|
| 100 | 180 | 10.0 | 11 |
| 150 | 240 | 20.0 | 21 |
| 200 | 240 | 26.7 | 27 |
| 300 | 300 | 50.0 | 51 |
| 500 | 360 | 100.0 | 101 |
The Erlang C Formula
The Erlang C formula calculates C(N, A) — the probability that a call will need to wait (i.e., all N agents are busy).
Where:
- N = Number of agents (must be greater than A)
- A = Traffic intensity in Erlangs
- N! = N factorial (N × (N−1) × ... × 1)
- Σ = Sum from k=0 to N−1
Once you have C(N, A), the probability that a call is answered within t seconds is:
Where h is average handling time in seconds and e is Euler's number (~2.71828).
Service Level from Erlang C
Your Service Level target (e.g., 80% of calls answered within 20 seconds) is achieved when:
Step-by-Step: How to Use Erlang C
Gather your inputs
You need three values: forecasted call volume for the interval, average handling time (AHT) in seconds, and your service level target (e.g., 80% of calls answered within 20 seconds).
Calculate Traffic Intensity (A)
A = (Volume × AHT) ÷ Interval seconds. For a 30-minute interval: A = (Volume × AHT) ÷ 1800.
Set N = ceiling(A) + 1 as starting point
Start with N = round up A + 1 to ensure N > A. You will increment N until your SL target is met.
Calculate C(N, A) — the waiting probability
Apply the Erlang C formula with your current N and A. In practice, use a WFM tool or spreadsheet with a built-in Erlang C function — calculating factorials manually for large N is impractical.
Calculate the resulting Service Level
SL = 1 − C(N, A) × e^(−(N−A) × (target_seconds/AHT)). If this SL meets your target, N is your net staffing requirement.
Increment N if needed
If SL is below target, add one agent (N = N+1) and recalculate. Repeat until SL target is met. The minimum N that achieves target SL is your net staffing requirement.
Apply shrinkage to get gross headcount
Gross HC = Net HC ÷ (1 − Shrinkage%). Example: 28 net agents, 25% shrinkage → 28 ÷ 0.75 = 37.3 → 38 agents scheduled.
Worked Example
Scenario: A contact centre forecasts 180 calls for the 10:00–10:30 AM interval. AHT = 270 seconds. Target: 80% of calls answered within 20 seconds.
Step 1: Traffic Intensity
Step 2: Starting Agent Count
N starts at 28 (ceiling of 27.0 + 1 = 28)
Step 3–6: Iterate to find N
| Agents (N) | C(N, A) | Service Level | Target Met? |
|---|---|---|---|
| 28 | 0.932 | 14.3% | No |
| 30 | 0.786 | 37.9% | No |
| 32 | 0.572 | 60.1% | No |
| 34 | 0.341 | 76.5% | No |
| 35 | 0.255 | 82.1% | Yes ✓ |
Net staffing requirement = 35 agents
Step 7: Apply Shrinkage (25%)
Sensitivity Analysis — How Variables Affect Staffing
Understanding how each input drives staffing requirements is critical for WFM planning decisions.
Volume Sensitivity
| Volume Change | Traffic Intensity | Net Agents Req. | Incremental Agents |
|---|---|---|---|
| −10% (162 calls) | 24.3 | 31 | −4 |
| Baseline (180 calls) | 27.0 | 35 | — |
| +10% (198 calls) | 29.7 | 39 | +4 |
| +20% (216 calls) | 32.4 | 43 | +8 |
AHT Sensitivity
A 10% increase in AHT has a roughly proportional impact on traffic intensity and therefore agent requirements. This is why AHT reduction is one of the highest-leverage levers in WFM.
| AHT Change | AHT (seconds) | Traffic Intensity | Net Agents Req. |
|---|---|---|---|
| −10% | 243 | 24.3 | 31 |
| Baseline | 270 | 27.0 | 35 |
| +10% | 297 | 29.7 | 39 |
| +20% | 324 | 32.4 | 43 |
Service Level Target Sensitivity
| SL Target | Net Agents Req. | Incremental Cost |
|---|---|---|
| 70% in 20s | 33 | Lower cost, higher queue risk |
| 80% in 20s | 35 | Standard |
| 90% in 20s | 38 | +3 agents vs baseline |
| 95% in 20s | 41 | +6 agents vs baseline |
Limitations & When to Use Erlang C
Assumptions of Erlang C
- No abandons: Erlang C assumes all callers wait indefinitely. In reality, callers hang up — which can make real SL better than Erlang C predicts at high occupancy.
- Poisson arrivals: Assumes random call arrivals, which is generally a good approximation for voice but less accurate for scheduled callbacks or chat.
- Constant AHT: Uses a single average AHT. In practice, AHT varies by agent skill, time of day, and contact type.
- Homogeneous agents: Assumes all agents are equally capable, equally available, and handling one contact type.
- Steady state: Erlang C models a steady-state equilibrium. It does not model the transient behaviour at the start of an interval.
When Erlang C is the right model
- Inbound voice queues with real-time staffing requirements
- Low-to-moderate abandon rates (below ~15%)
- Single-skill or simple multi-skill environments
- Strategic and tactical staffing decisions (not real-time)
When to use alternative models
- High abandons: Use Erlang A (extended model that accounts for abandonments)
- Asynchronous channels (email, back-office): Use workload-based models (volume × AHT ÷ productive hours), not Erlang C
- Chat (concurrent sessions): Modified Erlang models or simulation
- Very small teams (<5 agents): Erlang C overestimates SL at small N — use simulation