Volume + cost model
The baseline annual labour cost is the dollar volume the calculator works against. It captures only the agent time directly applied to ticket resolution, not management or floor overhead - those live in the loaded hourly cost.
annual_labour_cost = monthly_tickets × 12 × (AHT_min / 60) × agent_cost_per_hour weighted_modifier = Σ (channel_share_i × channel_modifier_i) deflection = Σ (complexity_share_i × deflection_benchmark_i) ± 0.15 gross_savings = labour × deflection × 0.85_residual × weighted_modifier hidden_costs = token_pct × gross + integration_one_time + training_one_time + qa_pct × labour net_savings = gross_savings − hidden_costs
The 0.85 residual multiplier is a uniform haircut for residual escalation, AI runtime overhead, and supervision drag. It is intentionally conservative - we would rather under-promise than over-promise.
Deflection curve assumptions
Realistic AI rollouts follow an S-curve: ~20% of full deflection in month 1, ~85-90% by month 6, asymptotic near-target by month 12. Anything that promises full deflection from day one is over-promise; the calculator models the steady-state target after month 6.
Per-complexity deflection rates are pulled from the per-industry benchmark table (next section). Simple = FAQ / lookups / status. Medium = bookable steps such as cancellations, address changes, or refunds. Complex = multi-system or judgement calls humans still own.
Build-vs-buy formula (TCO model)
The recommendation is a deterministic score. The engine evaluates seven dimensions - volume, complexity, languages, regulated industry, IP sensitivity, integration depth, and operating hours - and rolls them into a SaaS score and a custom score.
if scoreSaas >= scoreCustom + 1 -> saas if scoreCustom >= scoreSaas + 1 -> custom otherwise (within 1 point) -> hybrid 3-year TCO comparison (display-only): saas_3y ≈ savings × 0.35 × 3 + 60_000 (license + setup) custom_3y ≈ savings × 0.18 × 3 + 220_000 (build + ops + ongoing eng) hybrid_3y ≈ savings × 0.28 × 3 + 140_000 (mid-blend)
Source: app/lib/tools/cs-savings/build-vs-buy.js. Every threshold is editable. The recommendation never invokes an LLM; same inputs, same recommendation, every time.