Schedule Optimization Rules
Rollout in progress
The features described on this page are in the process of being rolled out and may not yet fully apply to all schedules. Schedules not yet using the new optimization rules will continue to operate using the legacy algorithm.On-Call Optimizer uses a set of configurable optimization rules to determine the best possible assignment for a schedule. Each rule represents a specific scheduling objective, and the relative importance of each rule can be adjusted to match the needs of your team.
Overview
When generating an assignment, On-Call Optimizer evaluates every possible combination of member-to-shift assignments and selects the combination that best satisfies all active rules. Determining what best means for each schedule requires resolving the inherent tensions between rules — for example, achieving perfect balance might require ignoring a member’s availability preferences — On-Call Optimizer uses the relative importance (weight) of each rule as the key input to define how these tensions are resolved.
The available optimization rules are:
| Rule | Purpose |
|---|---|
| Balance assignment load | Distribute shifts fairly across all members |
| Shift distribution | Control how shifts are spaced or grouped for each member |
| Respect availability information | Honor member preferences and blocked periods |
| Target hours in window | Limit working hours within rolling time periods |
Rules
Balance assignment load
The balance rule ensures that shifts are distributed fairly across all members of the schedule. It works by calculating a target value for each member which takes into account when they joined the schedule and any configured per-member shift allocation percentages.
The target for each member is tracked at both the shift type and overall levels, to prevent one member being assigned a disproportionate share of less desirable shifts while also keeping the overall share of shifts assigned in balance.
The balance rule penalizes assignments by summing, for each pair of members, the difference in how many shifts from their target each member is (e.g. two members who are both at their target will have a difference of zero, even when their targets differ). The higher the sum, the more imbalanced (distance from target) the members of the schedule are.
For more detail on how balance is calculated and displayed, see Schedule Balance.
Shift distribution
The shift distribution rule controls how each member’s shifts are spaced relative to one another within the schedule.
Distribution modes
Two distribution modes are available:
Spread — shifts are spaced as far apart as possible. This is the default mode and is ideal for teams where members benefit from recovery time between on-call shifts. When spread mode is active, On-Call Optimizer penalizes shifts that are closer together than the expected spacing for the schedule, with a higher penalty for truly consecutive shifts and a progressively lower penalty as the gap increases out to the expected spacing.
Consecutive — shifts are grouped together into blocks. This mode is useful for teams with short shifts (e.g. daily) to allow for assignment flexibility, but which still prefer to concentrate on-call duty into fewer, longer stretches rather than disconnected single days. When consecutive mode is active, On-Call Optimizer favors assigning adjacent shifts to the same member rather than spreading them across the team.
When the consecutive mode is active, a companion target hours rule is added to the schedule to provide an upper-bound on the length of consecutive assignments.
Per-member preferences
When enabled by the schedule administrator, individual members can override the schedule’s default distribution mode with their own preference. This allows a team to accommodate mixed preferences — for example, some members may prefer concentrated blocks of on-call duty while others prefer evenly spaced shifts.
Respect availability information
The availability rule ensures that On-Call Optimizer considers the availability information provided by each member when generating assignments.
Availability information is provided by members through their linked calendars and indicates periods where they are blocked (unavailable) or have a preference to be assigned.
Blocked periods
When a member marks a period as blocked, On-Call Optimizer applies a penalty to any assignment that would place them on-call during that time. The penalty for a block is large relative to the other rule penalties and bonuses to ensure blocked periods are respected as strongly as possible — a member will only be assigned to a blocked shift as a last resort when no other better assignment exists.
Preferred periods
When a member marks a period as preferred, On-Call Optimizer gives a small bonus to assignments that place that member on-call during the preferred time. Preferences are hints rather than requirements and the size of the bonus means they will be honored only when they don’t conflict with more important objectives like balance or blocked periods.
The strength of preference bonuses is also modulated by each member’s current assignments relative to their target. Members who are ahead of their target (assigned more shifts than expected) will have their preference bonuses reduced, while members behind their target will see them strengthened to prevent preferences from undermining balance over time.
Overlap weighting
The size of the penalty or bonus applied to the assignment for each piece of availability information that overlaps with a shift assigned to a member is weighted according to the proportion of the shift that is overlapped.
Target hours in window
The target hours in window rule limits the total on-call hours a member can be assigned within a rolling time period. In addition to providing an upper bound for the consecutive distribution mode, this rule can also be useful for enforcing workload policies, supporting legal requirements around maximum working hours, or managing cross-timezone schedules where different team members have different workload constraints.
The rule is configured with two parameters:
- Target hours — the maximum number of hours on-call desired within each window (e.g. 40 hours).
- Window size — the rolling time period over which hours are counted (e.g. 168 hours for a 7-day window).
When a potential assignment would cause a member to exceed the target hours within any rolling window, the optimizer applies a penalty proportional to the excess. This is a soft constraint — On-Call Optimizer will avoid exceeding the target but may do so if no better alternative exists.
Rule Weights
Each rule carries a weight that determines its relative importance during optimization in order to resolve the natural tension that arises between rules when evaluating each assignment — for example, perfectly balanced shifts might require ignoring a member’s availability preferences — the weighting of each rule allows each schedule administrator to independently configure how these tensions are resolved for that schedule, and therefore control which assignments On-Call Optimizer considers best.
Weights are relative, not absolute. What matters is the ratio between weights, not their individual values. Doubling one rule’s weight has the same effect as halving every other rule’s weight: it makes that rule comparatively more important.
Terminology
The implementation of each rule assigns a cost to each relevant situation it encounters when evaluating a potential assignment — for example, an imbalanced shift distribution, a closely-spaced pair of shifts, or a member assigned during a blocked period.
Costs typically reflect undesirable situations and are usally referred to as penalties. However in certain cases costs are implemented with negative values to represent bonuses to encourage the selection of assignments with desirable traits (e.g. a member assigned to a shift they preferred).
The overall penalty for an assignment is the sum of all individual costs, and On-Call Optimizer selects the assignment with the lowest total penalty.
Each type of cost has a base value that reflects its inherent severity. The base values establish a priority ordering between different costs within and across rules that applies even when all rule weights are equal. For example, assigning a member to a blocked period carries a much higher base cost than assigning them to a shift that is slightly closer together than ideal. This means that when all rule weights are equal On-Call Optimizer exhibits opinonated behavior of fairly distributing shifts, while strongly avoiding blocked periods and honouring preferences when possible.
Rule weights act as a multiplier on top of these base costs. Increasing a rule’s weight amplifies all of its costs proportionally, shifting On-Call Optimizer’s attention towards that rule’s objectives relative to others.
Priority presets
Priority presets provide pre-configured weightings that resolve the most common tensions between rules in ways that suit different scheduling philosophies. Presets can be selected from the assignment priority setting on each schedule and offer the recommended way to configure rule weights without needing to adjust individual values.
When a preset is selected, the weights for all rules are set to the values defined by the preset. The active preset is shown in the assignment priority selector and will display Custom if the current weights do not match any available preset.
The following presets are available:
Default — all rules are weighted equally. This provides an even weighting across balance, shift distribution and availability preferences, and is a good starting point for most schedules.
Balance focused — increases the weighting of the balance rule relative to other rules. This is suited to schedules where fair distribution of shifts is the primary concern, and On-Call Optimizer should prioritize minimizing the gap between members even when that means placing a member on-call during a less preferred time or with less ideal shift spacing.
Preference focused — increases the weighting of the availability preference rule relative to other rules. This is suited to schedules where respecting member availability is the primary concern, and On-Call Optimizer should prioritize honoring blocked periods and preferences even at the cost of some temporary imbalance between members.
Distribution focused — emphasizes meeting shift distribution preferences across time for each member. This is suited to schedules where spacing or grouping the shifts for a member based on the schedule and/or their personal preferences is the primary concern.
Custom weights
When the presets do not match your requirements, selecting the Custom option in the assignment priority settings reveals individual sliders for each rule, allowing you to set the relative weighting of each one directly.
Weights use a scale from 0 to 10:
- 0 — the rule is ignored entirely. On-Call Optimizer will not consider this objective at all.
- 1 — the default importance. The rule participates in optimization at its baseline level.
- 2 to 10 — increasing importance. Higher values cause On-Call Optimizer to prioritize this rule more strongly relative to others.
Per-assignment customization
When creating a custom assignment, the priority weights can be adjusted for that specific assignment without changing the schedule’s default settings. This is useful for one-off situations, such as generating an assignment during a period with unusual availability constraints.
In all cases, On-Call Optimizer finds the assignment that achieves the best overall result across all active rules given their configured weights.
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.