Swishr Pulse

Workforce & Cost Intelligence (WFM)

Uses the same backend as your Quality system (Logic Utilities tenant).
Swishr Pulse – Workforce & Cost Intelligence
WFM modeling · Headcount · Cost per contact · Scenarios
PATCH4 • WFM Practical

Executive Dashboard

Instant staffing & cost view based on your volumes, AHT, shrinkage, and salary assumptions.

Required Headcount
0
Agents (total)
Monthly Ops Cost
USD 0
Based on salary + on-cost
Cost per Contact
USD 0
Blended across all channels
Utilization
0%
Workload ÷ capacity
Staffing Mode
Dedicated vs blended comparison (SLA buffer applied after pooling).
Dedicated HC
Blended HC
Savings

Headcount by Channel

Cost by Channel

Monthly (allocation by workload)

Channel Breakdown

Channel Monthly Volume AHT (min) Workload (hrs/mo) Allocated HC (pooled) Cost / Contact

Inputs

Enter your volumes, AHT, and staffing assumptions. Save & recalculate anytime.

Volumes (Monthly)

Total inbound/outbound handled calls.

Total handled live chats.

Total handled email tickets.

Handling Assumptions

Per chat (not per message).

If 2: capacity doubles for chat (approx).

Breaks, leave, training, meetings, absence.

Used for guidance and alerts.

Applies a simple “SLA buffer” heuristic (not Erlang).

Used for assumptions & warnings (informational).

Staffing & Cost

Blended assumes agents are multi-skilled across channels.

Per agent per shift.

Adds overhead to salary (insurance, etc.).

Ops Notes

Assumptions

Baseline model

Warnings

0

Hourly Distribution (24h)

Split your daily workload across hours. Used to estimate peak-hour staffing (simple).

00:00–11:00
Sum: 100.0%
12:00–23:00
Tip: Make peaks match your service reality (promo hours, paydays, etc.).
Peak hour
Based on hourly split + utilization + shrinkage
Agents needed (peak)
Rounded up (simple)
Peak vs baseline
If > 100%, peaks may need shifts/coverage

Interval WFM Engine (MVP)

15/30-min interval staffing for voice using Erlang C, with shrinkage components. Keeps your existing estimator untouched.

Core Inputs

Shrinkage components (%)

Sum is used as total shrinkage for interval staffing.

Total shrinkage: 0%

Interval Forecast (Calls)

Paste one number per line (calls per interval). Or click “Generate from Hourly Split”.

Intervals: 0
Avg required agents (paid)
0
Peak required agents (paid)
0
Avg SLA achieved
0%
% intervals meeting SLA
0%
Worst interval SLA
Peak interval SLA
Interval Calls Agents (base) Agents (paid) Occupancy SLA achieved
Notes: Voice SL uses Erlang C (single-skill, no-abandonment). “Paid” includes shrinkage (components). Use this for operational SLA staffing; the monthly planner is budgeting-level. This MVP is interval staffing only (no shift scheduling yet).

Scenario Testing

Adjust volume and AHT without changing your base model.

Scenario Controls

Volume change

Use this for growth/seasonality assumptions.

AHT change

Simulate coaching/process impact on AHT.

Overrides slider if filled.

Overrides slider if filled.

Scenario Result

Headcount
Monthly cost
Cost per contact
Note: Scenario does not overwrite base inputs until you click Save on Inputs.

Benchmarks (v1)

Simple benchmark flags for credibility. You can edit ranges per industry later.

Benchmark Ranges

Calls AHT
Min / Max (minutes)
Chats AHT
Min / Max (minutes)
Emails AHT
Min / Max (minutes)
Shrinkage
Min / Max (%)
Cost / Contact
Min / Max (USD)
Actions

Benchmarks only affect “flags” on Dashboard.

Benchmark Flags

Tip: For real “global benchmarks”, you’ll want a benchmark library by industry (Fintech, Utilities, Retail, etc.).

Confidence & use-cases

Use cases (recommended)
  • Budgeting / annual planning
  • Hiring plan & staffing strategy (blended vs dedicated)
  • Scenario planning (seasonality, policy changes, coaching)
  • Vendor benchmark comparisons (CPC / cost per ticket)
Not suitable (without deeper WFM)
  • Contractual SLA guarantees without interval modeling + queueing
  • Intraday scheduling / shrinkage planning beyond your assumptions
  • High-variance arrival patterns (events/incidents) without re-forecasting
