jacks
Guide · Call scheduling

How to build a fair residency call schedule

The rules every schedule has to respect, what “fair” means in numbers, and why the spreadsheet starts fighting you around week six.

Jackson Cantrell · October 2026 · 8 min read
FriPM
SatAM
SatPM
SunAM
Site A
MK1
JR2
AL1
TB3
Site B
SP2
EW3
CN2
MK1
Backup
DH4
RO3
DH4
LG4

Call schedules usually land on a chief resident, on top of a full clinical load. The first draft is not the hard part. The hard part is that every rule touches every other rule: one vacation request moves a weekend, which breaks someone’s rest, which pushes a PGY-1 onto a night with no senior backup. Then a swap request arrives and you start over.

Here is the process that holds up across a whole year, whether you build it by hand or with software.

1. Write the hard rules down first

A hard rule is one the schedule can never break without someone signing off. Put them on one page before you place a single name. Most programs have two layers.

ACGME limits

The ACGME Common Program Requirements set the floor for every program:

Your specialty’s Review Committee can tighten these, so check your program requirements too. The full text is on acgme.org.

Your program’s rules

These are the rules that make your schedule yours, and they cause most of the conflicts:

A rule you can check by looking

“No AM shift the morning after a PM shift.” Same weekend, two drafts.

Draft A No rest after PM
FriPM
SatAM
Site A
MK1
JR2
Site B
SP2
MK1
Draft B Every rule checked
FriPM
SatAM
Site A
MK1
JR2
Site B
SP2
AL1
TipWrite each rule as a sentence a co-chief could check by looking at the schedule. “No AM shift the morning after a PM shift” can be checked. “Be reasonable about rest” can’t.

2. Collect time off before you start

Every request you take after the draft is a rebuild. Open one window for vacation, conferences, boards and life events, close it, then build. Decide up front what happens to requests that arrive late: they go on a waitlist, or they need a swap partner. Then everyone knows the answer before they ask.

3. Decide what fair means, in numbers

“Fair” causes more arguments than any rule, because everyone keeps a different count. Pick the counts you will track and publish them:

Fair is a count against a target, per class

Example: one PGY-3 class, weekends worked this year, against a target of 12 (dashed line).

Every total is close to average. But NF worked six more weekends than LM, and that’s the gap residents talk about. It usually grows from small choices made one month at a time.

4. Build the year, not the month

Fairness is a yearly count, but most schedules are built a month at a time. Each month looks even on its own, and the year still drifts: the same people catch the long weekends, or one class quietly carries more backup. Build the whole year as one draft, publish it in blocks, and when you fix next month, look at the year-to-date counts first.

5. Check every rule after every change

The first draft is not where rules get broken. They get broken in March, on the fourth swap. Each change can break a rule two days away: a Friday PM swap can land someone on a Saturday AM with no rest. After any edit, recheck the whole schedule, not just the two cells that moved.

6. Plan for call-outs before they happen

Someone will get sick on a holiday weekend. Decide now who covers: a jeopardy or backup pool, an order of who gets asked, and whether coverage counts toward their totals. Then a call-out is a two-minute decision and not a group text at 5 a.m.

Why the spreadsheet starts fighting you

A spreadsheet is a fine place to record a schedule. It is a hard place to build one, for three reasons:

What a schedule generator should do for you

Tempted to ask a chatbot instead? We tested that on a real program’s year.

This is the problem we built jacks to solve. Whatever tool you use, hold it to this list:

  1. It builds the whole draft from your rules, and the result checks every rule.
  2. It hits your fairness targets per class and shows the counts to everyone.
  3. When something can’t be staffed, it tells you exactly which rule is in the way and lets you decide.
  4. It lets you change anything by hand, then rechecks the whole schedule.
  5. It keeps published weeks fixed when it rebuilds the rest.