How it works

Everything ScheduleWright knows, in plain English.

The home page makes the case. This page is the manual: how you start, every rule the app can enforce or weigh, what your team sees, and what the algorithm does and does not promise.

Getting startedThe three partsAbsolute vs weightedThe rulesWhat employees seeBuilding a monthA worked exampleWhat it promisesTerms

Getting started from the schedule you already have

You do not set ScheduleWright up from a blank form. You bring what you have.

  1. Drop in your old schedules. A photo or screenshot, an Excel workbook (one tab per month is fine), a CSV, or a PDF; up to a year at a time. The app reads them and shows Here is what I read: shifts, people, and every day's assignments as an editable table, with anything it was unsure of marked in amber beside your original.
  2. Answer what the sheet cannot say. Shift hours are never printed; a highlighted row might be a holiday; a name in capitals might mean something. The app asks one question at a time, and asks about any cell it read below 70% confidence. You can also ask it to check every cell.
  3. Apply. The app creates your schedule: shifts with hours, people with the shifts they appeared on and a baseline from their monthly counts, holidays, and every scanned month loaded as history so fairness tallies start with real numbers.
  4. Adopt the rules you already follow. The import report lists the patterns in your months (sequences that never happen, doubles, block lengths, weekend counts, per diem use), how many months support each, and offers each as a rule in the app's own terms. Patterns seen in every month are proposed as absolute, patterns with one exception as weighted. Nothing changes until you click Adopt.
  5. Or just talk. Set up by interview asks how you schedule, by voice or by typing, starting from what your sheets suggest, and turns each answer into a proposed setting shown as a before-and-after. You apply the ones you agree with. It works just as well later, when a rule changes.
Files and images are read and discarded. The app keeps only what you apply. The one thing no sheet carries is shift hours, so expect that question the first time.

The three parts

Scheduling is a three-sided job. The scheduler sets the organization's rules and decides how much each counts. Each employee enters what matters to them on their own page. The algorithm finds the schedule that best balances all of it, inside the framework the scheduler set. Employee participation never means the scheduler gives up control: preferences are weighed within the rules, not instead of them.

Absolute versus weighted

Every rule is one of two kinds. An absolute rule can never be broken; a schedule that breaks one is not a schedule with a problem, it is rejected. A weighted rule carries a number of points per violation. The algorithm adds up the points of every violation in a candidate schedule and keeps looking for one with fewer. A higher weight means the schedule fights harder for that rule, so weights only matter relative to each other: a rule at 30 will be protected over a rule at 4 when the two collide, and it will give way to one at 60.

Most rules start weighted with a sensible default, and the ones that can be made absolute say so. The useful habit after a build is to read the ledger: every violation with its rule and points, largest first. If the largest entry looks wrong, that is a weight to change, not a cell to fix by hand.

The rules

Grouped as they appear in the app. This list is generated from the app's own rule registry, so it is always the real one.

Coverage

What must be true for a roster to be valid at all.

Every spot filled absolute
Every spot on every staffed shift must have a person. This can never be turned off; a schedule with an empty spot is not a schedule.
Only eligible people on a shift absolute
Each employee has a list of shifts they may work and weekdays they are available (Employees). The schedule never puts someone where they are not eligible.
Per diems only on their available dates absolute
Per diems give the dates they can work each month. They are never scheduled outside those dates.
Only active employees absolute
People with an active-from or active-until date are only scheduled between those dates.

Rest & sequence

How shifts may follow one another for one person.

Forbidden sequences default weight 100 per violation, absolute by default, can be made absolute
Shift-to-shift sequences you have forbidden in step 5, such as a night shift followed directly by a day shift. Absolute by default.
Minimum rest between shifts default weight 60 per violation, absolute by default, can be made absolute
The minimum hours between the end of one shift and the start of the next for the same person. Set the hours in step 5.
Maximum consecutive hours default weight 60 per violation, absolute by default, can be made absolute
The most hours one person may work in a row when shifts are back-to-back. Set in step 5.
Two shifts back-to-back (e.g. day then night) default weight 0 per occurrence
Two shifts back-to-back with no gap, such as day then night. At weight 0 this is allowed freely; raise it to discourage doubles.

Workload & fairness

How many shifts each person gets, and how extras are shared.

Regulars reach their baseline default weight 50 per missing shift, can be made absolute
Each regular should receive at least their minimum shifts for the month. The weight is paid per missing shift, so it stays important even when a few people are short.
Stay under soft maximum default weight 20 per shift over
For employees with a soft maximum set under Employees. Paid per shift over the maximum.
Extras shared evenly among regulars default weight 5 per squared spread
Shifts beyond baselines should be shared evenly among regulars who take extras. Paid on the spread, so one person with all the extras costs much more than a small imbalance.
Weekday shifts proportional to baseline default weight 3 per squared spread
Weekday shifts should be distributed in proportion to baselines, so nobody ends up with all the weekdays or all the weekends.
Per diems only take leftover spots default weight 40 per shift over, can be made absolute
Per diems only fill the spots left after regulars’ baselines are placed, per shift type in scope. Stops a per diem from displacing a regular.
Full-timers cover a short per diem pool default weight 10 per shortfall
When per diems cannot cover the leftover spots, regulars each take a small number of extra shifts, most senior first.

Blocks

Runs of consecutive shifts — how long, how many.

