Free tool · no signup

Shrinkage calculator

Build your shrinkage rate out of its actual parts, then turn a productive requirement into a rostered one. Unpaid breaks handled correctly, and the divide-versus-multiply error shown explicitly so you can check your own tool against it.

Your shift

Results update as you type.

Planned, in minutes per shift

Unplanned, as a percentage

Vacancy and nesting are deliberately absent. They are headcount problems, not shrinkage.

How this is calculated

Shrinkage is the share of paid, rostered time that is not available to handle contacts. Two decisions in that sentence do most of the work, and most tools make at least one of them silently.

Unpaid breaks come out first

If lunch is unpaid it is not rostered time, so it cannot be shrinkage. It is simply not part of the shift. This calculator subtracts it before anything else:

Paid rostered time = shift length − unpaid breaks

Counting unpaid lunch as shrinkage inflates the rate and over-rosters you. It is the single most common reason two centers compare shrinkage figures and cannot reconcile them, because a center with a paid 30-minute lunch and one with an unpaid 60-minute lunch are not measuring the same denominator.

Planned and unplanned are built differently

Planned time is known in advance, so it is entered in minutes and expressed as a share of paid time. Unplanned time is statistical, so it is entered directly as a percentage.

Planned = (breaks + training + meetings) ÷ paid rostered time
Unplanned = absence + lateness + downtime
Total shrinkage = planned + unplanned

Summing the two is the common industry convention and it is what this tool does. It is worth knowing that it is a simplification: an absent agent loses their breaks too, so a strictly compounded model gives a slightly lower total. The difference is small at normal rates and the additive version is marginally conservative, which is the right direction to be wrong in.

Then it divides

Rostered FTE = required productive agents ÷ (1 − total shrinkage)

Never multiply. See below for exactly what that costs.

Worked example

The values the calculator loads with: an 8-hour shift with an unpaid 60-minute lunch, 30 minutes of paid breaks, 20 minutes of training, 10 minutes of team meetings, and 8% absence, 1.5% lateness and 1% downtime. The productive requirement is 40 agents.

  • Paid rostered time: 480 − 60 = 420 minutes
  • Planned: (30 + 20 + 10) ÷ 420 = 14.3%
  • Unplanned: 8 + 1.5 + 1 = 10.5%
  • Total shrinkage: 24.8%
  • Rostered: 40 ÷ (1 − 0.2479) = 53.18 FTE
  • The multiply error would give 40 × 1.2479 = 49.91 FTE, 3.27 FTE short

That shortfall is 6.1% of the correct answer, and 0.248² = 0.0614. The multiply error always understates the requirement by exactly the square of your shrinkage rate. At 30% you are 9% short; at 40%, 16%. The full explanation is here.

Common questions

Should shrinkage go inside or outside the Erlang C calculation?

Outside, always. Erlang C returns the agents who must be productive and on the phones. Shrinkage converts that into a rostered number. Applying it inside the queueing maths, or applying it twice because it lives in both the forecast and the roster, silently corrupts every interval you staff.

What counts as shrinkage and what does not?

Planned: paid breaks, training, coaching, meetings, scheduled off-phone work. Unplanned: absence, sickness, lateness, unscheduled aux, system downtime. Not shrinkage: unpaid breaks (not rostered time), and vacancy, attrition gaps or agents still in nesting, which are headcount problems. Rolling vacancy into shrinkage makes the requirement come out right and hides a recruitment issue where nobody will ever look at it again.

What is a normal shrinkage rate?

Most contact centers land between 25% and 35% once planned and unplanned are counted honestly against paid time. A number below 20% usually means something has been left out, most often training or unpaid-break handling. Above 40% usually means vacancy has been folded in. The absolute figure matters far less than whether you can decompose it, because a number you cannot break apart is a number you cannot improve.

Why is my WFM tool giving a different answer?

Three usual causes, in order of likelihood. It multiplies instead of dividing, which you can test in seconds: at 30% shrinkage the ratio of rostered to productive must be 1.43, not 1.30. It applies shrinkage in more than one place. Or it counts unpaid breaks in the denominator.

Should I use one rate or several?

Several, eventually. Shrinkage is not flat across the week: Monday absence is not Wednesday absence, training is clustered, and breaks concentrate in the middle of the day by definition. The highest-value step is not a more granular rate though, it is modelling planned time as real schedule events rather than a percentage, because that is what makes break optimisation possible.

The same engine, on your data

One shift here. Your operation has hundreds.

This applies one rate to one requirement. SureWFM runs shrinkage profiles per queue and per interval against your real forecast, keeps planned time as actual schedule events rather than a percentage, and attaches the trace to every result so the number is still defensible in next quarter's headcount review.

Book a demo   or start with the Erlang C calculator

calculation_trace · engine v2.4.1 · interval 11:00–11:30 volume 489 contacts (revised forecast) aht 312 s workload 84.8 erlangs target 80% in 20s (SL) · occupancy cap 0.88 erlang_c raw agents → 93 (SL 83.3%) occupancy_cap 0.88 → 97 (cap binding, 93 leaves 91.1%) shrinkage 0.27 applied → required 132.9 FTE scheduled 129 − OOO 4 → net 125 → 91 productive → predicted SL 73%