Everything you need to know
about Shifters

From your first shift to a fully automated monthly schedule โ€” a complete walkthrough of every feature.

Constraint optimization Fair schedules Fully configurable No more Excel
Contents
01

How Shifters works

Shifters uses constraint programming โ€” a branch of combinatorial optimization โ€” to generate schedules that satisfy every rule you define simultaneously. Unlike spreadsheet macros that check rules after the fact, the solver builds a schedule that is guaranteed to respect all constraints from the start.

You define the rules once. The solver finds a valid assignment. You review and save it.

1. Define shiftsHours, minimums
โ†’
2. Configure employeesRules, preferences
โ†’
3. Set general rulesStreaks, rest quota
โ†’
4. Run solverโ‰ค 5 seconds
โ†’
5. Review & saveMark as official
๐Ÿ’กTeams: Create one team per group that shares the same set of shifts and general rules. Employees belong to a team. A user can manage multiple teams.
02

Defining shifts

Global per account

Shifts are defined once and shared across all your teams. Each shift has:

NameInternal identifier, e.g. morning evening Short nameAbbreviation shown in the schedule table, e.g. M E Start / End hourIn 24h format. Use values above 24 for shifts crossing midnight โ€” e.g. start 23, end 31 means 23:00โ€“07:00. Min / dayMinimum employees required on this shift each day. Set to 0 if optional. Max / dayMaximum employees allowed. Usually 1 for single-cover shifts. ColorDisplayed in the schedule table for quick visual scanning.
โš ๏ธRest between shifts: The solver automatically enforces your configured minimum rest between consecutive shifts. If an employee works an evening shift ending at 07:00 (entered as end hour 7 โ€” stored internally as 31), they cannot start a morning shift (hour 7) the next day unless min rest โ‰ค 0. Configure Min Hour Rest in General settings.
Example: 3-shift hospital setup
Morning07:00โ€“15:00, min 1, max 1 Noon15:00โ€“23:00, min 1, max 1 Night23:00โ€“07:00 (start 23, end 7 โ€” Shifters detects end < start and adds 24h automatically), min 1, max 1
Example: office with optional cover
Core09:00โ€“17:00, min 2, max 4 Late12:00โ€“20:00, min 0, max 2
03

Configuring employees

Per team
Allowed shifts

Which shifts this employee is qualified or available to work. The solver will never assign a shift not in this list.

Previous days

Streak at the end of the previous month. Positive = consecutive work days, negative = consecutive rest days. Used to respect streak rules across month boundaries. Load automatically from last month's marked schedule using the Load previous days button.

Shift preferences

Soft weights (+1 to favour, โˆ’1 to discourage) for specific shifts. The solver will prefer assigning favoured shifts when all hard constraints are already satisfied. These are soft โ€” the solver may override them if needed.

Allowed weekdays

Restrict an employee to specific days of the week. Useful for part-time staff. Unchecked days are always rest.

Rest quota overrides

By default all employees use the global rest days per month. You can fine-tune per employee:

Extra rest daysFixed offset from the global quota. โˆ’2 means two fewer rest days, +3 means three more. Overrides the soft range. Soft rest rangeMin/max extra rest days. The solver picks freely within this range, optimising for preferences. Preferred rest daysTarget rest count for the soft range. The solver penalises deviation from this target.
Streak overrides

Override the global min/max work and rest streak rules for this specific employee. Leave blank to inherit the global setting. Useful for employees with different contract types.

04

General rules

Per team
Rest days / month

Base rest day quota per employee per month. The solver will assign exactly this many rest days (unless per-employee overrides are set).

Free weekends (min)

Minimum number of fully free weekends (both Saturday and Sunday off) each employee must have per month.

Min / max hour rest

Minimum and maximum hours of rest between two consecutive shifts. Prevents impossible back-to-back assignments.

Min / max work streak

How many consecutive work days an employee must/can have before taking a rest day. e.g. min 3, max 6.

Min / max rest streak

How many consecutive rest days must/can be taken in a row. e.g. min 2, max 4 means rest always comes in blocks of 2โ€“4.

Penalty weights

Control how aggressively the solver avoids shift changes within a work block. Higher penalties produce more consistent shift assignments.

โ„น๏ธStreaks and vacations: Vacation days and sick days are transparent to streak counting โ€” they do not break or extend work/rest streaks. Busy days count as work days for streak purposes.
05

Day types

Each day in an employee's schedule is assigned one of these types:

ยท Rest V Vacation B Busy SK Sick โ€“ Specific day off โ˜… Fixed shift
Rest ยท

A scheduled rest day. Counts toward the monthly rest quota. Part of the work/rest streak calculation.

Vacation V