Blocks of the right length default weight 4 per shift outside range
A block is a run of consecutive days on one shift type. Set the target length per shift; paid per day outside the range, so a block one day too long costs one weight.
Limit blocks per month default weight 8 per block over
At most this many blocks of each shift type per person in the month. Keeps people from being scattered across many short runs.
Double shift only at the end of a block default weight 3 per occurrence
When a double shift happens, prefer it at the end of a block rather than in the middle.
One block flowing straight into another default weight 0 per occurrence
A block of one shift type flowing straight into a block of another, such as five days then three nights with no gap. Leave at 0 to allow.

Requests & preferences

What people asked for, and who wins when they collide.

Requested days off honored default weight 30 per shift on a requested day, can be made absolute
Days employees asked to have off. A nice-to-have request costs this weight per shift placed on it; a must-have costs this weight times the multiplier. Requested days off can also be made absolute.
Weight preferences by seniority switch
Multiplies every preference penalty by a factor from each person’s rank, so senior people’s requests carry more. Off by default; when on, a rank field appears next to each name under Employees and the multiplier is shown beside it.
Weekend nights to people who opt in default weight 8 per night
A bonus for placing weekend nights with people who opted in for the month. Nobody can mark weekend nights as unwanted; they only opt in.
Double shifts to people who opt in default weight 6 per double
A bonus for giving double shifts to people who said they are OK with doubles this month.
Standing preferences default weight 4 per shift × strength
Standing preferences each person enters on their own page: a weekday or shift type to prefer or avoid, rated mild, moderate, or strong (×1, ×2, ×3). Only the first few count, as set here.

People together / apart

Who should share a shift or a day, and who should not.

Pairings list
People who should work the same shift or day together, or should be kept apart. Each pairing has its own weight or can be absolute.

Fairness over time

Balances that are remembered across months.

Holidays weighted by the people who work them default weight 10 per holiday point
Each employee spreads a fixed budget of points across the year’s holidays on their own page; marking a holiday “happy to work” is allowed. Working a holiday costs that person’s points for it, and points carried since January are balanced across the team.
Weekend shifts spread evenly default weight 5 per squared spread
Weekend shifts should be spread evenly among regulars, in proportion to baselines.

What employees see and enter

Anyone whose email is on a roster signs in with a link to their own page, which has three parts.

A note the app shows every employee, because it is true: if everything is marked must-have, nothing is. Honest weighting gets people more of what they care about, not less.

Building a month

  1. Pick the month. Set a due date for requests and, if you like, email everyone that requests are open.
  2. Review what people entered. Adjust the strength of any request, or approve them all in one click.
  3. Build. The algorithm runs for a minute or so and shows the roster, the ledger, and per-person totals. Build 3 options shows three different schedules side by side with their trade-offs, and you pick one.
  4. Pin anything you want decided by hand, then Refine: the algorithm fills in around your pins.
  5. Publish, with or without an email to everyone. Employees see their own shifts and the full month on their page.

A worked example

Six intensivists cover a unit with one day shift and one night shift, every day. Three of the trade-offs the algorithm had to make in one October:

Ellis works the Monday she asked to avoid.
Her preference is moderate (weight 4 per shift). The only person free that Monday had requested the day off (weight 30). The schedule took the cheaper violation and the ledger says so: "Ellis: Monday (avoids, moderate) — 4 points".
Alvarez gets three weekend nights in a row.
He opted in to weekend nights, which earns a small bonus each time; block length for nights is set to 3–4, so three in a row costs nothing. The weekend-fairness rule was slightly worse off (5 points per unit of spread), but the alternative broke a block in two.
Nobody works a day shift after a night.
That sequence is absolute for this group. The algorithm never considered a schedule containing it, so it appears nowhere in the ledger: absolute rules are not traded, they are the walls of the room.

What the algorithm does and does not promise

It promises a schedule that breaks no absolute rule, and among those, one with a low total penalty: not provably the lowest, since the search is heuristic and time-limited, but a good one, and better with more effort. It promises to show its work: every violation, its reason, and its cost, in the ledger. It promises that the weights you set are the weights it used.

It does not promise everyone gets what they asked for. When preferences collide, someone gives way, and the weights decide who. It does not know things you have not told it: a rule your group follows without ever writing down is invisible until you adopt it from a scan or say it in the interview. And it does not change a published schedule on its own.

Terms

Weight
How many penalty points the schedule pays each time it goes against this rule. Weights are relative: 30 vs 4 means the first matters about seven times more. There is no right absolute number.
Absolute
A rule the schedule may never break. If no arrangement satisfies every absolute rule, the build reports a broken hard rule instead of quietly bending one.
Penalty score
The total points a schedule pays for every rule it goes against. Build searches for the schedule with the lowest total; a lower number is better, and zero means every enabled rule was satisfied.
Ledger
The list of every penalty in the current schedule: which rule, who it concerns, and how many points. Sorted largest first so the biggest compromises are at the top.
Spot
One place on one shift on one day. A shift that needs two people on Saturday has two spots that Saturday.
Baseline
The minimum number of shifts a regular employee should receive in the month. Extras are shifts beyond it.
Extras
Shifts assigned beyond a person’s baseline. The “extras shared evenly” rule spreads them; the metrics view tallies them over time.
Block
A run of consecutive days on the same shift type. Block rules set the target length and how many blocks a month.
Must have
A day-off request the employee marked as essential. It costs the schedule the day-off weight times the must-have multiplier. Each person has a monthly budget of these, set in Setup.
Nice to have
A day-off request the employee would like honored but can live without. It costs the schedule the plain day-off weight.
Pin
Fix a person to a spot by hand. The build works around pinned spots and never changes them. Unpin to let it choose again.
Per diem
Someone with no baseline who offers specific dates each month and a maximum number of shifts. They fill spots regulars’ baselines leave open.
Join the BetaBack to the home page