← ccPlanning Academy · Advanced track

Beyond Erlang C

Deep-dive lesson · about 10 minutes · short quiz at the end

ccPlanning academy · advanced

Beyond Erlang C

The model that runs the industry — and the assumptions it quietly makes.

The big idea

Erlang C is a model, not the truth.

It’s a brilliant, century-old approximation that staffs most contact centres well. But every model rests on assumptions, and when reality breaks them, Erlang C can mislead — usually by over-staffing. Knowing its assumptions is what separates an operator from a button-presser.

Assumption 1

Nobody abandons. Ever.

Erlang C assumes every caller waits forever, however long the queue. Real callers hang up. Because it ignores abandonment, Erlang C models a longer queue than actually forms — so it tends to recommend more agents than you truly need.

The fix: Erlang A

Add patience.

Erlang A extends Erlang C with an “abandonment” parameter — how long callers tolerate waiting. It models the queue more realistically, predicts abandonment rate, and usually lets you hit the same service with slightly fewer agents. If you have abandonment data, Erlang A is the better default.

Assumption 2

Calls arrive purely at random.

Erlang assumes a steady, random (Poisson) arrival pattern within the interval. But marketing blasts, outage call-storms and “everyone rings at 9:00” create bursts. In bursty conditions the smooth-arrival maths understates how bad a peak gets.

Assumption 3

The interval is in a steady state.

Erlang assumes each interval settles into equilibrium. But a sharp surge that builds and clears within an interval never reaches steady state — and a queue overflowing from one interval into the next breaks the model’s “independent intervals” assumption entirely.

Assumption 4

One queue, one identical agent type.

Classic Erlang assumes a single pool of interchangeable agents serving one queue. The moment you have skills, priorities, or callers routed to subsets of agents, the simple formula no longer holds — the subject of the skills-based routing lesson.

When Erlang C is still fine

Most of the time, honestly.

For a single-skill voice queue with reasonable volume, modest abandonment and no extreme bursts, Erlang C is accurate enough and wonderfully simple. Don’t abandon a working tool for sophistication’s sake — reach beyond it only when an assumption is clearly violated.

When to reach further

Abandonment → Erlang A. Complexity → simulation.

If abandonment matters, use Erlang A. If you have skills-based routing, multi-step journeys, callbacks, or interacting queues, no closed-form formula fits — that’s where simulation takes over (next lesson). Match the tool to how badly the assumptions are broken.

The over-staffing tell

Why Erlang C asks for too many

Erlang C assumes nobody ever hangs up — every caller waits forever. So it models a longer queue than really forms, and to clear that phantom queue it recommends more agents than you need. Feed the same demand to Erlang A, which knows callers abandon, and it often hits the same service with a head or two fewer.

The model isn’t wrong, it’s cautious — and that caution is a real cost. Knowing why is what makes you the operator, not the button-presser.

The takeaway

Know the assumptions; respect the limits.

Erlang C assumes no abandonment, random arrivals, steady state and one agent pool. It’s an excellent default when those roughly hold. When they don’t — abandonment, bursts, skills, complex journeys — reach for Erlang A or simulation rather than trusting a broken model.

Now test yourself ↓

1 / 10

Slides done? Here’s the same idea in a bit more depth — the part worth keeping.

In depth: the model that runs the industry, and what it assumes

Erlang C is a brilliant, century-old approximation that staffs most contact centres well — but it’s a model, not the truth. Every model rests on assumptions, and when reality breaks them Erlang C can mislead, usually by over-staffing. Knowing those assumptions is exactly what separates an operator from a button-presser, because it tells you when to trust the number and when to reach past it.

The four assumptions

First, nobody abandons: Erlang C assumes every caller waits forever, so it models a longer queue than really forms and recommends more agents than you need — the fix is Erlang A, which adds a patience parameter, predicts abandonment, and usually hits the same service with slightly fewer agents (if you have abandonment data, it’s the better default). Second, calls arrive purely at random (Poisson) within the interval, but marketing blasts, outage call-storms and “everyone rings at 9:00” create bursts the smooth-arrival maths understates. Third, the interval is in steady state, yet a sharp surge that builds and clears within an interval never reaches equilibrium, and a queue overflowing into the next interval breaks the independent-intervals assumption entirely. Fourth, one queue, one identical agent type — the moment you have skills, priorities or callers routed to agent subsets, the simple formula no longer holds.

When it’s fine, and when to reach further

Most of the time, honestly, Erlang C is fine: for a single-skill voice queue with reasonable volume, modest abandonment and no extreme bursts it’s accurate enough and wonderfully simple, so don’t abandon a working tool for sophistication’s sake. Reach beyond it only when an assumption is clearly violated — abandonment pushes you to Erlang A, while skills-based routing, multi-step journeys, callbacks or interacting queues have no closed-form fit and hand over to simulation. Match the tool to how badly the assumptions are broken.

The principle to remember: know the assumptions and respect the limits. Erlang C assumes no abandonment, random arrivals, steady state and one agent pool — an excellent default when those roughly hold, and a misleading one when they don’t.

Quick quiz

Five questions. Pick an answer to each, then check your score.

1. What does Erlang C assume about abandonment?

It assumes infinite patience, so it models a longer queue than forms — tending to over-staff.

2. What does Erlang A add over Erlang C?

Erlang A adds patience — with abandonment data it’s the better default, often needing fewer agents.

3. What arrival pattern does Erlang assume?

In bursty conditions the smooth-arrival maths understates how bad a peak gets.

4. Why does classic Erlang struggle with skills-based routing?

The single-pool assumption fails as soon as callers route to subsets of agents.

5. When should you reach beyond Erlang C?

It’s an excellent default; reach further only when its assumptions are clearly broken.

Compare the models with the Erlang C and Erlang A calculators.

Next lesson: When to simulate →