Method

How the number is built.

Published in full, because a figure you cannot audit is a figure you should not act on. Everything below is what runs against your data, in the order it runs.

1. Capacity — calls you never got to

We work in thirty-minute intervals. For each interval we compute offered load in Erlangs from the calls that arrived and how long calls take to handle, and compare it against the agents actually available, adjusted for breaks and absence.

A = (calls × average handle time) / 1800 seconds ρ = A / agents available P(wait), average speed of answer, and service level follow from the Erlang B recursion — computed recursively, so it stays stable at large agent counts where the factorial form overflows.

Erlang C assumes callers wait forever. They do not, which is why it overstates service and understates loss. Where your data supports it we use Erlang A and fit mean caller patience empirically: we regress your observed abandonment against modeled answer speed and solve for the patience parameter that explains it.

P(abandon) = 1 − exp(−ASA / θ) θ fitted from your own callers

Fitting patience from your callers rather than importing an industry constant is the single strongest methodological difference between this and a spreadsheet. We report the fitted value and its confidence interval in the appendix. If the fit is poor, we say so and widen the reported range rather than quietly proceeding.

Heatmap of occupancy by day of week and half hour, with amber cells marking intervals above the healthy ceiling.

All figures on this page are illustrative, generated from a modelled reference operation by dialworth/scripts/site_figures.py.

Abandonment rate against interval occupancy, flat at low load and rising sharply past 0.85.

The loss itself:

lost calls = abandoned − recovered lost bookings = lost calls × P(book | answered) × attainability capacity loss = lost bookings × average job value × contribution margin

Recovered is the most dangerous number in the whole model. If you have caller ID on your call records we measure it directly, by matching abandoned numbers against subsequent inbound calls within seventy-two hours. If you do not, we assume a conservative default and flag it — a higher recovery rate makes the headline figure smaller, so the default is chosen to understate.

2. Conversion — calls you answered and did not book

We benchmark against your own best performer, not an external ideal. Your best rep already controls for your market, your pricing, your lead sources and your season in a way no industry figure can.

for each pipeline stage s: gap = best performer rate − team weighted rate attainable = gap × attainability factor lost bookings = calls reaching stage s × attainable

Three controls apply before that number is credible:

Conversion funnel showing calls reaching each of the five call-handling stages and the share clearing each one.

3. Turnover — what a departure actually costs

Recruiting, interviewing and training are invoiced, so every owner already counts them. The ramp-period booking shortfall is not invoiced, so almost nobody does.

recruiting + hiring + training + supervisor overhead + ramp shortfall = Σ (calls handled in ramp week w) × (steady booking rate − ramp rate in week w) × average job value × margin + coverage gap = the capacity loss attributable to the vacancy

The ramp shortfall typically runs several times the recruiting cost. That asymmetry is usually the most actionable finding in the report, because it changes what retention is worth.

4. Reconciliation — why we do not simply add

The three components overlap, and a report that sums them is overstating. Two controls are explicit:

The report shows a reconciliation waterfall — total inbound demand, through answered, through booked, into the three buckets. If the buckets do not close against the gap, the analysis is wrong and does not ship.

Reconciliation waterfall from total inbound demand through abandoned, answered, not booked, and booked.

5. Uncertainty — every figure is a range

We run ten thousand Monte Carlo draws over the assumptions that carry real uncertainty: recovery rate, attainability, fitted patience, job value sampled from your own distribution rather than its mean, the ramp curve, and contribution margin. You get a tenth, fiftieth and ninetieth percentile.

You also get a tornado chart ranking the assumptions by how much each contributes to the spread. That tells you which assumption is worth going and measuring properly, and it tells you where the model is weakest. Both are things a vendor selling certainty would rather you did not see.

6. Data quality gates — when we refuse

Seven checks run before anything is computed. If one fails you receive a readiness report instead of a figure. There is no partial-result path.

Two further conditions do not block but widen the reported range: a single-season window, and one lead source dominating the mix.

A readiness report is a useful document in its own right. It tells you exactly what to turn on, and most of it is configuration you already own.

7. What the report will not say

It will not say a change will increase bookings, or that a figure was caused by a practice. The engine measures association and models counterfactuals under stated assumptions, and the language stays inside what the method supports: modeled, associated with, under these assumptions.

Every parameter appears in the appendix with its source — measured from your data, stated by you, or an industry default. Defaults are flagged and counted on a limitations page that also lists what we could not measure and why. That page tends to build more credibility than any other in the document.

Want this applied to your operation? Send us what your systems can export and we will run the gates and tell you where you stand, at no charge. Request a data review, or get a rough figure first with the estimator.