Pre-planned vacation. Transparent to streaks โ€” does not break or count toward work or rest streaks. Reduces the effective rest quota (the solver won't waste rest days on vacation days). Enter as day numbers: 5 6 or ranges 5-9.

Busy B

Employee is occupied (course, trip, meeting) โ€” not available for shift coverage but counts as work in statistics and streaks. Does not consume rest quota.

Sick leave SK

Sick day. Like vacation: transparent to streaks, excluded from rest quota. Tracked separately in summaries so you can monitor sick-leave patterns over the year.

Specific days off โ€“

Days the employee cannot work, counted as rest. Use integers or ranges: 18 25-27. These consume rest quota.

Fixed shifts โ˜…

Force a specific shift on a specific day. Format: 15-morning means the employee must work morning on day 15. Excluded from rest quota. Used automatically when re-solving from a specific day.

๐Ÿ’กRanges: For vacation, busy, sick and specific days off, you can enter ranges like 5-9 instead of listing each day individually. The tag is stored as-is and expanded when sent to the solver.
06

Running the scheduler

The Run page sends your configuration to the constraint solver. The solver has a 5-second time budget โ€” it will return the optimal solution if found within that time, or the best feasible solution found so far.

Quality badge

Optimal โ€” the solver proved this is the best possible schedule given your constraints and preferences.
Best found โ€” a valid schedule was found but the solver ran out of time before proving optimality.

Pre-flight checks

Before sending to the solver, Shifters checks for obvious problems: missing allowed shifts, too many forced days off, etc. Errors block the run. Warnings are advisory only.

When the solver returns infeasible

This means no valid schedule exists given your current constraints. Common causes:

  • A shift has min > 0 but not enough employees are allowed to work it
  • Rest quota is too high or too low relative to the number of working days
  • Streak rules conflict (e.g. min work streak 5 + min rest streak 3 in a 30-day month with few employees)
  • An employee has too many forced days off to satisfy their work requirements
  • Allowed weekdays restriction leaves too few working days for the required rest quota
๐Ÿ’กSaving: Every successful run is automatically saved to history. Mark a schedule as official (โ˜…) to include it in the Year Summary and enable month-to-month streak continuity.
days โ†’ 12345678910
Sara MMMยทยทNNNยทยท
Marco NNยทยทMMMยทยทN
Tarek ยทยทEEEยทยทEEE
07

Re-solving from a specific day

If the month has already started and something changed โ€” illness, last-minute swaps, unexpected absences โ€” you can lock the first N days of the current schedule and re-solve only the remaining days.

How to use it

After running and viewing a schedule, click "Re-solve from dayโ€ฆ" in the result header. Enter the number of days to lock. The solver will treat days 1โ€“N as fixed and only find assignments for days N+1โ€“end.

What gets locked

Work days โ†’ converted to fixed shifts (solver must assign the exact same shift).
Rest days โ†’ converted to specific days off.
Vacation/sick/busy โ†’ preserved as-is.

โš ๏ธThe re-solve result is saved to history with the clean original config โ€” not the locked version โ€” so the saved schedule doesn't accumulate constraint noise for future runs.
08

Editing schedules

The Edit page lets you manually adjust any schedule โ€” either one generated by the solver or built from scratch. Use it for one-off swaps that don't need the solver.

Select a shift tool

Click a shift in the toolbar to make it active. Then click cells in the table to paint that shift. Click the active tool again to deselect.

Multi-select

Ctrl+click to select individual cells. Shift+click to select a range within a row, or a rectangular block across rows. Then press a keyboard shortcut or click a shift tool to apply.

Keyboard shortcuts

Press the first letter of a shift name to cycle through shifts starting with that letter. Ctrl+Z to undo, Ctrl+Y (or Ctrl+Shift+Z) to redo. Up to 50 undo steps.

๐Ÿ’กSave options: "Save to history" stores the schedule as a past version. "Save as marked โ˜…" makes it the official schedule for that month โ€” used in Year Summary and for loading previous days.
09

Year summary

The Year Summary shows aggregated statistics across all marked (โ˜…) schedules for the selected year and team. Only marked schedules are included โ€” use it to track fairness over time.

Overview tab

Month grid showing which months have a marked schedule. Aggregated table per employee: total work, rest, vacation, sick days, holidays worked, and per-shift counts across all months.

Per employee tab

Select an employee to see their month-by-month breakdown and a full-year calendar โ€” all 12 months at once, with each day colour-coded by shift type. Holiday days are highlighted with a ring.

10

Holidays

Define public holidays in the Holidays page. Holidays are year-specific โ€” a holiday defined for 2025 does not automatically carry over to 2026 (since Easter, for example, falls on different dates each year).

Global holidays

Defined once, shared across all teams. Click any day in the year calendar to toggle it as a holiday. Use the year selector to switch between years.

Team override

Each team can use the global list or define its own. Select the team from the dropdown, uncheck "Use global holidays" to enable a custom list, and edit as needed.

โ„น๏ธHolidays do not affect schedule generation โ€” they are purely for tracking. The Year Summary highlights days where an employee worked on a holiday, so you can monitor holiday workload distribution and compensate accordingly.
11

Comparing schedules

The Compare page lets you diff two schedules for the same month side by side โ€” useful for reviewing what changed between the original solver result and a manually edited version, or between two re-solves.

Select Schedule A from the left dropdown. Schedule B automatically filters to only show schedules from the same month and year. Changed cells show the old assignment on top (red border) and the new one below (green border). The ฮ” column shows the number of changed days per employee.

12

Tips & troubleshooting

Solver is too slow or times out

Reduce constraint complexity: loosen streak rules, use soft rest ranges instead of exact quotas, or reduce shift change penalties. The solver runs for 5 seconds โ€” "Best found" is still a valid schedule.

Schedule is infeasible

Start by checking: are shift minimums satisfiable with the available employees? Is the rest quota consistent with the number of working days? Try relaxing one constraint at a time until feasible.

Streaks look wrong

Check Previous days for each employee. A wrong previous-day value means the solver starts the month with an incorrect streak assumption. Use "Load previous days" to populate automatically from the prior marked schedule.

Getting consistent shifts

Use Shift preferences (+1) to nudge employees toward their preferred shift type. Combine with higher shift-change penalty weights to minimise unnecessary changes within a work block.

New month workflow

1. Mark last month's schedule โ˜…. 2. Go to Employees โ†’ click "Load previous days". 3. Use "Clear day fields" to reset vacation/sick/off days. 4. Enter new vacation/sick for the coming month. 5. Run.

Part-time employees

Use Allowed weekdays to restrict the days they can work. Set their rest quota to match: if they only work Monโ€“Fri, their rest days should account for the fact that weekends are always off.

Ready to automate your schedules?

Shifters is free during beta. No credit card required.