← ccPlanning Academy · Capacity planning track

From forecast to FTE

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

ccPlanning academy · capacity planning · deep dive

From forecast to FTE

Turning a year of predicted contacts into a number of bums on seats.

The big idea

Long-range staffing isn’t interval Erlang.

You can’t run Erlang on every 15-minute interval of next year — you don’t have an intraday profile that far out, and you don’t need that precision. Capacity planning works in aggregate: total workload over a month, converted to the FTE needed to carry it.

Step 1

Forecast the workload, not just the volume.

Workload = forecast contacts × forecast AHT. A year’s monthly volumes multiplied by the AHT you expect each month gives total handling hours — the raw work to be done. Both inputs are forecasts (the forecasting track covered why AHT must be one too).

Step 2

Add the service buffer.

Raw workload hours assume 100% efficiency — impossible for a live channel, because you need slack to hit service. Apply an occupancy or service factor to gross the workload up to the productive agent hours actually required. (Big operations need a smaller buffer than small ones — pooling again.)

Step 3

Convert hours to bodies.

Divide required productive hours by the productive hours one agent delivers in the period. But an agent’s contracted hours aren’t all productive — which brings in the single biggest gross-up in the whole calculation…

Step 4 · the big one

Gross up for shrinkage.

If 30% of paid time is lost to holidays, training, sickness and breaks, each agent only delivers 70% of their contracted hours to contacts. So you need more contracted FTE than productive hours alone suggest. Shrinkage is where most capacity plans live or die.

workload +buffer prod. hours ÷avail. shrink = FTE

Per period, not once

Do it month by month.

Volume, AHT and shrinkage all move through the year, so required FTE does too — higher in peak season, lower in the lull. A single annual average hides the months you’ll be desperately short. Capacity planning is a profile of required heads, not one number.

The reconciliation

Top-down sense-check.

Always cross-check the bottom-up build against a simple top-down ratio — contacts per FTE from history, adjusted for known change. If the two are wildly apart, an assumption is wrong. The discipline catches the spreadsheet error before it reaches the budget.

Where it links

Required FTE feeds everything downstream.

This required-heads profile is the input to the hiring plan (how many to recruit), the budget (what it costs), and ultimately the schedules. Get the conversion right and the rest of capacity planning is bookkeeping; get it wrong and every downstream plan inherits the error.

Watch the number grow

One month, four gross-ups

Start with 10,000 productive handling hours of work. Add a service buffer (say 85% occupancy) and you need ~11,800 productive agent-hours. Each agent gives ~140 contracted hours that month — but at 30% shrinkage only ~98 reach contacts.

11,800 ÷ 98 ≈ 120 FTE — not the 71 the raw work alone implied. Skip a step and you under-hire badly.

The takeaway

Workload → buffer → shrinkage gross-up → FTE.

Aggregate the work (volume × AHT), add a service buffer, divide by an agent’s real availability, and gross up for shrinkage — per month, not per year. Sense-check top-down. That required-FTE profile is the spine of the whole capacity plan.

Now test yourself ↓

1 / 10

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

In depth: turning a year of contacts into bodies on seats

Capacity planning doesn’t run Erlang on every fifteen-minute interval of next year — you don’t have an intraday profile that far out, and you don’t need that precision. Instead it works in aggregate: total the workload over a month and convert it into the number of full-time-equivalent staff needed to carry it. The conversion is a chain of gross-ups, and the discipline is to apply every link — because each one makes the number bigger, and skipping any of them quietly under-staffs the plan.

The chain, link by link

Start with workload — forecast contacts times forecast AHT — which gives the raw handling hours to be done. Add a service buffer, because a live channel can’t run at 100% efficiency; you need slack to hit service level, so you gross the workload up to the productive agent-hours actually required (and larger operations need a smaller buffer than small ones, thanks to pooling). Then convert hours to bodies by dividing by the productive hours one agent really delivers — which is where the biggest gross-up of all comes in: shrinkage. If 30% of paid time is lost to leave, training, sickness and breaks, each agent only gives 70% of their contracted hours to contacts, so you need more contracted FTE than the productive-hours figure alone suggests.

Per month, and always sense-checked

Volume, AHT and shrinkage all move through the year, so required FTE is a profile, not a single annual number — an average hides the months you’ll be desperately short. And whatever the bottom-up build says, cross-check it top-down against a simple contacts-per-FTE ratio from history, adjusted for known change. If the two are wildly apart, an assumption is wrong, and that reconciliation catches the spreadsheet error before it reaches the budget. The required-heads profile that falls out is the spine of everything downstream: the hiring plan, the cost, and ultimately the schedules.

The principle to remember: workload → service buffer → shrinkage gross-up → FTE, month by month, sense-checked top-down. Get this conversion right and the rest of capacity planning is bookkeeping; get it wrong and every downstream plan inherits the error.

Quick quiz

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

1. Why isn’t long-range FTE done with interval Erlang?

Capacity planning aggregates monthly workload into FTE rather than running interval-level Erlang.

2. How is workload calculated?

Workload = contacts × AHT — and AHT must be forecast too, not assumed.

3. Why add a service/occupancy buffer to raw workload?

Raw hours assume 100% efficiency; the buffer grosses up to the productive hours actually required.

4. Why gross up for shrinkage when converting hours to FTE?

At 30% shrinkage an agent gives 70% of hours to contacts — the biggest gross-up in the calc.

5. Should required FTE be a single annual number?

An annual average hides the months you’ll be short — build a profile of required heads.