Holiday on-call schedule: share public holidays fairly
Public holidays are where an on-call rota creates the most resentment: the same person ends up covering Christmas two years running, or the team learns in December who has the 25th. A holiday schedule needs the rules written down before the calendar fills up.
Six rules for holiday cover
- Treat each holiday as its own shift. Keep a short list for the year (for example New Year, Easter, 25 December) and assign each one separately from the normal weekly order.
- Rotate the worst ones. Whoever covered the biggest holiday last year does not cover it this year. Write the history in the same sheet as the rota.
- Ask for swaps early. People trade holidays happily when they have weeks of notice; they refuse at two days' notice.
- Respect local holidays. A team in several countries has different dates. Assign each person the holidays they work, not the ones that fall on someone else's day off.
- Publish the full year in January, so plans for the holidays are made around the rota and not the other way round.
- Agree compensation separately. Extra pay or days off for holiday cover depend on your country and contract; check with HR, this page gives no advice on it.
A small example
| Holiday | This year | Next year |
|---|---|---|
| New Year | Dana | Lee |
| Easter | Lee | Sam |
| 25 December | Sam | Priya |
Each holiday moves one place down the order every year, so everyone gets the best and the worst one in turn.
Build the normal rota first
Our free rotation schedule generator fills the year from your names, as a table, Slack text, calendar file (.ics) or Excel-ready CSV. Make the weekly order there, then overwrite the holiday weeks by hand using the list above.
Use Skip when someone is away
In Dutyroll the weekly rotation posts who is on call and who is next, with Skip and Swap with next buttons. When the person due on a holiday week asks to be excused, one click on Skip moves the turn to the next person and everyone sees it in the channel:
[Skip] [Swap with next]
Dutyroll does not know your public holiday calendar: it follows the order and your clicks, so the holiday list stays yours to keep.
Add to Slack Free for one rotation. Pro is $9/month per workspace.
Next, Slack asks you to sign in to your workspace, then shows Dutyroll's 4 permissions before you press Allow: add the /dutyroll command, post messages, post in public channels without an invite, and see the member list (names, time zones). Dutyroll never reads messages. Not in the Slack Marketplace yet: Slack lists apps only after 10 workspaces use them. Free plan: 1 rotation, no card.
Set it up in two minutes
- Add Dutyroll to Slack (the workspace admin may need to approve it).
- In the channel where the hand-over should appear, type
/dutyroll new. - Fill in the form: the duty's name, the people in order, the channel, weekly (pick the day), every weekday, every 2 weeks or monthly (pick the day of the month or the last Friday, say), and the time. The time is in your Slack time zone.
- Dutyroll posts an announcement now, and the hand-over at the time you chose: who is on duty and who is next, with Skip and Swap with next buttons.
What Dutyroll does not do
- It does not page or call anyone and has no escalation; it posts a message in a channel. If you need phone or SMS alerts, use a paging tool and keep Dutyroll (or not) for the visible weekly hand-over.
- It does not sync with PagerDuty, Opsgenie or calendars (it can publish the rota as a read-only calendar link, see
/dutyroll calendar), and does not update a Slack user group (@oncall) yet. - Cadences are weekly (one day), every weekday (Mon-Fri), every 2 weeks or monthly (a day of the month, or the last Friday, say, of it). No custom shift lengths. Away dates are entered in Dutyroll (Mark away, and the hand-over skips that person); there is no sync of away dates from a calendar or HR tool.
- It is new (October 2026) and not yet in the Slack Marketplace; you install it from this site.
Related: weekend on-call schedule · on-call rotation in Slack · 12-month on-call schedule template
More guides
- On-call rotation in Slack
- Standup host rotation in Slack
- Support and bug triage rotation in Slack
- Slack rotation app pricing: per workspace vs per user
- Rotating a name with Slack Workflow Builder (and what to use instead)
- Round robin in Slack: a scheduled round-robin app
- Slack rotation apps compared: Pagerly, Rotation App, RosterBird, Dutyroll
- A duty roster in Slack
- Weekly rotation schedule template for a team
- On-call rotation calendar: Google, Outlook, Apple
- Weekend on-call schedule: a fair rotation
- Holiday on-call schedule: fair cover
- On-call handoff template: what to write
- On-call swap request: template and rules
- PagerDuty alternative for a Slack on-call rota