C. Desivo

Staff roster takes hours every week? Generate it from your rules

§Work with me →

If next week's roster takes you an afternoon and falls apart the first time someone calls in sick, the problem isn't you. Every shift has to fit availability, skills, hour limits and fairness at once. Move one person and three other shifts break, and someone still closes three nights in a row.

Why rosters go wrong

  • Skills per shift: not just "two on nights", but "two, one able to lead", or a keyholder on every close.
  • Labour rules: in the EU, for example, workers are entitled to 11 consecutive hours of rest in every 24 (source). A late close then an early open breaks it.
  • Cost: in the US, non-exempt employees must get at least time and a half for hours over 40 in a workweek (source), so who covers a gap changes the bill.
  • Fairness: nights and weekends must rotate, or good people leave.

Does your roster need a solver?

How many of these apply?

  1. Shifts need a skill mix, not just a headcount.
  2. Minimum rest between shifts, or a weekly hours cap.
  3. Nights and weekends rotate fairly.
  4. 24/7 cover, or an overtime budget.

None or one: a spreadsheet or an app will do. Two or more: test your app's auto-scheduler on a real week first; if it can't meet them all at once, a model can.

Ways to fix it

What it does Good for Limits
Spreadsheet by hand Copy last week and patch it Small teams, stable patterns Hours every week; breaches found late
A rostering app Staff swap shifts on their phone; its auto-scheduler fills gaps from availability and built-in rules Communication, payroll export, simple rules Combined rules like the ones above often can't be expressed
A custom optimization model Your rules as constraints; a solver (mixed-integer or constraint programming) finds the best roster that breaks none Many rules, scarce skills, 24/7 cover Rules must be written down precisely once

A model can sit behind your spreadsheet or app, reading staff and shifts and writing the roster back. Two details matter:

  • Hard and soft rules. Cover, qualifications and rest never break; preferences and overtime cost are traded off. When no valid roster exists (say, too few night-qualified staff on Saturday), a good model names the blocking rule (more on "infeasible" models).
  • Sick calls. Re-solve with the published roster fixed and only the gap open, moving as few people as possible.

What I've worked on

I've built schedulers as mixed-integer models (Pyomo, PuLP, OR-Tools) and with metaheuristics (tabu search, genetic algorithms) when an exact solver can't scale. My factory scheduler (a custom search heuristic) decides who does each of 746 tasks, hour by hour, across 26 workers with one or two trades each. Putting qualified people into time slots under rules is the core of a roster too. See the full case →

What I need from you

Your staff (skills, contracted hours, availability, leave); your shifts and the skills each needs; your rules (rest, maximum hours, days off); and what "fair" means to your team. A spreadsheet and one past roster you liked are enough.

How to start

Email me at cdesivo92@gmail.com with a few lines about your team, or hire me on Freelancer.com if you prefer the platform's contracts and payment protection. I'll tell you honestly whether I'm the right person for it, and how I'd approach it.