Erlang B

From WFM Labs

Erlang B (also called the Erlang loss formula or Erlang's first formula) calculates the probability that an arriving call is blocked — rejected outright — in a system with no waiting room. Where Erlang C assumes blocked callers queue, and Erlang-A assumes they queue but may abandon, Erlang B assumes blocked callers are lost. The call arrives, finds all servers busy, and disappears. No queue forms. No retry is modeled.

Erlang B is the oldest of the three Erlang models, developed by A.K. Erlang in 1917 for telephone trunk engineering. It remains the correct model whenever overflow traffic is genuinely lost: trunk group sizing, IVR port planning, concurrent-session licensing for digital channels, and any capacity problem where the system physically cannot queue excess demand.

Overview

Contact center practitioners default to Erlang C for staffing decisions — and rightly so, because most voice queues do allow callers to wait. But Erlang B answers a different question: how many parallel resources do I need so that the probability of an arrival finding them all busy stays below a target?

This matters for WFM in three scenarios:

  1. Trunk sizing. If all voice trunks are occupied, the next inbound call gets a busy signal or is routed to a carrier overflow. The call is lost to the operation.
  2. Digital channel concurrency caps. Chat platforms enforce maximum concurrent sessions. A customer who clicks "Chat Now" while all slots are full gets a "try again later" message — a blocked interaction.
  3. IVR port planning. IVR systems have finite port capacity. When ports are exhausted, callers cannot even enter the IVR tree.

In each case, there is no queue. The system either serves or rejects. Erlang B is the exact model.

Mathematical Foundation

The M/M/N/N Queue

Erlang B models the M/M/N/N system in Kendall notation:

  • M — Markovian (Poisson) arrivals at rate λ
  • M — Markovian (exponential) service times with mean 1/μ
  • NN servers (trunks, ports, chat slots)
  • N — system capacity equals N (no waiting room; queue size = 0)

Offered Load

The offered load A in Erlangs is:

A=λμ=λ×AHT

where λ is the arrival rate (calls per unit time) and AHT is the average handling time in the same time unit. See Offered Load vs Carried Load for the full treatment.

The Erlang B Formula

The probability that an arriving call is blocked (the Grade of Service, GoS) is:

B(N,A)=AN/N!k=0NAk/k!

where N is the number of servers and A is offered load in Erlangs.

Intuition: The numerator is the probability that all N servers are busy in an M/M/N/N system (the Poisson-distributed occupancy of the last server). The denominator normalizes across all possible states (0 through N servers busy). The result is the fraction of time the system is full — and because of PASTA, this equals the fraction of arrivals that find the system full.

Recursive Computation

Direct computation of AN/N! overflows for large N. The standard implementation uses the Erlang B recursion:

B(0,A)=1
B(n,A)=AB(n1,A)n+AB(n1,A)

This is numerically stable and computes in O(N) steps. Every WFM platform that offers Erlang B uses this recursion internally.

Key Properties

  • Insensitivity. Erlang B depends only on the mean service time, not its distribution. The formula is exact for any service-time distribution with the same mean — exponential, deterministic, log-normal, or otherwise. This is a stronger result than Erlang C, which does depend on exponential service times.
  • Blocked calls cleared. No retries are modeled. In practice, some blocked callers retry, increasing effective offered load. The Extended Erlang B model (below) accounts for this.
  • PASTA applies. Because arrivals are Poisson, the blocking probability experienced by a random arriving call equals the time-average probability that all servers are busy. See Palm's Theorem and PASTA.

WFM Applications

Worked Example: Trunk Group Sizing

A contact center handles 2,000 calls per hour with a 4-minute (0.0667 hours) average handle time.

Step 1 — Calculate offered load:

A=2,000×0.0667=133.3 Erlangs

Step 2 — Set blocking target:

The industry standard for voice trunks is a Grade of Service (GoS) of 1% — no more than 1 in 100 calls should receive a busy signal.

Step 3 — Solve for N:

Using the Erlang B recursion, iterate N upward until B(N, 133.3) ≤ 0.01:

Trunks (N) B(N, 133.3) Status
140 0.118 Too high
145 0.047 Too high
150 0.015 Too high
152 0.010 Meets target
155 0.005 Comfortable margin

Result: 152 trunks required for 1% blocking. This means the system needs 152 − 133.3 = 18.7 trunks of headroom above the offered load — about 14% overhead.

Step 4 — Compare to Erlang C:

For the same traffic, Erlang C would determine how many agents are needed to achieve a service level target (e.g., 80% of calls answered within 20 seconds). That calculation yields ~148 agents for 80/20 SL. Trunks must exceed agents because trunks serve the offered load (including time callers spend waiting), while agents serve the carried load.

Digital Channel Concurrency

A chat operation receives 500 chat requests per hour, average handle time 8 minutes. The platform allows maximum concurrent sessions.

A=500×860=66.7 Erlangs

If sessions exceeding capacity are shown "agents unavailable," the system behaves as Erlang B. For 2% blocking:

Solving: N = 80 concurrent slots required.

IVR Port Planning

IVR interactions are typically short (90 seconds mean) but can spike. For 3,000 IVR entries per hour:

A=3,000×903,600=75 Erlangs

For 0.5% blocking (IVR port exhaustion is catastrophic because callers cannot even enter the system): N = 92 ports.

Erlang B vs Erlang C vs Erlang-A

Feature Erlang B Erlang C Erlang-A
Blocked-call assumption Lost (cleared) Queued (infinite patience) Queued (finite patience, exponential)
Queue No Yes, infinite Yes, with abandonment
Primary output Blocking probability P(wait > 0), P(wait > t) P(wait > 0), P(abandon), ASA
WFM use Trunk/port/slot sizing Agent staffing Agent staffing with abandonment
Service-time sensitivity Insensitive (any distribution) Requires exponential Requires exponential
Typical target metric GoS ≤ 1% SL 80/20 SL 80/20 + abandon ≤ 5%

Decision rule:

  • Use Erlang B when excess demand is physically lost (no queue exists).
  • Use Erlang C when callers queue with effectively infinite patience and abandonment is negligible (< 3%).
  • Use Erlang-A when callers queue but abandonment is material (> 3%).
  • Use simulation when multi-skill routing, non-Poisson arrivals, or complex overflow rules make single-queue formulas inappropriate.

Extended Erlang B

Standard Erlang B assumes blocked callers never retry. In practice, a fraction r of blocked callers redial. Extended Erlang B inflates the offered load:

Aeff=A1rB(N,Aeff)

This is solved iteratively. With r = 0.3 (30% retry rate), the effective offered load rises and more trunks are needed. Ignoring retries leads to undersizing trunk groups by 5–15% in practice.

Common Misconceptions

1. "Erlang B is just Erlang C without the queue."

Structurally true but the implications differ profoundly. Erlang B's insensitivity property (works for any service-time distribution) does not carry to Erlang C. The models answer different questions for different infrastructure layers.

2. "We don't need Erlang B because we use SIP trunking with unlimited capacity."

SIP trunks are not free. Carriers charge for concurrent call paths, and the carrier's switch has finite capacity. "Unlimited" SIP contracts still have a maximum concurrent call count in the fine print. Additionally, session border controllers, media gateways, and IVR platforms have hard limits.

3. "Offered load in Erlangs can exceed N."

Offered load can exceed N — that is exactly when blocking becomes severe. If A = 150 and N = 140, blocking is ~12%. Erlangs are a measure of demand, not capacity.

4. "Blocking probability equals lost revenue."

Only if every blocked call is a lost sale. In practice, some blocked callers retry (handled by Extended Erlang B), some reach alternate routes, and some were low-value. The cost of blocking must be evaluated in business context.

Maturity Model Position

  • Level 1 — Initial. Trunk counts set by telecom vendor recommendation or historical rule of thumb. Erlang B not explicitly used. Port capacity discovered during outages.
  • Level 2 — Foundational. Erlang B applied for trunk and IVR port sizing during annual capacity reviews. Static calculations updated quarterly. Blocking monitored reactively.
  • Level 3 — Progressive. Erlang B integrated into capacity planning workflows. Trunk/port sizing updated with each forecast cycle. Extended Erlang B used where retry data is available. Digital channel concurrency explicitly modeled.
  • Level 4 — Advanced. Trunk and port capacity modeled dynamically based on real-time forecast adjustments. Blocking probability monitored in real time and triggers automated scaling for cloud telephony. Digital and voice capacity planning unified.
  • Level 5 — Pioneering. Capacity elasticity makes static Erlang B calculations unnecessary for cloud-native infrastructure — but the model remains the calibration benchmark for capacity cost optimization.

See Also

References

  • Erlang, A.K. (1917). "Solution of some problems in the theory of probabilities of significance in automatic telephone exchanges." Elektroteknikeren 13.
  • Gross, D. & Harris, C.M. (2008). Fundamentals of Queueing Theory, 4th ed. Wiley. Chapter 3: Birth-Death Queueing Models.
  • Gans, N., Koole, G. & Mandelbaum, A. (2003). "Telephone Call Centers: Tutorial, Review, and Research Prospects." Manufacturing & Service Operations Management 5(2), 79–141.
  • Cooper, R.B. (1981). Introduction to Queueing Theory, 2nd ed. North-Holland. Section on loss systems.
  • ITU-T Recommendation E.501 (1997). "Estimation of traffic offered in the network." International Telecommunication Union.