Erlang C Formula Explained for Contact Center Staffing
Learn the Erlang C formula for probability of waiting, average speed of answer, and service level, with a worked example, the model's assumptions, and how to validate it against your own data.

The Erlang C formula estimates the probability that a contact has to wait when a fixed number of agents serve one queue. From that probability you get average speed of answer and service level, which tells you how many agents you need for a target. You can run it instantly in our free Erlang calculator.
Skip the factorials: try the free Erlang C calculator. Once you know the headcount, auto scheduling software turns it into a staffed schedule, and workload forecasting supplies the call volumes.
You do not need to calculate factorials by hand to use Erlang C. You do need to understand the inputs, the assumptions, and what the answer leaves out. This guide explains the formula in operational language and works through one example.
What Erlang C calculates
Erlang C models an M/M/N queue: arrivals follow a Poisson process, service times are represented by an exponential distribution, N identical agents serve one queue, waiting space is unlimited, and customers do not abandon. The model reaches a stable steady state only when the number of agents is greater than the offered load.
The Wharton and Technion tutorial on telephone call centers describes Erlang C as the simplest and most widely used queueing model in call-center planning, while also documenting the practical limits of its assumptions.
The inputs you need
- Contact volume: the number of contacts expected during the planning interval.
- Average handle time: the average service time, using the same time unit as the arrival rate.
- Number of agents: the agents simultaneously available to handle this queue before shrinkage.
- Service-level threshold: the wait time used for a target such as 80 percent answered within 20 seconds.
Forecast accuracy matters more than extra decimal places in the formula. If volume or handle time is biased, Erlang C will calculate a precise answer to the wrong workload.
Step 1: calculate offered load
Offered load measures the amount of work arriving during the interval. If λ is contacts per time unit and h is average handle time in that same unit, then:
a = λ × h
The result a is measured in erlangs. One erlang is one agent occupied continuously for the interval. For example, 100 calls per hour with a six-minute average handle time create 10 erlangs of offered load: 100 × 0.1 hour = 10.
Step 2: check occupancy and stability
With N agents, the modelled occupancy is:
ρ = a / N
Erlang C requires N > a, so ρ must be below 1. If offered load equals or exceeds staffed capacity, the no-abandonment queue does not have a finite steady-state waiting time. Operationally, occupancy should usually stay comfortably below 100 percent because breaks, variability, and fatigue are not free.
Step 3: calculate the probability of waiting
The Erlang C probability that an arriving contact must wait is:
P(wait) = [a^N / (N! × (1 - a/N))] ÷ [Σ(k=0 to N-1) a^k/k! + a^N / (N! × (1 - a/N))]
This expression compares the probability mass below full capacity with the probability that all agents are busy. In practice, calculators use stable recursive methods to avoid very large powers and factorials.
Step 4: calculate average speed of answer
If h is average handle time, the expected average wait before service is:
ASA = P(wait) × h / (N - a)
ASA is an average. It does not mean every customer waits that long, and it can conceal a long tail. Pair it with service level and the probability of waiting.
Step 5: calculate service level
For a service threshold t, expressed in the same time unit as h:
Service level within t = 1 - P(wait) × e^[-(N - a)t/h]
This estimates the proportion answered within the threshold under the Erlang C assumptions. It is the queueing result before scheduling losses, shrinkage, skill constraints, or abandonment are added.
Worked example: 100 calls per hour
Assume 100 calls per hour, a six-minute average handle time, 14 simultaneously available agents, and a 20-second service threshold.
- Offered load: 100 × 0.1 hour = 10 erlangs.
- Modelled occupancy: 10 ÷ 14 = 71.4 percent.
- Probability of waiting: approximately 17.4 percent.
- Average speed of answer: approximately 15.7 seconds.
- Service level: approximately 86.1 percent answered within 20 seconds.
These results describe 14 agents continuously available for the queue. If the operation expects 25 percent shrinkage, it cannot simply schedule 14 people and expect this result. The roster needs enough paid capacity to leave roughly 14 queue-ready agents after meetings, breaks, coaching, leave, and other planned losses.
Turn queue requirements into a schedule
Erlang C produces an interval-level requirement, not a roster. The next step is to convert required queue-ready agents into scheduled headcount and then build shifts that cover the intervals.
- Add shrinkage deliberately. Use the correct relationship for your definition, often scheduled headcount = required productive agents ÷ (1 - shrinkage).
- Respect skills and channels. A total headcount does not guarantee that the correct skills are available in each queue.
- Avoid rounding every interval in isolation. Shift construction needs to balance adjacent intervals, breaks, contracts, and handovers.
- Review forecast error. Compare planned and actual volume, handle time, staffing, and service results after the period.
Use the free Soon staffing calculator to test Erlang C, Erlang A, and other staffing scenarios without calculating the formula by hand.
Erlang C assumptions and limitations
Erlang C is useful when a contact center resembles one stable inbound queue with no abandonment. Its weakness is not the mathematics. Its weakness is using a clean model for an operation whose behavior violates the assumptions that make the formula work. The sections below cover those assumptions, the warning signs that matter in practice, and how to validate the model against your own data.
Arrivals are random but stable within the interval
The M/M/N model assumes arrivals follow a Poisson process with a constant average rate. Contact centers usually approximate this by calculating each 15- or 30-minute interval separately. A launch, outage, campaign, or sharp intrainterval spike can make the average rate a poor description of what agents actually face.
Service times are independent and exponentially distributed
The model represents service time with one average and an exponential distribution. Real handle-time distributions may be more concentrated, more variable, or influenced by contact type and agent skill. Averages can conceal the long cases that create queue pressure.
Customers wait until they are served
Erlang C has no abandonment. That makes it unsuitable when a meaningful share of customers hang up, time out, or leave the conversation. Research on call-center queues treats abandonment as a central difference between Erlang C and Erlang A.
Agents and contacts are statistically identical
One Erlang C queue assumes one service pool. Skill-based routing, specialist queues, language requirements, priority customers, and blended teams break that simplification because not every available agent can serve every waiting contact.
The system has reached steady state
The calculation assumes the queue has settled under stable conditions. Real queues carry work across intervals, open the day with a backlog, or experience a rate change before reaching equilibrium. The Wharton and Technion empirical analysis of call-center data describes the M/M/N model as restrictive because it omits impatience, time-dependent parameters, customer heterogeneity, and differences in agent skills.
Agents are continuously available
The model uses productive agents, not paid headcount. Breaks, meetings, coaching, absence, system issues, and offline work must be handled separately through shrinkage and scheduling. Applying Erlang C directly to scheduled headcount usually overstates capacity.
When Erlang C is a reasonable baseline
- The queue is predominantly synchronous and inbound.
- Abandonment is low enough that excluding it does not materially change the decision.
- One agent pool handles one reasonably homogeneous contact type.
- Intervals are stable enough that a stationary approximation is informative.
- The result is treated as a requirement baseline before shrinkage and roster constraints.
In these conditions, Erlang C is fast, explainable, and useful for sensitivity testing. It can show how service risk changes when volume, handle time, or staffing moves.
Warning signs that the model is misleading
- High abandonment: the no-abandonment queue overstates how many customers remain and changes the waiting-time dynamics.
- Occupancy near 100 percent: small forecast errors create disproportionate waiting, and the steady-state model may become unstable.
- Bursting arrivals: average demand hides peaks that matter to service.
- Multiple skills or priorities: aggregate capacity cannot represent who can serve which work.
- Chat concurrency: one agent may handle several conversations whose service times interact.
- Deferred work: email and back-office tasks can wait across intervals, unlike a simple live queue.
- Callbacks, redials, and reconnects: customer behavior feeds future demand back into the system.
Choose the next model based on the missing behavior
- Use Erlang A for abandonment. It extends the queue with customer patience and is often more realistic when people leave before service.
- Use separate queues or network models for skills. Skill-based routing requires more detail than a single pooled queue.
- Use simulation for operational complexity. Simulation can represent routing, concurrency, priorities, callbacks, breaks, and changing arrival rates together.
- Use empirical scenario testing when data is stronger than the model. Back-test predicted service levels against actual intervals and calibrate the planning rule.
The Technion Service Engineering course supports Erlang C, Erlang A, and richer queueing analysis, reflecting the practical need to match the model to the operating context.
How to validate Erlang C in your operation
- Reconstruct historical inputs. Use actual arrival volume, handle time, productive agents, and service threshold for each interval.
- Calculate the predicted result. Record probability of waiting, ASA, and service level.
- Compare prediction with reality. Measure bias by volume band, occupancy, day, queue, and interval.
- Investigate systematic misses. Check abandonment, arrival bursts, skill constraints, handle-time variation, and carryover work.
- Choose the simplest model that is accurate enough. Complexity is worthwhile only when it changes a staffing or service decision.
Where to go next
If abandonment, chat concurrency, or skills change the answer, compare Erlang C, Erlang A, and simulation, and read why Erlang C fails for chat before applying a voice model to concurrent conversations. To run the numbers without the formula, use the free Erlang calculator.
A queueing result is a structured estimate under stated assumptions. Good workforce planning keeps those assumptions visible, validates them against actual performance, and adds shrinkage, schedules, skills, and operational judgment before turning the requirement into a staffing commitment.
Frequently asked questions
- What does the Erlang C formula calculate?
- Erlang C calculates the probability that a contact must wait in an M/M/N queue. That probability can then be used to estimate average speed of answer and service level within a time threshold.
- What inputs are needed for Erlang C?
- You need forecast contact volume, average handle time, the planning interval, the number of simultaneously productive agents, and a service-level time threshold.
- What is offered load in Erlang C?
- Offered load is arrival rate multiplied by average handle time, using consistent time units. It is measured in erlangs and represents the productive agent capacity required if work arrived perfectly evenly.
- Does Erlang C include shrinkage?
- No. Erlang C uses productive queue-ready agents. Meetings, breaks, leave, coaching, absence, and offline work must be added separately when converting the requirement into scheduled headcount.
- Does Erlang C account for abandoned calls?
- No. Erlang C assumes every customer waits until service. Erlang A or another model is usually more appropriate when abandonment materially affects queue behaviour.
- Why must the number of agents exceed offered load?
- Without abandonment, a queue with offered load equal to or greater than productive capacity cannot reach a finite steady-state wait. The backlog continues to grow.
- When should you not use Erlang C?
- Erlang C is a weak fit when many customers abandon, demand spikes inside the interval, agents serve multiple skills or priorities, chat agents handle concurrent conversations, or work can wait across intervals. Use Erlang A for abandonment and simulation for routing, concurrency and callbacks, and back-test predicted service levels against actual intervals.