This model is a pragmatic estimator. For production-grade staffing, use the Interval WFM Engine tab + validated arrival rates.

Year Planner

Save month-by-month snapshots (volumes, AHT, pooled headcount, costs) and view the full year. Stored locally in your browser.

Tip: Set Inputs for the month → click Recalculate → then Save month.
Annual Cost
Annual Contacts
Weighted CPC
Peak HC
Month Calls Chats Emails AHT C AHT Ch AHT E Pooled HC Monthly Cost Blended CPC Util% Notes

Explainer: how the staffing & cost math works

This tab documents the exact calculation logic used in the tool (workload → capacity → staffing → cost allocation), so operations and finance teams can validate assumptions.

1) Workload (hours per month)

Calls workload (hrs) = (Calls Volume × Calls AHT minutes) ÷ 60
Chats workload (hrs) = (Chats Volume × Chat AHT minutes) ÷ 60
Emails workload (hrs) = (Emails Volume × Email AHT minutes) ÷ 60
Chat concurrency reduces effective workload:
Effective Chat Workload (hrs) = Chats Workload (hrs) ÷ Concurrency
Total effective workload (hrs) = Calls Workload + Effective Chat Workload + Emails Workload

2) Capacity (productive hours per agent per month)

Paid hours per agent = Shift Hours per Day × Work Days per Month
Shrinkage factor = 1 − Shrinkage%
Productive hours = Paid hours × Shrinkage factor
Occupancy cap limits usable productive time:
Capacity hours per agent = Productive hours × Occupancy Target
Note: occupancy should be higher for async work (email) than real-time voice, but must be calibrated to your operation.

3) Pooled (blended) staffing for multi-channel teams

In a blended environment, agents handle all channels, so we size a single pooled headcount.
Workload-based pooled agents =
Pooled Agents (workload) = Total effective workload (hrs) ÷ Capacity hours per agent
If Voice SLA staffing (Erlang C) is enabled in the WFM Engine, the pooled requirement is:
Pooled Agents (paid) = max( Voice SLA Agents (paid), Pooled Agents (workload) )
This prevents “we can clear workload” while still missing voice SLA at peak.

4) Voice SLA staffing (Erlang C) — WFM Engine

Offered load (Erlangs) a = (Calls per interval × AHT seconds) ÷ Interval seconds
Erlang C P(wait) computed from standard Erlang C formula (numerically stable log-sum).
Service level for target answer time T:
SL = 1 − P(wait) × exp( −(n − a) × (T ÷ AHT) )
The engine finds the minimum agents n that meets:
SL ≥ Target SLA AND Occupancy ≤ Utilization Cap
Paid agents = Base agents ÷ (1 − Shrinkage%)

5) Cost & cost-per-contact (pooled allocation)

Total monthly agent cost = Pooled Paid Headcount × Cost per Agent per Month
Because agents are blended, channel costs are allocated by workload share:
Channel Cost = Total Cost × (Channel Effective Workload ÷ Total Effective Workload)
Cost per contact (channel):
CPC(channel) = Channel Cost ÷ Channel Volume
If a channel’s AHT is very high (e.g., email threads) or volume is very low, CPC will naturally be higher even with correct pooling.

6) Definitions used in the tool

Shrinkage: paid time not available for handling contacts (leave, breaks, training, meetings, etc.).
Occupancy: portion of productive time we allow to be “busy” (protects burnout/quality).
Concurrency: average simultaneous chats per agent (capacity multiplier for chat).
AHT: average handling time (includes ACW if you want it to).
Paid headcount: scheduled/rostered agents after adding shrinkage.
Effective workload: workload after concurrency adjustments (chat) used for pooled allocation.

Settings

This MVP stores data locally (browser). Optional Supabase integration later.

Local Storage

Your inputs and benchmarks are saved in your browser automatically when you click Save.

Use backup/restore to move models between machines or share with clients.

Supabase (Optional – later)

If you want multi-user + history, we’ll connect a Supabase DB and add auth like your QA system.

What you’ll get
  • Multiple clients/workspaces
  • Scenario history & versions
  • Imports (Zendesk, Genesys, etc.)
  • Permissions: Ops vs Finance vs Leadership
Note: This file is MVP-first (local). If you want Supabase now, tell me and I’ll provide the schema + code hooks.