Support shift-schedule starter
A fill-in template that turns your demand curve into a defensible weekly support shift schedule — sizing coverage by interval, converting it to headcount with occupancy and shrinkage, and rotating nights and weekends fairly.
Use this to build a repeatable weekly shift schedule for a support team, starting from what your demand actually looks like rather than from "who's usually around." It works for email/ticket, chat, and phone — the math differs by channel and that's called out where it matters. Replace everything in [brackets] with your real numbers, tools, and names before you hand it over.
The chain this template walks: demand by interval → work-hours → agents on the floor (via occupancy) → people to roster (via shrinkage) → named shifts → a rotation that's fair over time. Skip a link and you'll either burn the team or miss your service level.
Roles
| Role | Who | Owns |
|---|---|---|
| Scheduler / WFM | [name] | The forecast, the math, the published roster |
| Support lead | [name] | Coverage sign-off, fairness, PTO decisions |
| Duty manager (per shift) | [rota] | Real-time coverage and swaps on the day |
The build at a glance
| Move | You produce | The one thing that must be true |
|---|---|---|
| 1. Size demand | Contacts by interval and weekday | You staff to the peak interval, not the daily average |
| 2. Convert to headcount | Agents-on-floor and FTE numbers | Occupancy and shrinkage are both applied, in that order |
| 3. Lay out shifts | A named shift for every covered hour | Every interval at or above requirement has a name against it |
| 4. Rotate fairly | A repeating pattern | Nights, weekends, and early starts are shared, not dumped |
| 5. Run it weekly | An adjusted, published roster | The schedule survives contact with real absence |
1. Size the demand (by interval)
You cannot staff a curve you haven't drawn. Get contact volume down to intervals, because a queue that's fine on a daily average can still leave customers waiting two hours at your evening peak.
- Pull contact volume by interval (30- or 60-minute blocks) across a [representative 4–8 week] window, separated by weekday — Monday behaves nothing like Saturday.
- Split by channel (email/ticket, chat, voice). They don't scale the same and voice/chat carry concurrency and wait-time targets.
- Mark the peak interval and peak day. These size the schedule.
- Note recurring known drivers (billing runs, release days, marketing sends) that bend the curve predictably.
- State your service-level target per channel so there's a number to staff to — e.g. the common voice convention of answering 80% of contacts within 20 seconds (the "80/20" rule). Pick yours deliberately; don't inherit a default.
Coverage requirement worksheet — one row per interval, per weekday:
| Interval | Forecast contacts | AHT (min) | Work-hours (contacts × AHT ÷ 60) | Occupancy target | Agents on floor (work-hrs ÷ block-hrs ÷ occupancy) |
|---|---|---|---|---|---|
[08:00–10:00] | [ ] | [ ] | [ ] | [85%] | [ ] |
[10:00–12:00] | [ ] | [ ] | [ ] | [85%] | [ ] |
[12:00–14:00] | [ ] | [ ] | [ ] | [85%] | [ ] |
| … |
2. Convert demand into headcount
Two conversions people skip, in this order.
a. Occupancy — how many bodies the floor needs. Nobody is productive 100% of a shift; you need more agents present than pure workload implies. Divide the interval workload by an occupancy target. Keep occupancy roughly 85–90% as a ceiling — sustained higher and handle times and errors climb, CSAT falls, and reps burn out.
b. Shrinkage — how many people you must employ. People on the roster are away from the queue for breaks, training, meetings, sick days, and leave. That gap is shrinkage, and it typically runs 30–35% of paid time in contact centres. Size your roster up so the on-floor requirement is still met:
FTE to roster = sum of on-floor requirements ÷ (1 − shrinkage)
Worked example (one interval). Tuesday 10:00–12:00: 120 contacts, AHT 8 min → 120 × 8 ÷ 60 = 16 work-hours across a 2-hour block → 8 agents fully busy → ÷ 0.85 occupancy = ~10 agents on the floor. To reliably field 10 across the year at 30% shrinkage, roster 10 ÷ (1 − 0.30) ≈ 14 FTE-equivalents of coverage.
- Applied occupancy to every interval to get agents-on-floor.
- Applied shrinkage once, at the roster level, to size total FTE.
- For voice and chat, checked interactive intervals with an Erlang C calculator rather than flat division — at low volumes flat division understaffs and blows wait times.
- Compared required FTE to current available FTE (minus known leave). The difference is your hiring/overtime gap — resolve it before publishing a roster you can't fill.
3. Lay out the shifts
Turn the interval requirement into real, named shifts. Prefer a small set of standard shift templates over bespoke times — they're easier to swap, forecast, and be fair with.
| Shift | Hours | Days | Break plan | Headcount | Covers peak? |
|---|---|---|---|---|---|
| Early | [07:00–15:30] | [Mon–Fri] | [2×15 + 30 lunch] | [ ] | |
| Core | [09:00–17:30] | [Mon–Fri] | [2×15 + 30] | [ ] | ✓ |
| Late | [13:30–22:00] | [Tue–Sat] | [2×15 + 30] | [ ] | ✓ |
| Weekend | [10:00–18:30] | [Sat–Sun] | [2×15 + 30] | [ ] |
- Every interval at or above its requirement has a named person, not just a headcount.
- Shift overlaps cover handover and breaks so coverage doesn't dip at the seams — stagger breaks; never break the whole floor at peak.
- Time zones / follow-the-sun: if you span regions, hours are anchored to each rep's local time and the published grid shows a single reference zone to avoid off-by-an-hour gaps.
- A minimum floor is set for the thinnest interval — never schedule a lone rep with no backup on a live channel.
4. Rotate fairly and set guardrails
Unfair schedules are a top, quiet driver of attrition. Share the unpleasant slots.
- Rotate nights, early starts, and weekends through the team on a published
[2- or 4-week]cycle — don't let the same people always draw them. - Honour rest rules: minimum gap between shifts (
[11 hours]), no back-to-back late-then-early ("clopening"), max consecutive working days ([5–6]). - Publish the roster
[2+ weeks]ahead so people can plan their lives; late-changing schedules is its own burnout tax. - Define a swap process: who approves, the deadline, and that coverage (not headcount) must still be met after the swap.
- Agree premiums / time-off-in-lieu for weekend, night, and holiday shifts up front.
- Set a surge/absence trigger in numbers: "if queue >
[N]or oldest ticket >[N] minfor 30 min, pull[backup rota]/ open overtime." "We'll add people if it gets bad" is not a plan.
5. Run it weekly
The schedule is a hypothesis; reality is absence. Check it every week.
- Actuals vs forecast: where was volume or AHT off, and did coverage hold at the peak interval?
- Schedule adherence: did shifts start, break, and end as planned? Coach the pattern, don't police the minute.
- Occupancy check: any interval consistently above
[90%]→ understaffed and a burnout flag; consistently low → overstaffed, move the hours. - Service level per channel hit? If not, is it a staffing gap or a forecast miss?
- Fairness audit: is anyone carrying more than their share of nights/weekends this cycle?
- Update next week's roster and re-publish. Feed persistent misses back into the forecast in Move 1.
Keep it honest
- Staff to the peak interval, not the average. The average always looks fine; customers wait in the peaks.
- Occupancy and shrinkage are different corrections — apply both. Occupancy sizes the floor; shrinkage sizes the roster. Skip shrinkage and you'll be short by roughly a third.
- Flat division is for async, Erlang is for interactive. Email tolerates a backlog; a chat or call queue doesn't.
- A schedule nobody trusts gets ignored. Publish early, rotate fairly, and honour rest rules — or the roster on paper won't be the one on the floor.
Figures cited (sourced)
- Shrinkage typically 30–35% of paid time; apply as
÷ (1 − shrinkage)— Call Centre Helper, "How to Calculate Contact Centre Shrinkage". - Occupancy best kept around 85–90% before productivity and wellbeing degrade — Call Centre Helper, "What Are the Industry Standards for Call Centre Metrics?".
- The 80/20 service-level convention (80% of contacts answered within 20 seconds) — Call Centre Helper, "Is 80/20 Still a Reasonable Service Level?".
Continue exploring