Include/Exclude certain dates from OnCall Schedules (for national holidays and vacations)

As an international team, we use multiple on-call schedules (per person) to manage our services and guarantee 24/7 coverage. Due to the way schedules and escalation policies work with PagerDuty, every user is part of multiple schedules.

For Example, “Joe” might have the following schedules:

  • Joe Workdays 09:00 - 18:00 (UTC)
  • Team X OnCall Night Shift (18:00 - 09:00 (UTC))
  • Team X OnCall Weekend Shift

Let’s say there is a national holiday where Joe lives and in that case, he should be off call and the on-call engineer in “Team X OnCall Weekend Shift” should take over the shift on that day. Overwrites alone are a bad and overly complicated solution to that problem, which has been stated for years in this forum. The same is true for vacation planning, which could be much easier.

I suggest the introduction of lists to define certain dates and/or time ranges. These lists include a list of times and dates which should be included or excluded in on-call schedules. As an example, here is how a list of national holidays could look like:

List Name - National Holidays:

  • 1 Jan 09:00 - 18:00 (UTC)
  • 6 Jan 09:00 - 18:00 (UTC)
  • 8 Mar 09:00 - 18:00 (UTC)
  • 7 Apr 09:00 - 18:00 (UTC)
  • 9 Apr 09:00 - 18:00 (UTC)
  • 10 Apr 09:00 - 18:00 (UTC)

Joe could then add the list with “Exclude times on the list from the schedule” to his “Joe Workdays 09:00 - 18:00 (UTC)” schedule to ensure he doesn’t get called on a national holiday. In order for these days not to go un-covered, he could add the list with “Include times on the list in the schedule” to “Team X OnCall Weekend Shift”.

The same would work for vacations where Joe could just define his vacation dates in a time list like this and then exclude it from his schedule and include into another schedule for coverage:

List Name - Joe Vacations:

  • 1 Feb 09:00 (UTC) - 7 Feb 18:00 (UTC)
  • 15 Jul 09:00 (UTC) - 1 Aug 18:00 (UTC)

Another advantage of this approach is that you just need to define the include/exclude feature for every on-call policy and list once and then you just need to update the list if something changes.

This is just one possible solution to this issue. Any solution would be much appreciated. From reading through the forum I am certain that a lot of your users have this problem and the lack of this feature causes a lot of pain. Please just bring us this feature ASAP!


Hi Florian,
I think I have a solution to the scenario you describe, although not exactly the same solution design you suggest. I experienced the same kind of oncall scheduling problems for years. So I built a product to do oncall scheduling in the best fair/predictable/give-everybody-control way I could come up with. Check out I’d love your feedback if you think there’s a scenario it doesn’t cover.
For your situation of doing follow-the-sun day/night split shifts during the week, but to have joint 24hr coverage of weekends, the way to set that up with Oncall Scheduler, is that you would create 3 rotations (/teams):

  1. Rotation for UTC day-time including all the people in time zones appropriate for that. This rotation might just have 1 weekly shift 9:00 Monday-18:00 Friday.
  2. Rotation for UTC night-time including all the people in time zones appropriate for that. This rotation might just have 1 weekly shift 18:00 Sunday-9:00 Friday (expressed in UTC times).
    3 Rotation including everybody across both UTC-day-time and UTC-night-time time zones.
    For each of these rotations, the oncall engineers would enter preferences about which holidays/birthdays/vacations/… they don’t want to work. They can also self-select specific shifts that they do want to work. There’s a credit balance system which ends up giving people more credits when they work shifts which other people have entered preferences to avoid. That has the end result that someone who works a shift that other people want to avoid, ends up working slightly fewer shifts in total. It has more features. E.g. block-periods admins can enter when someone is on parental/military/health leave. E.g. An auction system to fill shifts that unexpectedly opened up when someone left the team. etc. I’d love your feedback if you think there’s something missing from it.

Hello all,

In our case we use service orchestration and terraform to mute alerts happening on national holidays. As we provide service around the glob, not all services use the same holiday schedule.

to be honest, I would love a solution where I can set all holidays in one place and attribute tags to them. Then add tags on services to dynamically match holidays with services.

Tags are very powerful but pagerduty does not do anything serious with them :slightly_frowning_face: