*By Joannès Vermorel, May 2008*This guide explains

**how to optimize the number of agents to reach the desired service level**. This guide applies to call centers and contact centers. The theory is illustrated with

**Microsoft Excel**. Advanced notes are available for software developer who would like to reproduce the theory into a custom application.

**Download:** erlang-by-lokad.xls (Microsoft Excel Spreadsheet)

When opening the spreadsheet, Excel will warn you than

**this document contains macros**. Those macros correspond to the Erlang-C formula (see explanation below). You need to activate the macros in order to reproduce the calculations.

## Modeling the inbound call activity

The inbound call activity can be modeled with a few variables:

- The average call duration noted
*t* is known. *t* is located on **B7**. - The number of agents, noted
*m* is known. *m* is located on **B8**. - The call arrival rate, noted λ is known. The arrival rate is the number of incoming calls per second. In the spreadsheet, λ is located on
**B9**.

In the following, based on those 3 variables, plus a couple of statistical assumptions, we will be able to compute

- the average agent occupancy.
- the probability that a call has to wait.
- the probability that a call waits for more than a specified time.

The most important statistical assumption is that the incoming calls behave statistically like a

Poisson process. Without entering too much into the details, this assumption is reasonable if the call events are

*mostly* independent.

**Counterexample:** if we consider the case of a call center that receive calls from viewers trying to answer a question on TV show game; then clearly the Poisson assumption is not going to hold because all the calls get simultaneously triggered by the same event (the TV show).

## Computing indicators with Erlang

Based on the assumptions introduced in the previous section, we will now

**calculate a couple of insightful indicators** that reflect the call center activity.

The

**period length** represents the duration of the time window being considered for the analysis. In the illustration here above, it's 900s which is to say 15min, a very frequently used aggregation level among call centers.

The

**traffic intensity** is a number that represent the minimal number of agents that are required to address all the incoming calls. If there are fewer agents than the traffic intensity, then mechanically, calls will be dropped. The traffic intensity is named

*u* and be computed as the product of the call arrival rate λ multiplied by the average call duration

*t*. In the spreadsheet, the traffic intensity is computed in

**B10**.

The

**average agent occupancy** (or utilization) is a ratio that expresses the amount of time spend by the agents actually answering call compared to the total time (which might include idle periods for the agents). The agent occupancy can be simply computed by dividing the traffic intensity

*u* by the number of agents

*m*. In the spreadsheet, the agent occupancy is computed in

**B11**.

The

**probability to wait** (from the caller viewpoint) expressed the probability that an agent will be readily available (i.e. idle) to answer an incoming call. This value is obtained through the Erlang-C formula. The terms of the Erlang-C formula are beyond the scope of this guide, but your can refer to the Wikipedia for the

detail. In the sample spreadsheet, the probability to wait is computed in

**B12** using the

`ErlangC`

macro function implemented in Visual Basic. The

`ErlangC`

function takes two arguments, first

*m* the number of agents and second

*u* the traffic intensity.

The

**average speed of answer** (ASA) represents the average wait time for a call. The ASA computation is based on the Erlang-C formula. In the sample spreadsheet, the ASA is computed in

**B13** using the

`ASA`

macro function implemented in Visual Basic. The

`ASA`

function takes 3 arguments, first

*m* the number of agents, second

*u* and third

*t* the average call duration.

The

**probability to wait less than a target time** is self-explanatory. Like for the probability to wait, the detail of the actual formula is beyond the scope of this guide. In the sample spreadsheet, the probability is computed in

**B15**, the desired wait time (i.e. target time), named

*tt*, being provided in

**B14**. The computation is using the function

`ErlangCsrv`

which takes 4 arguments: first

*m* the number of agents, second

*u* the traffic intensity, third

*t* the average call duration and fourth

*tt* the target time.

## Practical staffing with Excel

In the previous sections, we have seen how to compute useful indicators to analyze the call center activity. Yet, the Excel layout (see screenshot here above) was chosen for the sake of clarity, and is not suited for practical call center staffing.

In this section we propose to use a much more compact layout illustrated in the screenshot below.

Within the sample spreadsheet, the upper-left corner of illustration here above is the cell

**E2** (the cell is empty). The computations performed in this table are just the straightforward application of the formulas introduced in the previous section.

A couple of remarks

- we assume constant average call duration
*t* and constant target time *tt*. - we use static Excel cell reference, i.e.
**$A$1** instead of **A1** for the variables (which facilitate cut-and-pasting the formulas). - agent counts can be freely optimized to adjust the expected service levels.
- cell format properties are adjusted to avoid displaying to many decimals.