Self-rostering and optimization
Self-rostering is a workforce management approach where employees have a direct say in the shifts they work. It improves job satisfaction, reduces absenteeism, and gives employees a greater sense of autonomy over their working lives. For many organizations it is not just a scheduling preference but a meaningful part of how they attract and retain staff.
Automated schedule optimization approaches the same problem from a different angle: given a set of open shifts, constraints, and preferences, find the best possible assignment for every employee simultaneously. It excels at scale, at enforcing complex rules consistently, and at finding fair solutions across an entire team.
In practice, the two approaches are better together than either is alone. Self-rostering provides the employee input; optimization resolves conflicts and fills gaps. This guide explains how to combine them, where the common points of tension lie, and how to configure Timefold’s Employee Shift Scheduling model to support a hybrid approach where employees participate in building their own schedules while Timefold handles coverage, compliance, and fairness.
In this guide:
What is self-rostering?
Self-rostering (also called self-scheduling) is a workforce management approach where employees indicate or pre-select the shifts they want to work, rather than having a manager assign them. It’s most established in nurse rostering, where scheduling flexibility is directly linked to burnout and retention, but the pattern appears in any context where employees have some say over when they work.
Benefits of self-rostering
-
Employees work shifts that fit their personal lives and preferences better. Employees carry tacit knowledge that no database captures: a recurring appointment, a carpool arrangement, a personal preference for early starts. Self-rostering surfaces that knowledge and incorporates it into the schedule automatically.
-
Greater personal autonomy leads to higher job satisfaction and lower staff turnover. Research in healthcare scheduling contexts has found increases in job satisfaction of up to 60% compared to fully manager-driven scheduling (see case study).
-
Less administrative burden for schedule managers, as employees handle a large part of the initial selection.
Challenges of pure self-rostering
Self-rostering without any automated support creates its own problems:
-
Unpopular shifts (nights, weekends, public holidays) tend to remain unfilled, while popular slots attract more candidates than can be accommodated. Organizations often introduce points-based or priority systems to address this, rewarding employees who choose unpopular shifts.
-
The resulting schedule may be significantly suboptimal compared to one produced by an algorithm. It’s challenging for human planners to reason simultaneously over thousands of shifts, dozens of constraints, and the overlapping preferences of an entire team.
-
When employee preferences conflict, perceived fairness can collapse. Employees who get fewer of their preferred shifts may feel that others are being prioritized.
-
Coverage requirements, dependencies, pairing, and skill-mix constraints are hard to enforce manually when thousands of shifts are involved.
-
The paradox of choice: too many shifts to select from might cause decision fatigue, and selection quality drops.
-
Coordinating multiple rounds of selection and filling the gaps is slow and labor-intensive.
What is optimized rostering?
In optimized rostering, an algorithm defines the pool of open shifts, the constraints (legal rules, skill requirements, coverage targets), and optionally employee preferences. An optimizer then assigns employees to shifts to produce the best possible schedule across all objectives simultaneously.
Benefits of optimized rostering
-
Handles scale: the optimizer reasons simultaneously over thousands of shifts, dozens of constraints, and overlapping requirements that no human can hold in mind at once.
-
Guarantees coverage: the optimizer always satisfies hard constraints (minimum staffing levels, skill-mix requirements, legal rest periods).
-
Achieves fairness objectively: the optimizer distributes desirable and undesirable shifts equitably across the team without relying on a manager’s judgment.
-
Consistent quality: the optimizer produces equally good schedules every planning cycle, without the variation introduced by manual processes.
-
The more freedom the optimizer has, the larger the potential for improvement. This freedom comes from multiple sources: fewer hard constraints, fewer pinned shifts, and employees who can be assigned to a wider range of shifts.
Challenges of pure optimized rostering
-
Not all employee knowledge is captured in the model. Preferences that employees have never formally expressed (a recurring personal commitment, an informal carpool arrangement, a shift they always avoid for undocumented reasons) are invisible to the optimizer. The quality of the output is bounded by the quality of the input data.
-
The algorithm can feel opaque. When employees receive a schedule they didn’t choose, they may not understand or accept the reasoning behind it, even if the schedule is objectively fair and coverage-optimal. (Explainable AI can help build that trust by showing exactly why each assignment was made.)
-
Collecting and maintaining accurate data (availability windows, skill certifications, contract rules) requires ongoing administrative effort.
-
Employee preferences and personal circumstances change between planning cycles. A static model doesn’t adapt to these changes unless they are actively updated. (Real-time replanning can help respond to changes as they occur within an active planning period.)
The perceived conflict between self-rostering and automated scheduling
Many organizations treat self-rostering and automated scheduling as an either/or choice. The concern is that handing schedule decisions to an algorithm will undo the autonomy that self-rostering was meant to deliver. Conversely, allowing unconstrained employee choice is seen as incompatible with coverage guarantees and operational requirements.
This perception is understandable but incorrect. An optimizer shouldn’t be a replacement for employee input. A good optimizer is a tool that processes employee preferences and hard constraints simultaneously, and finds a schedule that honors both as much as possible. Self-rostering provides the employee input; optimization resolves conflicts and fills gaps.
The key is making it explicit to employees which of their self-rostered choices are guaranteed and which are treated as preferences. That transparency is what makes the hybrid model work.
How Timefold supports self-rostering
Combining self-rostering with optimization is fundamentally a multi-objective optimization problem. The schedule must simultaneously honor employee choices, meet legal constraints, achieve required coverage levels, respect skill-mix requirements, and distribute shifts fairly across the team.
The Timefold Employee Shift Scheduling model supports this hybrid approach through four complementary features:
| Feature | Purpose |
|---|---|
Locks a specific shift assignment so Timefold can’t change it. Used for guaranteed self-rostered choices. |
|
Expresses an employee’s preference for certain time windows without locking Timefold. Used when an employee wants to work certain days or times. |
|
Expresses a preference for which employee should be assigned to a specific shift, without locking Timefold. Used for non-guaranteed self-rostered selections on a known shift. |
|
Penalizes the solution for changing existing assignments. |
Finding the right balance between these mechanisms requires iterative experimentation. The Timefold Platform’s goal alignment tools help you run multiple configurations, compare output metrics, and converge on the settings that best match your organization’s priorities. See the case study for a concrete example of this process at scale.
Pinning: honoring a guaranteed choice
When an employee pre-selects a shift that is guaranteed to them, that shift should be pinned to that employee. Timefold treats that assignment as fixed and will not reassign a pinned shift under any circumstances. See Manual intervention for full configuration details, including the pinning API.
The optimizer then fills all remaining unpinned shifts while respecting legal rules, skill requirements, fairness constraints, and daily staffing goals.
Choosing a pinning percentage
Rather than pinning 100% of all pre-selected shifts (too rigid) or 0% (ignoring the selections entirely), most implementations commit to a defined percentage of each employee’s selected shifts as guaranteed.
The key principle is to spread pinned shifts evenly across employees. If you pin 30% of chosen shifts per employee, every employee gets the same proportion of guaranteed choices, which is more equitable than fully satisfying some employees at the expense of others.
|
Research with a healthcare staff scheduling platform (see Case study) found approximately 30% to be an effective balance: enough to give employees confidence in the self-rostering process, while leaving Timefold enough flexibility to achieve good coverage. |
Soft preferences: a flexible alternative to pinning
Not every self-rostered choice needs to be a hard guarantee.
Using preferredEmployees on a shift, Timefold will try to honor the employee’s choice but
can override it when necessary, for example to meet a coverage requirement or apply a skill-mix
constraint.
See Preferred employee
for full configuration details.
Similarly, employee preferred times allow an employee to express when they want to work without locking Timefold to any specific shift.
Optional vs. mandatory shifts
Shifts can be configured as optional or mandatory. In a self-rostering context where disruption constraints matter, configuring shifts as optional allows them to compete at the soft constraint level alongside disruption rules. This gives Timefold the flexibility to skip an assignment if assigning it would cause too much disruption. Mandatory shifts always override disruption constraints regardless of the tradeoff, which is too rigid in a self-rostering context.
Disruption protection for existing assignments
When Timefold solves a planning problem, any shifts already assigned in the input are treated as existing assignments. Those assignments can come from a previous optimization run, but also directly from self-rostering input: if employees have already selected their shifts and those are included in the submitted plan, Timefold can freely reassign them unless told otherwise. This is particularly damaging in a self-rostering context, where employees expect their choices to remain stable.
Disruption constraints
address this by penalizing Timefold for changing existing assignments.
Adding a disruptionWeight to an employee’s contract makes Timefold treat their current
assignments as valuable, and only change them when doing so produces a meaningfully better
schedule.
The disruptionWeight is a multiplier that controls how strongly Timefold penalizes changing
an existing assignment.
A higher value protects employees' assignments more strongly; a lower value gives Timefold
more freedom to improve the schedule.
See Manual intervention for full configuration details, including the disruption constraints API.
|
Research with a healthcare staff scheduling platform (see Case study) found that a significant disruption weight (for example, 250) works well as a starting point: high enough to protect self-rostered shifts, without being so high that Timefold can no longer make beneficial changes. The right value varies by context; test a few values across a representative sample of your scheduling units. |
|
For stronger protection, re-pin self-rostered shifts rather than relying solely on disruption constraints. Pinning protects assignments unconditionally; disruption constraints only make changes more costly. Which approach to use depends on whether you need Timefold to be able to override those assignments in extreme circumstances. |
Using Timefold to validate a self-rostered schedule
Timefold is not just an optimizer. Its score analysis tools can evaluate any schedule, including one assembled entirely through self-rostering, and report exactly which constraints it satisfies or violates.
This means Timefold can act as a validation backend even when no optimization is involved. After employees have selected their shifts, the resulting schedule can be submitted to Timefold to check whether it meets all hard constraints: minimum rest periods, maximum working hours, skill-mix requirements, and labor laws. Timefold surfaces any violations with a precise explanation of which rule was broken and by how much.
This is useful in two scenarios:
-
Before publishing: catch constraint violations in a self-rostered draft before it goes live, giving managers the information they need to intervene.
-
As an audit trail: demonstrate compliance with labor regulations by verifying every published schedule against the configured rule set.
Optimization can then be layered on top, or not. Validation alone is already a meaningful improvement over a purely manual process.
Case study: a healthcare staff scheduling platform
One of our Employee Shift Scheduling customers runs a SaaS platform for healthcare staff scheduling. They built their product on the premise that self-rostering and automated schedule optimization should work together. Their goal was to improve work-life balance for healthcare teams and eliminate unnecessary scheduling workflows.
The context
Their scheduling problem has several characteristics that make a purely manual or purely automated approach difficult:
-
Units are chronically understaffed. They rely on a mix of permanent staff, travel workers, and floating pool staff to fill shifts.
-
Staff pre-select their preferred shifts before scheduling begins. Some employees select more shifts than they can work; others select none.
-
Contracts guarantee that a defined percentage of an employee’s pre-selected shifts will be honored, a commitment that must be reflected in the algorithm.
-
Daily staffing goals should be met with a flat distribution across the 4-week planning period (for example, 50–60% staffed every day, rather than 100% staffed on one day and 10% staffed the next).
-
Weekends are chronically hard to staff because employees prefer weekday shifts.
The configuration challenge
The platform used all features described above: pinning for guaranteed self-rostered choices, employee soft preferences for non-guaranteed selections, and disruption constraints to protect existing assignments. The challenge wasn’t which features to use, but how to configure them together to get the best results.
The team faced a set of tuning questions that couldn’t be answered theoretically:
-
What percentage of pre-selected shifts should be pinned?
-
What disruption weight should be used?
-
Should optional or mandatory shift assignment be used?
-
Does pinning employees' chosen weekend shifts help with weekend coverage?
To answer these questions, they ran a systematic experiment across three representative scheduling units: two representing the extremes of their unit population and one representing a typical case. They ran 192 optimization runs per unit (576 total), varying shift optionality, disruption weight, pinning percentage, and whether chosen weekend shifts were pinned.
After analyzing these results, they expanded the experiment to all 30 scheduling units at 16 configurations each (1,056 optimization runs in total) to validate that the findings held across the full range of units. Each configuration was a distinct combination of shift optionality, disruption weight, and pinning percentage. The dataset comparison UI was used to evaluate the results across configurations.
Key findings
-
Optional shifts beat mandatory. With mandatory shifts, Timefold always fills them regardless of the disruption cost, which is too rigid for a self-rostering context. Optional shifts compete at the soft constraint level alongside disruption rules, allowing Timefold to skip an assignment when the disruption cost is too high.
-
A moderate disruption weight is optimal. The team initially expected that a very high disruption weight, strongly prioritizing employees' pre-selected choices, would produce the best outcomes. The data showed otherwise: a moderate weight (around 250 in this context) produces better overall schedules than extreme values. High weights prevent Timefold from making small improvements that would benefit the whole unit.
-
Pinning ~30% of shifts is the sweet spot. Pinning too many pre-selected shifts removes Timefold’s flexibility and degrades coverage. Pinning too few reduces employees' confidence in the self-rostering guarantee. Distributing the 30% evenly across all employees, rather than fully satisfying some at the expense of others, is important for perceived fairness.
-
Pinning chosen weekends makes the schedule worse. Counterintuitively, forcing employees' weekend pre-selections as hard constraints didn’t improve weekend coverage. Weekend understaffing is a structural problem: too few employees have contractual obligations that include weekends. No pinning strategy resolves a structural staffing gap. Timefold can’t assign employees who aren’t contractually available for weekends.
-
Higher disruption weight has limited impact on daily distribution. The anticipated trade-off between honoring self-rostered shifts and achieving a flat daily staffing distribution turned out to be much smaller than expected. Protecting employees' choices didn’t meaningfully worsen the daily distribution quality.
The platform proceeded to production with these settings, with plans to collect qualitative feedback from staff on each unit post-launch.
Best practices
-
Define the guarantee upfront. Decide what percentage of pre-selected shifts will be pinned (for example, 30%), and communicate this explicitly to employees before the selection window opens.
-
Spread pinned shifts evenly. Distribute pinned shifts proportionally across all employees rather than fully satisfying some at the expense of others. Uneven distribution creates a perception of unfairness that undermines the self-rostering model.
-
Use soft preferences for non-guaranteed selections. For pre-selected shifts that are not pinned, use
preferredEmployeeson the shift instead. Timefold will try to honor the preference but retains the flexibility to assign a different employee when needed. -
Configure shifts beyond minimum staffing as optional. Shifts that represent the absolute minimum required staffing should remain mandatory: Timefold must always fill them. Shifts beyond that minimum, added to reach ideal staffing levels, should be optional. Optional shifts compete at the soft constraint level alongside disruption rules, so Timefold can skip them when assigning would cause too much disruption to self-rostered choices. Making all shifts mandatory removes this flexibility entirely.
-
Use a moderate disruption weight. Set
disruptionWeightin the range of 100–500. Extreme values, either very low (ignores the self-rostered choices) or very high (freezes the schedule), produce worse results than a moderate setting. If you’re unsure, test a few values across a representative sample of your scheduling units. -
Don’t use pinning to solve structural staffing gaps. If a unit doesn’t have enough employees with contractual obligations that include weekends, pinning weekend pre-selections won’t improve weekend coverage. Structural staffing problems require workforce planning changes, not configuration tuning.
-
Use score analysis to explain outcomes to employees. When a pre-selected shift couldn’t be honored, use score analysis and explainable AI to show employees exactly why. Transparency about the trade-offs builds trust in the hybrid model.
-
Pin self-rostered shifts to protect them unconditionally. Disruption constraints make changes more costly, but don’t prevent them. If a self-rostered shift must not be moved under any circumstances, pin it. See Manual intervention.