This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Docs

On-Call Optimizer enables teams to operate effective, flexible on-call rotations that deliver growth in expertise throughout the team.

The foundation is hassle-free creation of a flexible on-call schedule that fits on-call shifts around the other commitments in each team members life.

1 - Overview

On-Call Optimizer delivers hassle-free, flexible on-call schedules for your team.

Flexible on-call schedules provide the foundation for on-call to become a practice that delivers growth in expertise.

How does it work?

Each member of the on-call schedule links their calendar. On-Call Optimizer parses availability information that describes blocks (time periods when they cannot be on-call) and preferences (time periods when they would like to be on-call).

On-Call Optimizer combines the availability information for each member with the shifts configured for the schedule and uses advanced constraint optimizing algorithms to generate an assignment of shifts that fits around the constraints in each member’s life, while honouring as many of the requested preferences as feasible.

The on-call schedule is then exported to any external systems (e.g. PagerDuty) or calendars for further use.

Benefits

Compared to the typical round-robin scheduling used by other on-call tools, On-Call Optimizer’s flexible scheduling creates the foundation for on-call work to be performed in the optimium environment, ensuring that the schedule has the minimum possible impact on the life of each team member. In addition to the flexibility benefits, On-Call Optimizer also provides:

  • Simplicity: Team members maintain their availability for on-call in the same single location (their calendar) where they already manage the rest of their time.

  • Straightforward swaps: Automated shift assignment simplifies swap management and removes the need for 1:1 swaps. Any imbalance in on-call burden across the team will be automatically addressed in the next assignment.

Getting started

Experience the benefits of On-Call Optimizer by following one of the getting started guides:

2 - Getting Started

Use these simple guides to quickly get underway with the most common tasks On-Call Optimizer solves.

Prerequisites

  • On-Call Optimizer is a SaaS application designed to work with any modern web browser. Off-line access is not supported.

  • For the best experience it is strongly recommended to integrate On-Call Optimizer with both an on-call product (e.g. PagerDuty) for each schedule and a calendar provider (e.g. Google) for each member

Authentication

All users are required to login via OIDC using one of the following identity providers. Username and password based login is not supported.

  • Google
  • Microsoft

Additional OIDC providers can be supported upon request.

Common Use-Cases

To begin experiencing the benefits of On-Call Optimizer start with one of these commonly used guides:

Alternatively, jump straight in by creating a new schedule from scratch.

What’s next

Learn more about the key concepts and operation of an On-Call Optimizer maintained on-call schedule.

2.1 - Link an existing schedule

This guide is for schedule owners who wish to link an existing schedule from an external product with On-Call Optimizer.

Before you start

  1. Choose an existing on-call rotation that you wish to begin scheduling with On-Call Optimzer.
  2. Check the product from which you wish to link your existing schedule is supported by On-Call Optimizer.
  3. Ensure you have the necessary permissions in your on-call product to establish an API connection with On-Call Optimizer.

Intended results

Completing the steps in this guide will result in:

  1. Creation of a new On-Call Optimizer schedule linked to your existing schedule.
  2. Configuration of the new On-Call Optimizer schedule to begin assigning new shifts from a future date.
  3. (optionally) Each member of the schedule will be invited to share their calendar(s) with On-Call Optimizer.
  4. (optionally) Future shifts assigned by On-Call Optimizer will be automatically exported back to your existing schedule.

If you do not opt-in to send invitations or enable automatic shift export linking an existing schedule to On-Call Optimizer will not affect the operation of your existing schedule in any way.

Begin

To get started, select Connect an On-Call Product below.

2.1.1 - Connect an On-Call Product

In this step we will establish a connection between On-Call Optimizer and the On-Call Product you are currently using to manage the on-call schedule you have chosen to link with On-Call Optimizer.

1. Login to On-Call Optimizer

If you have not already logged-in to On-Call Optimizer visit https://app.oncall-optimizer.com/login and complete the login process now.

2. Navigate to the New On-Call Product Connection page

  1. Select Schedules from the main menu (on the left on desktop, or above on mobile/tablet)
  2. From the Schedules page, select Create New Connection at the bottom of the page.

After following these steps you should be at https://app.oncall-optimizer.com/irm_connections/new and be able to see the logo of the existing on-call product you are using on screen.

3. Select your product and configure authentication

  1. Click on the logo of the product you wish to connect to.
  2. Enter your API Key in the provided field and click Continue

Screencast

Next Steps

Once you have configured an API key, On-Call Optimizer will begin the process of connecting to the chosen product and collecting details of the available schedules. This may take a couple of minutes during which you will see a loading spinner.

Click below to begin reading the next steps while the connection is created.

Continue with: Selecting a schedule to link

2.1.2 - Select a schedule to link

In this step you will select which of the schedules available in the On-Call Product you connected to should be linked with On-Call Optimizer.

Use the drop-down arrow within each schedule to expand the list of members and see the shift times for the schedule inferred from the existing configuration.

Create On-Call Optimizer Schedule

Once you have identified which of the listed schedules you wish to continue linking, click the Create On-Call Optimizer Schedule link (on the right of the box on desktop, or the bottom on mobile/tablet).

Next Steps

When you click the create link, a new draft schedule linked to the existing schedule from your On-Call Product will be created within On-Call Optimizer. In the next step you will have the opportunity to configure and customize the new schedule before confirming the link.

Continue with: Configure the linked schedule

2.1.3 - Configure the linked schedule

In these steps you have the opportunity to customize and then confirm the configuration of the schedule that On-Call Optimizer will use.

Confirm configuration

On-Call Optimizer will show the time zone and shift configuration that have been detected from the source On-Call Product.

If the listed shifts do not match your desired configuration you can alter them now or at a lateer time. Refer to the detailed schedule configuration docs for further details.

Once you are happy with the configuration shown, click Continue to proceed to the next step.

Member list

In the second step, On-Call Optimizer will show the list of members that have been imported from the source On-Call Product.

On this screen you can customize which of the member will be assignable in the schedule, their role and associated permissions and whether or not to send any required invitation emails when the schedule is created. Refer to the schedule members docs for further details.

When you are happy with the list of members and their configuration, click Create to finish linking the schedule. If required and enabled, On-Call Optimizer will send any invitations to the members of the schedule and begin monitoring the assignments, ready to assign new shifts as required.

Congratulations. You have successfully imported your existing schedule into On-Call Optimizer!

To get the most out of On-Call Optimizer, we recommend continuing with the following documentation topics:

2.2 - Share your calendar

This guide is for members of an on-call schedule who have received an email invitation to share their calendar.

Before you start

  1. Locate the invitation email you received from the owner of your On-Call Schedule
    • The invitation email will have a sender of help@oncall-optimizer.com
    • The invitiation email will have a subject of Invitation from Owner Name, where Owner Name is the owner of your schedule.
  2. Check the Calendar product that you use is supported by On-Call Optimizer.

Intended results

Completing the steps in this guide will result in:

  1. Confirmation of your membership in the schedule you have been invited to join.
  2. One or more of your calendars configured to provide availability information for On-Call Optimizer to use when scheduling your on-call shifts.

Begin

To get started, select Accept the invitation below.

2.2.1 - Accept the invitation

In this step you will accept the invitation sent by the owner of your schedule. If you do not already have an On-Call Optimizer account this step will guide you through the process of creating one.

The invitation email which you have received will contain a link as shown in the below image.

Click on the link to be taken to On-Call Optimizer.

2. Login

To accept the invitation you must have an On-Call Optimizer account. If you have not used On-Call Optimizer before, you will see a screen similar to the one show below asking you to choose an authentication provider to use for login. Your account will be automatically created on the first time that you authenticate and login with this provider.

If you have previously used On-Call Optimizer and are already logged in you may not see the above screen at all. However if you do, simply log-in again by selecting the authentication provider that matches your account.

3. Click accept

Once you have successfully logged in to On-Call Optimizer, you will see a button allowing you to accept the invitation.

Accepting the invitation means you are agreeing to share any availability information imported from your calendars with the members of the schedule.

Next Steps

Once you have accepted the invitation, you will be taken to a welcome screen from which you can follow the next set of instructions to link your calendar to On-Call Optimizer.

Continue with: Connect a calendar

2.2.2 - Connect a Calendar

In this step we will establish a connection between On-Call Optimizer and the Calendar you wish to use to provide availability information.

1. Select the desired calendar product

  1. Click on the button in the row corresponding to the calendar product you wish to connect.
  2. Complete the authorization or configuration process that follows.

For full details of the authorization or configuration process please refer to full calendar documentation.

2. Choose calendars to use

When multiple calendars are available on the connection you will be asked to select which calendars On-Call Optimizer will process for availability events.

  1. For each calendar select whether or not On-Call Optimizer should process it for availability information.
  2. Click Save when done to confirm these choices.

Ready to Go!

Congratulations. You have successfully shared your calendar availability!

On-Call Optimizer will regularly scan your calendar for new or changed availability information and use the latest available information whenever assinging new on-call shifts.

For more details on how to structure events on your calendar that On-Call Optimizer can recognize, please refer to the event filtering section of the calendar documentation.

3 - Schedules

Understand how the core scheduling functionality of On-Call Optimizer works.

An effective on-call schedule must be flexible and ensure that on-call shifts fit around other commitments in each team members life.

On-Call Optimizer takes the hassle out of maintaining flexible on-call schedules and provides a foundation for teams to experience an on-call environment that delivers growth in expertise.

3.1 - Concepts

Understand the key concepts, data and information used in an On-Call Optimizer schedule

Schedule

The core object in On-Call Optimizer.

The main role of the schedule is to contain a list of shifts which describe which member(s) are expected to be on-call at a particular point in time.

To achieve this goal each schedule contains a set of configuration details in addition to the list of shifts. These configuration details are used by On-Call Optimizer to regularly extend the list of shifts into the future to maintain a desired horizon.

Each set of new shifts generated by On-Call Optimizer is referred to as an assignment, described further below. The collection of assignments associated with a schedule collectively describe the history and future shifts for the schedule.

Advanced configurations of On-Call Optimizer make use of inter-schedule relationships to achieve more complex scheduling outcomes than are possible within a single schedule.

Schedules can be linked to integrations to synchronize their configuration and assignments with external systems (e.g. On-Call Products such as PagerDuty or Ops Genie).

Schedule Balance

Maintaining a balance of shifts between members of a schedule is one of the primary objectives that On-Call Optimizer targets. On-Call Optimizer considers a schedule to be balanced when each member has fair share of the total number of shifts.

See the Schedule Balance page for detailed information on how balance and fairness is calculated and reported in On-Call Optimizer.

Shift

An on-call shift is a contiguous period with defined start and end times associated with one or more assignees. The start and end time of an on-call shift are measured to the minute only (no seconds component) and must be fully specified including a time zone.

The maximum length of a single on-call shift is one week.

On-Call Optimizer supports up to 2 assignees per shift referred to as the primary and secondary respectively.

Shift Configuration

Each schedule contains a list of shift configurations which describe how future shifts in the schedule are to be assigned. A shift configuration is made up of the time at which a shift in the schedule should start and who the desired assignee(s) for the shift should be.

On-Call Optimizer uses the shift configuration to generate the list of specific shifts with explicit start and end times when extending the schedule.

Basic vs Nested Schedules

On-Call Optimizer can support almost any rotation configuration using a combination of basic and nested schedules:

  • An basic schedule contains shift configurations that do not reference any other shift as an assignee - each shift is either assigned to a staticly chosen member, or by placeholder (e.g. BEST_MEMBER) denoting that the constraint optimizing algorithm should be used to dynamically choose the best assignee.
  • To construct more complicated rotation configurations another schedule can be specified as one of the assignees for a shift in the configuration of a schedule. When one schedule refers to another schedule in this manner it is called a nested schedule.

On-Call Optimizer supports up to 3 levels of nesting.

Nesting provides an intuitive and straightforward method to configure rotations whenever there are two or more different groups of people or configurations to manage. Common examples of this would be rotating between two halves of a team on different sides of the world, or having only a subset of a team provide after-hours coverage for a schedule.

The configuration library contains multiple examples demonstrating how these simple combinations enable many diverse schedule structures to be created while remaining simple to undersatnd and configure.

Assignment

A collection of shifts associated in some way with a schedule. The shifts in an assignment may not overlap at any point, and typically would represent a contiguous block of time, but under certain configurations (e.g. business hours only) there may be gaps where no shift or assignment is present.

On-Call Optimizer continually generates new assignments to maintain the schedule according to its configuration.

Assignments can exist in a number of states with defined roles, purposes and processes for moving between states. Please refer to the full assignment documentation for further details.

Assignment quality

The quality of each assignment is evaluated by On-Call Optimizer based on how close to perfectly meeting every goal and constraint it reaches. When a perfect assignment is not able to be made, as set of penalties are reported to help explain the factors that impacted on the quality of the assignment.

Further details of how quality is evaluated and calculated can be found on the Assignments page.

Linked Schedules

On-Call Optimizer supports linking schedules to external systems (e.g. On-Call Products such as PagerDuty or Ops Genie). Schedules that have been linked to an external system can be identified by looking for a badge next to the schedule’s name.

The badge(s) shown next to the schedule name describe the external system(s) that the schedule has been linked to and the type of link that has been established.

Example System
The configuration and shifts for this schedule are linked with Example System.
Example System
The configuration for this schedule is imported from Example System.
Example System
The shifts of this schedule are exported to Example System.

Refer to the detailed documentation relating to a schedule’s basic configuration, synchronized members and destinations for further details, or following the link a schedule guide for a walk-through of how to link a schedule to an external system.

Horizon

The horizon of a schedule is counted in days and describes the level of visibiltiy into future assignments that is or should be provided by the schedule.

  • As one of the configuration parameters for a schedule, the desired horizon, it describes how far in advance shifts should be assigned, and therefore the minimum number of days of notice that members should receive prior to a shift they are assigned to.
  • As a reported property of an existing schedule, the current horizon, it describes how many days exist between a point in time (typically the current date) and the end of the final shift that has been assigned in the schedule

The schedule lifecycle documentation describes how On-Call Optimizer triggers assignment of new shifts when the current horizon is about to fall below the desired horizon.

Horizon is a property of a schedule, not any particular member, and is calculated based on calendar days in the configured time zone of the schedule itself. A current horizon of zero indicates that the schedule’s assigned shifts will end (or already ended before) today, while a current horizon of 1 day indicates that the final shift in the currently assigned schedule ends tomorrow and so on.

Schedule Window

The schedule window describes how many days of future shifts should be assigned at once when assigning new shifts during the lifecycle of the schedule. The configured window is also used as the default size for a new custom assignment.

By default the schedule window extends on from the final shift in the current schedule, but can be changed to start from a different date (so long as it is not in the future) when generating a custom assignment.

History Window

The history window describes how many past shifts are included when calculating the balance of the schedule.

On-Call Optimizer uses a 6-month history window, counting backwards from the start of the first shift in the new assignment.

Availability Information

The availability information for a schedule consists of the combination of both:

  • The combination of individual availability information from each member that has agreed to share their calendar with the schedule.
  • Any availability entries synthesized due to a schedule availability reference that has been configured on the schedule.

3.2 - Assignments

Assignments record individual shifts in the schedule

A schedule is composed of one or more assignments, which allocate members to shifts covering specific time periods.

Viewing Assignments

Shifts assigned to you can be seen on the On-Call Optimizer home page, or by selecting “Swap Shifts” in the main menu.

Within a schedule assignment details are shown on the Overview and Assignments tabs.

Overview Tab

The Overview tab shows the member is who currently assigned to be on-call for the schedule and the next 3 upcoming shifts.

Assignments Tab

The assignments tab provides a summmary of the upcoming shifts for the schedule and a list of historical assigmnents for the schedule.

Assignment Quality

The quality of an individual assignment describes how close to optimal the assignment algorithm was able to reach given the constraints of the schedule configuration and availability of the members.

The quality of an assignment is reported at the top of the assignment page where you will find a summary line containing details on the balance of the schedule and the quality of the assignment. The following icons and colours are used to provide a quick visual overview of the quality of the assignment:

Green thumbs up:
The assignment is optimal or very close to optimal.
Orange thumbs down:
The assignment is OK, but has some penalties.
Red thumbs down:
The assignment has significant problems.

Assignment penalties

When an optimal assignment cannot be found, a set of penalties are reported to describe each of the compromises that On-Call Optimizer had to make to find an viable assignment. These penalties are listed in the “Assignment Penalties” section of the assignment details page found either to the right of the assignment itself, or below the assignment when the screen is narrow.

For details on the types of penalties that can be reported, refer to the algorithm reference page.

Auto Assignment Settings

The auto assignment settings controls how On-Call Optimizer will maintain and extend the schedule throughout the lifecycle of the schedule.

To access these settings, click the wrench icon beside the Next Shift Assignment heading found on the Overview or Assignments tabs of the schedule.

The following settings are available:

  • Start Date: The date from which assignments will be created. Refer to the lifecycle docs for details on behaviour before the start date.
    • Valid values when changing this are between the present date and 90 days in the future.
  • Horizon Days: Defines how many days of horizon (minimum 1, maximum 90) are desired for the schedule: a new assignment will be created when the horizon created by the end of the last existing shift reaches this value.
  • Schedule Window Days: Controls how many days of shifts (minimum 1, maximum 90) will be assigned in each new assignment.
  • Require manual confirmation?: When set requires each new automatic assignment to be approved before the new shifts are confirmed in the schedule.

Disabling manual confirmation

New schedules are created with manual confirmation enabled, but it is recommended to disable manual confirmation once the schedule has reached steady state and members are comfortable with how On-Call Optimizer is operating.

The rationale for this choice is that when first adopting dynamic scheduling it is not uncommon for members to need a few iterations of assignments to establish the patterns and habits of providing availability information, and therefore the ability to review (and potentially re-generate) each automatic assignment before it is confirmed can be useful.

However, once team members are comfortable with the generated assignments and a pattern of usage with On-Call Optimizer has been established, the effort of reviewing each new assignment is harder to justify and delayed, or forgotten approval of an assignment risks reducing the horizon of the schedule below the desired value, or in the worst case causing the schedule to run out of assigned shifts!

Horizon and window sizing considerations

The schedule window should usally be kept above 20 days to ensure sufficient shifts to optimize over are present in each assignment.

It is also important not set the schedule window too large either to ensure availability information is available for all members for the time period covered by the window. Large schedule windows risk scheduling shifts beyond the date where where members are comfortable maintaining their calendar availability details in advance.

The default values for the horizon and schedule window are both 30 days which has been found to work well for many schedules in practice. This provides at lesat 1 month notice for each new shift that is assigned to a member and results in the available horizon for the schedule following a sawtooth pattern between 60 days immediately following each new assignment, and then gradually reducing to 30 days over time until the configured horizon is reached and the next assignment is triggered.

The horizon can be lowered as far as the team members are comfortable with without any adverse impact on the quality of assignments - the only impact of a low horizon is less notification for each member before a shift.

Assignment Types

The assignment concept is used throughout the lifecycle of a schedule leading to several different types of assignments.

Current Assignment

The current assignment for a schedule is synonymous with the schedule itself and represents the canonical list of shifts describing which member is assigned at each point in time. There only ever exists a single current assignment per schedule and the current assignment is only ever modified through the assignment confirmation process.

On-Call Optimizer regularly generates new assignments to ensure the current assignment is extended into the future according to configuration of the schedule.

Pending Assignment

A pending assignment represents a list of shifts that are not yet confirmed but are being considered for addition to the schedule using one of the supported actions.

Pending assignments (if present, often there will not be any) are listed in the right-hand side bar of the schedule view underneath the details of the next planned assignment.

Pending assignments originate from several sources.

Automatic Assignment

An automatic assignment is regularly generated by On-Call Optimizer during the lifecycle of the schedule to extend the current assignment based on the configured assignment parameters.

Automatic assignments are only able to use the Add Shifts action to confirm new shifts onto the end of the current assignment.

Custom Assignment

A custom assignment is created directly by a user. The starting date, number of shifts and the action that is used to confirm the custom assignment into the current assignment for the schedule are all able to be customized by the user.

Imported Assignment

An imported assignment holds shifts that originated and were assigned in an external system such as the on-call product linked to a schedule. When a link is created, On-Call Optimizer will import the history of prior shifts from the on-call product so they are available to help the assignment algorithm create assignments that balance across all members of the schedule.

Saved Assignment

Saved assignments record the history of how the schedule was built and has evolved over time. In simple cases each historical assignment can be matched directly to a subset of the schedule (more specifically to a subset of the current assignment of the schedule), however in more complex cases where the schedule has been re-assigned or individual shift swaps have occurred it is possible that none of the shifts from a saved assignment remain in the current schedule.

Assignment Actions

A pending assignment must select one of the following actions to determine how the current assignment is updated when the assignment is confirmed.

Add Shifts

The pending shifts are added directly to the existing list of shifts in the current assignment. The combined list is sorted by start time. This action will fail if any of pending shifts overlap with or attempt to re-assign any of the existing shifts in the schedule.

The Add Shifts action is the only action used for any assignment initiated by On-Call Optimizer, such as extending the schedule with new shifts or importing shifts from an external source. Authorized users may also use the Add Shifts action when confirming a Custom Assignment.

Replace Shifts After First Start

  1. Any shifts in the current assignment which end after the starting time of the earliest shift in the pending assignment are removed.
  2. The shifts from the pending assignment are appended to the remaining current assignment.

The action will not modify the end time of any existing shifts and will therefore create a gap in the schedule if the start time of the earliest pending shift does not exactly match the end time of an existing shift.

This action is useful when the desire is to re-assigning all shifts after a particular date/time. This action will not be used by any assignment created by On-Call Optimizer, but may be specified by authorized users when confirming a Custom Assignment.

Replace Conflicting Shifts

  1. Any shifts in the current assignment which contain any time between the start of the earliest and the end of the latest shifts in the pending assignment are removed.
  2. The shifts from the pending assignment are added to the gap created in the current assignment by the previous step.

The action will not modify the start or end time of any existing shifts and will therefore create a gap in the schedule if the start and/or end times of the pending shifts do not exactly match the start/end times of any surrounding existing shifts.

This action is useful when the desire is to re-assign a small set of shifts (including just a single shift), such as in the case of taking-over or swapping shifts. This action will not be used by any assignment created by On-Call Optimizer, but may be specified by authorized users when confirming a Custom Assignment.

Assignment Confirmation

The process of confirming an assignment involves the following steps, which are guaranteed to occur transactionally:

  • The current assignment will be updated to include the pending shifts using the configured action as described above.
  • The new current assignment will be fully checked and validated and the process aborted unless all checks pass.
  • The pending assignment will become a saved assignment and become a permenant historical record of when and by which action the current assignment was updated.
  • Schedule events associated with new or changed shifts (e.g. notifications, export to destinations) will execute.

3.3 - Operating Lifecycle

Learn about the common operations and events that regularly occur for each schedule.

Time and tide wait for no one - On-Call Optimizer continuously monitors and assigns upcoming shifts to the best available members and ensures that any external destinations configured for the schedule remain synchronized with the assigned shifts.

How this occurs is easily understood as two processes that operate continuously, each checking the current state and taking any necessary actions to move towards the desired state at any time where a difference between two two states (current and desired) is detected.

Automatic Assignment

The automatic assignment process is responsible for ensuring the number of future shifts assigned for the schedule always remains above the desired horizon.

Steady-state Operation

During typical conditions, the current horizon (the end time of the final shift assigned in the schedule) is compared to the desired horizon and a new assignment is triggered whenever the current horizon is about to fall below the desired value.

The date the next automated assignment will fall due and the shifts that will be assigned at that time are visible in the Schedule Details side-bar on the right-hand side of each schedule.

The action taken once a new automatic assignment has been generated depend on the configuration of the Require manual confirmation? configuration setting for the schedule:

  • When enabled (default), the owner of the schedule will be notified of the new assignment, and required to review and manually confirm the shifts. No further actions will be taken by the automatic assignment process until this occurs.
  • When disabled, an attempt to automatically confirm the new assignment into the current assignment for the schedule will occur immediately after the assignment is generated.

Special Cases

First assignment for new schedules

A newly created schedule may not have any existing shifts from which the current horizon and therefore the due date for the next assignment can be calculated! To address this, all schedules are created with a configured start date in the future.

Prior to the start date no shifts are eligble for auto-assignment, and the start date itself is used instead of the the end time of the latest assigned shift when calculating the current horizon of the schedule.

This means that the first assignment for new schedules will occur N days prior to the configured start date, where N matches the desired horizon configuration of the schedule.

Unconfirmed automatic assignment

No further automatic assignment actions are undertaken while a previous automatic assignment is awaiting review. If this review does not happen promptly the schedule becomes at risk of members not receiving the desired horizon window of notification before their newly assigned shifts, or in the worst case, the schedule could run out of shifts entirely.

Pausing auto assignment or skipping time

Setting the start date to a future date at any time after the schedule has been created will result in the first assignment logic described above being triggered again - while the start date is in the future, it will be used as the basis for calculating the horizon when no other shifts exists. This can be used to cause On-Call Optimizer to skip assignment of shifts for a period of time if desired.

External Synchronization

The external synchronization process is responsible for importing and exporting information about a schedule from configured external systems.

Linked Schedule Configuration

For schedules configured with a link to an external On-Call Product, the following configuration details for the schedule will be regularly updated with the external values:

  • Name
  • Time zone
  • Members

All other configuration details including the shift configuration, cross-schedule availability, destinations and automatic assignment configuration are not changed by this process.

Destination Exports

Each configured destination is provided with new information whenever a new assignment is confirmed. Refer to the destinations documentation for further details.

Availability Information

The availability information for each member of the schedule is refreshed every hour and cached ready for use in any future assignments.

3.4 - Schedule Balance

Understand how On-Call Optimizer balances shifts across members

The balance of shifts between members of a schedule is one of the primary objectives that On-Call Optimizer targets.

On-Call Optimizer considers a schedule to be balanced when each member has a share of the total number of shifts that is proportional to the time at which they were added to the schedule.

This means that the target number of shifts for each member in the schedule will often differ - members who joined the schedule around the same time will have similar targets, but the target will vary between members who have joined the schedule at a later date.

Statistics describing the balance of the schedule are available for the current assignment - showing the live state of the schedule, and can also be viewed when creating new custom assignments or examining the history of a particular assignment - showing a snapshot view of how that assignment altered, or will alter the balance of the schedule when it is or was confirmed.

Summary

At the top of each assignment page you will find a summary line containing details on the balance of the schedule and the quality of the assignment. The following icons and colours are used to provide a quick visual overview of the status of the schedule balance:

Green thumbs up:
The schedule is balanced.
Orange thumbs down:
The schedule is slightly unbalanced.
Red thumbs down:
The schedule is significantly unbalanced.
Red upwards arrow:
The schedule is significantly unbalanced, but improving in this assignment.

Live Balance

The live balance of a schedule will be displayed when viewing the current assignment for a schedule using a table similar to the one shown here. For each member the following information is shown:

  • Completed - the number of shifts already completed by the member (any shift currently in progress is counted as completed in this table).
  • Upcoming - the number of shifts that have been confirmed for the member in future assignments.
  • Total - the total number of completed and upcoming shifts assigned to the member.
  • Target - the number of shifts that the member should be assigned, based on the the number of assignable members in the schedule and when they joined.
  • Excess - the number of shifts that the member’s total is in excess of their target.

Assignment Snapshot Balance

The impact of an individual assignment on the balance of a schedule can be seen on the assignment details page both before the assignment is confirmed and afterwards. The balance table shown for an individual assignment is very similar to the example for the live balance above, except that the the Completed and Upcoming columns are replaced with Previous and New columns instead:

  • Previous - the number of shifts already assigned to the member (may be completed or upcoming) which are not changing in the assignment.
  • New - the number of additional shifts that will be assigned to the member when the assignment is confirmed.
  • Total - the total number of previous and new shifts that will be assigned to the member when the assignment is confirmed.
  • Target - the number of shifts that the member should be assigned at the time when the assignment is confirmed.
  • Excess - the number of shifts that the member’s total is in excess of their target.

Unlike the live balance shown for the current assignment, the balance statistics shown for an individual assignment are a snapshot of the balance of the schedule at the point in time when the assignment was generated or confirmed.

Shift Types

The balance for a schedule is calculated and tracked individually for each type of shift in the schedule. Shift types follow directly from the Shift Configuration of the schedule and are described by the day and time at which the shift starts, combined with its duration. The role (primary, secondary, etc) assigned forms the final component of a shift type, to ensure members are assigned a proportionate number of shifts for each role.

Shift accounting

The numbers reported in the balance tables count the number of shifts of each type assigned to a member and will therefore represent different lengths of time. In the balance table for a daily shift, a value of 1.0 would represent 24 hours, while in the table for a weekly shift a value of 1.0 would represent 168 hours.

Fractional shift numbers will arise in a number of situations, commonly including:

  • When the total number of shifts in the schedule is not evenly divisible by the number of members.
  • When swaps or other changes have resulted in the member only performing part of a shift.

Window Size

The balance for a schedule is calculated from the earliest shift contained within the history window (6 months in the past) until the final future shift that has been assigned.

Even when displayed in the context of an individual assignment that may only be covering a few days of time, the balance reported is for the schedule over the entire window.

3.5 - Members

Schedule members can have differing roles, configuration and permissions governing their interaction with the schedule.

Each schedule in On-Call Optimizer has one or more members who can be assigned to shifts. Additional members not eligible for assignment in the schedule can also be added in order to grant them permissions to view or administer the schedule.

The “Members” tab within a Schedule shows the list of members for the schedule along with their current role and properties.

Auto-send invitation emails

By default, On-Call Optimizer will automatically email invitations to new members when they are added to the schedule. This can be disabled by toggling the setting at the top of the “Members” tab to off.

When auto-send of invitations is disabled, invitation emails will only be sent to members when explicitly triggered using the button below the member list.

Adding and Removing Members

To add a member to a schedule, enter their email address in the text box at the bottom of the member list and click the “Add” button. If the email address entered does not yet have an On-Call Optimizer account, the user will be invited to created one (subject to the the auto-send invitations setting).

To remove a member from a schedule, click the trash-can icon to the right of the member’s name in the member list. When removing members you must ensure that the schedule still has at least one assignable member and at least one member with the Admin role. If these conditions cannot be met, the remove icon will not be visible.

Member synchronization for schedules linked to an on-call product

When an On-Call Optimizer schedule is linked to a schedule in an external on-call product the member list is synchronized from the linked schedule and On-Call Optimizer’s behaviour for member addition and removal differs from above as follows:

  • Additional members can be added to On-Call Optimizer with any of the supported roles (e.g. for administration or schedule visibility), but cannot be marked assignable and will not be synchronized back to the linked schedule. To add a member eligible for assignments to the schedule they must be added to the linked schedule directly.
  • Members added to the linked schedule will be synchronized into On-Call Optimizer within an hour of their addition.
    • By default the added member will be marked assignable when they are added to the On-Call Optimizer schedule.
    • The exception is when the member was added directly in On-Call Optimizer prior to being added to the linked schedule, in which case they remain un-assignable until the setting is explicitly changed.
    • If the added member does not match an On-Call Optimizer account an invitation will be generated and handled according to the state of the auto-send invitation emails setting.
  • Members synchronized from the linked schedule cannot be removed from the On-Call Optimizer schedule.
    • To prevent a member present in the linked schedule from being assigned future shifts, mark the member as un-assignable.
  • Removal of a member from the linked schedule will cause the member to be removed from the On-Call Optimizer schedule as well, even if the member was originally added via On-Call Optimizer directly.

Member List

The first and second columns of the members list show the invitation and calendar availability state for each member of the schedule. A description of each state can be shown by hovering over the icon(s) for any particular member.

The third column shows the member’s name or email address.

The fourth and fith columns allow configuration of the member’s assignment state and role in the schedule as described below.

The final column in the list contains actions (such as the remove icon) that may be available related to the member.

Properties

Invited

On-Call Optimizer supports adding members to a schedule without inviting them to share their calendars which can be useful when testing configuration and assignments of a new schedule type. To use this functionality, ensure the auto-send invitations setting is disabled and then clear the checkbox to the left of the member’s name in the member list.

Assignable

The boolean assignable property is configurable on each member of a schedule, regardless of role, and determines whether the member will be included in the assignment of future shifts for the schedule. Members default to being assignable when added to the schedule, but this can be changed using the toggle next to the member’s name in the member list. A typical use case for marking a member unassignable is to allow a user to view or manage a schedule without participating in the schedule themselves.

Roles

Schedule Admin

Schedule admins have full access to the schedule and can perform all actions available to members. The user who creates the schedule becomes the first schedule admin and can add further members as required. It is recommended to configure at least 2 admins per schedule.

Organization owned schedules are only deletable by a schedule admin when the Manage Schedules permission has been granted to organization members. If this permission is not granted, the schedule will only be deleteable by organization admins.

Schedule Member

Member is the default role for newly added members of a schedule. Members are able to make changes to the configuration and assignments of the schedule, but cannot remove or delete the schedule.

Schedule Viewer

Members in the viewer role can participate fully in the schedule (including being assigned shifts), but are not able to make any changes to the schedule’s configuration or assignments.

3.6 - Configuration

Understand the configuration options for a schedule and their effects.

The configuration of a schedule controls how On-Call Optimizer will generate shifts to assign for the schedule, and any availability information sourced from other schedules that should be taken into account when generating assignments.

In addition to the schedule configuration described on this page, other aspects of the how the schedule behaves throughout its lifecycle are controlled via:

  • The list of members and their roles and properties on the Members tab
  • The assignment settings accessible by clicking the wrench icon beside the “Next Shift Assignment” heading on the “Overview” or “Assignments” tabs of the schedule.
  • Any destinations that are configured for the schedule.

Basic Configuration

The basic configuration for a schedule includes its Name and the Time Zone in which it operates.

For schedules linked to an external On-Call Product the basic configuration is not editable and will be automatically synchronized from the external schedule.

Shift Configuration

The shift configuration describes how On-Call Optimizer will generate future shifts for the schedule. Up to 10 shifts may be configured on a schedule. The available configuration fields for each shift are:

  • Day: Required. One of the normal days of the week (Mon-Sun) or one of the wildcard values Daily, Weekdays, Weekends.
  • Hour: Required. In 24-hour notation, 00 - 23.
  • Minute: Required. 00 - 59
  • Primary Assignee: Optional (but at least one assignee is required across all shifts).
  • Secondary Assignee: Optional.

Valid values for the assignee fields are either a static member of the schedule or one of the following keywords:

  • BEST_MEMBER to request automatic assignment.
  • LAST_PRIMARY to request assignment of the member who was primary in the last shift.
  • [Not assigned] to request that no member be assigned to this role in the shift.

The Day, Hour and Minute fields describe when each new shift will start. The Primary/Secondary Assignee fields describe who, or how On-Call Optimizer will choose to, assign to each shift.

The [Not assigned] keyword is typically used in the secondary field when only a single assignee is required for the shift, however it can also be used in the primary field when you wish to configure a schedule with non-continuous assignments (e.g. only create shifts for business hours Monday to Friday). The only restriction is that at least one of the shift configurations must contain an assignee - there’s no point asking On-Call Optimizer to manage a schedule to which no-one is ever assigned!

Use the example configs to further understand how shift configurations can be combined to achieve a variety of different schedule types and configurations, or for detailed information consult the extension logic, and assignment algorithm reference.

Cross-Schedule Availability

The cross-schedule availability configuration can be used to automatically generate availability information for a schedule based on the assignments that are present in another schedule.

The availabilty information generated by cross-schedule availability configuration will be used with the same weight and purposes as availability information that has been individually supplied by members from their calendars.

Configuring cross-schedule availability requires 3 pieces of information:

  • Action: The type of availabilty information to create (Block or Prefer).
  • Source Assignee: Which of the assignees from the source schedule to create availability information for.
  • Source Schedule: The schedule from which to source the assignments used to generate the availability information.

Configuring cross-schedule availability creates a dependency on the source schedule which requires that it has been assigned prior to the schedule that is depending on it. Attempts to assign new shifts for a schedule which has a cross-schedule availability dependency on a source schedule which does not yet have assignments covering the dates of the requested assignment will fail as the source shifts needed to generate the availability entries required by the configuration do not exist.

Therefore when configuring cross-schedule availability you need to double-check that the horizon and schedule window settings for the source schedule are appropriately set to ensure it is always assigned before the schedule depending on it.

3.7 - Destinations

Describes how external integrations are configured and kept up to date with shifts.

Each On-Call Optimizer schedule can be linked to one or more destinations to enable the export of assigned shifts.

Supported Destinations

Additional destination types (e.g. calendars) will be added soon.

Adding and Removing Destinations

Destinations can be added and removed from a schedule via the “Destinations” tab within a Schedule.

Schedules created via linking an existing schedule will have a matching destination pre-populated which can be removed or edited if desired.

The available configuration parameters for a destination are:

  • Source Assignee: Which of the assignees from the schedule will be exported to the destination.
  • Automatic: When enabled, updated shifts are automatically pushed to the destination whenever new assignments are confirmed on the schedule. If disabled, updates to the destination must be manually triggered.

Destination Behaviour

On-Call Optimizer exports a list of shifts, each consisting of a single assignee to each destination. In order to export a schedule containing both primary and secondary assignees, two destinations will need to be configured, one sourced from the primary assignee, the other sourced from the secondary assignee.

For each destination On-Call Optimizer tracks the end time of the most distant shift that was successfully sent to the destination.

During normal operation the end time of the last shift exported to a destination should match the shifts that have been assigned up to the configured horizon of the On-Call Optimizer schedule. This date can always be viewed in the tooltip of the status icon for the destination on the Destinations tab of any On-Call Optimizer schedule.

Destination Export

When configured for automatic export, the destination will be updated with new shifts after each new assignment is confirmed to the schedule. When automatic export is disabled, the destination will only be updated when an export is explicitly triggered via the user interface.

To trigger a destination export, click the “Export Now” button on the right hand side of the destination’s row.

Destination Status

A status is reported for each destination as one of the following states:

  • OK: All assigned shifts are successfully exported and represented in destination.
  • Pending: No shifts are yet assigned for the schedule to export, or an export attempt is currently in process.
  • Warning: Future shifts (beyond 3 days from now) are not yet successfully exported to the destination.
  • Error: The current or imminent shifts (within the next 3 days) have not been successfully exported to the destination.

Any destination reporting an Error or Warning status will cause the schedule to be reported in the corresponding state also.

3.8 - Shift Swaps

Simple, automated assistance to resolve unexpected changes in availability

Unexpected changes in member availability are an inevitable fact of life. On-Call Optimizer assists schedule members to handle these events by co-ordinating the process of reassigning a future shift that the requesting member is no longer able to perform.

Members simply specify the shift they are unable to perform and then get back to other work.

In the background On-Call Optimizer takes care of notifying and checking with each other member of the schedule to determine whether they are willing and able to take the shift, and then when a willing member is found the schedule is automatically updated.

Benefits

  • Eliminates significant time that would previously have been needed to manually arrange and configure the swap.

  • The members most likely to be able to accept the swap request are notified first as On-Call Optimizer is able to integrate the information already held for each member, including their blocks, preferences and the overall balance of the schedule, into the planning of the swap request.

  • Members can choose to simply take the requested shift without needing to swap one of their existing shifts in return, providing greater choice and flexibilty in how requests are resolved.

    On-Call Optimizer ensures balance across the schedule is maintained by assigning fewer shifts to any member who has performed more than the expected share of shifts in future assignments.

The end result is simple, straightforward shift swaps with minimal time or hassle required from any member.

Requesting a Shift Swap

To initiate a request to swap a future shift, click the swap icon shown to the right of the shift when viewing the assignments for a schedule.

Before confirming the request you will have the opportunity to supply a short note which you can use to describe any information or details that will help other members determine whether they are able to accept the request as well as a deadline by which you would like to receive an answer to the swap request by.

Request Processing Details

Once you confirm the details of your swap request On-Call Optimizer will begin assembling an ordered list of members who are candidates for the swap.

When determining the ordering of members, On-Call Optimizer considers the same set of factors and weights as used in the automatic assignment algorithm including member availability, schedule balance and the distance between shifts for a member.

Members will be given a time window within which they can respond to the request. The length of time given to each member defaults to 8 working hours, but will be reduced as necessary in order to ensure that all remaining candidates can be given an opportunity to respond prior to the specified deadline.

When reducing the available response time window, On-Call Optimizer will not reduce the window below 4 working hours, but will instead increase the number of members allowed to have outstanding notifications to achieve the goal of giving all members an opportunity to respond prior to the specified deadline.

If no response has been received at the end of the time window allocated to a member, On-Call Optimizer will move on and notify further members of the schedule to request their response. Members who did not respond within their original time window are still able to respond at any point up until the request has been completed.

Once a response that causes the request to enter the accepted state is received (e.g. a Swap or Take action) no further members are notified. In cases where all members defer their response, or no response has been received and the deadline is approaching the request will enter a last chance state (described further below) in which all members are re-notified.

Responding to a Swap Request

To respond to a swap request, the responding member must choose one of four available actions:

  1. Take the shift, without swapping an existing shift. The requested shift will be reassigned to the member accepting the request. If this results in any imbalance between members in the schedule, it will be addressed by On-Call Optimizer assigning more/fewer shifts to the appropriate members in subsequent assignments.

  2. Swap an existing shift. The responding member will be able to choose from a subset of their assigned future shifts that match the availability information of the requesting member (e.g. any assigned shifts that fall within a blocked time period will be unavailable as a swap target).

    This option may be unavailable when the responding member has no assigned future shifts, all their assigned future shifts conflict with the requesting members availability, or none of their assigned shifts are considered equivalent to the partial shift being swapped.

  3. Defer their response until all other members have responded. Indicating that they may consider taking the shift as a last resort, but would prefer another solution to be found if possible. On-Call Optimizer will re-notify members who deferred their response when the request enters into the last chance state. This option cannot be selected once the last chance state itself has been reached.

    On-Call Optimizer will automatically select this option for any member whose availability information contains a block matching the requested shift. In this case, the member will not be notified of the request until it enters the last chance state in the case that all other members respond with a decline or defer response.

  4. Decline the request. Indicating that they are unable to take the requested shift.

After selecting the desired action, an optional note to explain the response can also be provided.

Once you are happy with your selection and any note, click the Confirm Response button.

The first member to respond with a “Take” or “Swap” action will cause the request to be marked as accepted.

Partial Shifts

On-Call Optimizer supports swapping part of a larger shift. To use this functionality click on the Edit start/end time button to the right of the Shift to Swap line when creating or editing a swap request and select the desired start/end time (which must be within the original shift selected) for the swap request.

Responders will Other than the selection of candidate shifts for responders to swap described below, all other processing of partial swap requests is unchanged.

Response options for a partial swap request

When responding to a swap request for a partial shift members will be presented with a list of equivalent partial shifts assigned to them that could be swapped with the requesting member. Depending on the details of the partial swap requested only a subset of the shifts assigned to the responding member may be considered equivalent and able to be swapped based on the criteria below.

If none of the member’s assigned shifts are considered equivalent to the the partial swap request the Swap response will be unavailable, however the responding member can still choose to Take the shift without a swap.

Identifying equivalent shifts

An assigned shift for a member is considered to be equivalent for a partial swap if it starts at the same shift configuration day and time and has the same duration as the base shift which the partial swap request originates from.

If the duration of the partial swap is less than 24 hours, weekdays are considered equivalent to each other when matching the start day between the requested partial swap and each potential equivalent shift assigned to the responder.

Examples

  • An assigned shift for Wednesday 9am to Thursday 9am, would match a partial swap request for Monday 9am-5pm period of a base shift covering 9am Monday to 9am Tuesday.
  • An assigned shift for Wednesday 9am to Thursday 9am, would not match a partial swap request for Monday 9am-5pm period of a base shift covering 9am Monday to 9am the following Monday (e.g. one week).

Swapping the current shift

On-Call Optimizer supports swap requests that change the shift that is currently occuring which can arise in two ways:

  1. The current on-caller initiates the swap request after the start time of the shift.
  2. A prior swap request does not receive a response prior to the start time of the shift being swapped.

When swapping the current shift On-Call Optimizer will immediately enter the last chance mode of processing and request an immediate response from all members of the schedule. When a member accepts the request the swap will begin from the next minute to allow time for synchronization with any configured destinations.

Swap Request State Reference

Each swap request passes through the following states

Pending

The request has been received and is being processed by On-Call Optimizer. Notifications to each candidate member will be sent in turn and all response actions are available to be chosen by any candidate member (including those who have not yet been notified, who may notice the request in the UI, etc).

Accepted

Either a swap or an agreement to take the shift has been found and On-Call Optimizer is currently processing the required update(s) to the assignments of the schedule. Once a request has moved into the accepted state it cannot be changed. Other members are unable to respond in any way and the action cannot be reversed unless a subsequent swap request for the same shift is made after the current request reaches the completed state.

Completed

The requested shift (and the shift being swapped to if present) have been successfully reassigned in the current assignment of the schedule. The request and the swap are final. If future changes to the shift are required they must be made via further swap requests or custom assignments of the schedule.

Last Chance

The last chance state is entered when any of the following conditions are met:

  • All candidate members have provided a response without any member acceepting the request, but at least one member has deferred their response.
  • The deadline for the request is in 4 working hours or less (in the time zone of the schedule) and one or more candidate members has yet to respond, or has deferred their response.
  • The shift being swapped is the currently active shift!

When the last chance state is entered all members who have not explicitly declined the shift will be re-notified with the information that no-one has yet accepted the shift and their further response is now required.

Overdue

If no responses are received during the last chance state, the request will become overdue once the deadline has passed. In this state, all members will have received at least one prior notification, but no member has accepted the request, and at least one member has not yet provided a response.

The request will remain in this state until it expires with On-Call Optimizer periodically reminding any members have not yet responded (including those that initially deferred their response) that the requesting member is still awaiting an answer.

Infeasible / Expired

These terminal states indicate that the request was unable to be completed, either because all candidate members explicitly declined the shift (Infeasible), or the start time of the shift was reached before any member accepted the shift (Expired).

4 - Calendar Integration

Calendars provide crucial availability information for each member to On-Call Optimizer.

On-Call Optimizer relies on external calendars to provide availability information for each member of an on-call schedule.

4.1 - Connect a calendar product

Establishing an connection between On-Call Optimizer and a calendar product.

To establish a connection between On-Call Optimizer and a supported calendar product follow these steps.

1. Login to On-Call Optimizer and navigate to the Calendars section.

  1. Select Calendars from the side bar
  2. From the Calendars page, select Add a new calendar connection at the bottom of the page.

After following these steps you should be at https://app.oncall-optimizer.com/calendar_connections/new and be able to see the logo of your Calendar on screen.

2. Select your calendar product

Click on the button corresponding to the row of the calendar product you wish to connect to. After selecting a product you will either be:

  1. Redirected to the website of your calendar product (e.g. Google, Outlook) and asked to grant On-Call Optimizer the necessary permissions to read your calendars. OR
  2. Prompted to enter the configuration details required to connect to your calendar (e.g. ICS URL).

Complete the authorization process provided by the calendar product, or supply the requested configuration details to continue.

3. Configure which calendars to import

Once you have completed the authorization and/or configuration process On-Call Optimizer will validate that it can successfully access the new calendar connection.

If On-Call Optimizer can successfully access the configured calendar product, you will be shown a list of calendars that are available to configure as sources for availability information.

  1. For each calendar in the list use the toggle button to choose whether or not to import availability information from it.
  2. Click Save at the bottom of the list.

Finish

Once you cilck Save, the process of importing availability information will begin in the background and may take a few minutes to complete.

You can view the status of the import for each calendar on the main Calendars page accessible via the Calendars entry in the side bar at any time.

Any imported availability information will be visible on your home page once the import process is complete.

4.2 - Configuration

Customize how availability information is imported and handled.

Once you have established a connection between On-Call Optimizer and a calendar product you have the ability to customize which calendars available via the product are scanned for availability information to import.

Accessing calendar configuration

  1. Select Calendars from the side bar
  2. From the list of available connections click the Edit icon at the bottom of the connection you wish to configured.

Calendar selection

Use the toggle button in each row to select whether or not to use each of the calendars as a source of availability information.

When selected, each calendar is regularly checked for any matching availability events and the results are cached for use in future assignments and swaps.

Calendars which are not selected for use are completely ignored by the import process and no information about their events is read or accessed by On-Call Optimizer.

By default only the primary personal calendar associated with the account connecting the calendar to On-Call Optimizer is selected and all other calendars are ignored. Once the connection is established any of the accessible calendars can then be enabled as desired.

Event retention

When a calendar is deselected, or the connection is disconnected, any availability information previously imported from that calendar is removed and will not be used in future assignments.

Previous assignments are not affected by the removal or deselection of a calendar and any availability information used in the assignment of shifts will remain visible in the display history for the assignment.

4.3 - Availability Information

Availablity information is the key data set used by On-Call Optimizer in assigning shifts.

Availability information enables On-Call Optimizer to assign on-call shifts around the existing commitments in the life of each team member.

Availability information is imported from the calendars that have been connected to your account and configured for import.

Each piece of availability information consists of the following attributes:

  • The member to whom it relates.
  • The start time.
  • The end time.
  • An action (prefer, or block).
  • Descriptive details (title & summary).

Availability blocks

Block actions prevent On-Call Optimizer from assigning any shifts to the named member between the start and end times.

Blocks are created for any holiday or out of office event types and can also be triggered using one of the following strings in the title or description of an event:

  • not oncall
  • no oncall
  • not-oncall
  • no-oncall
  • noc

Availability preferences

Prefer actions allow members to hint to On-Call Optimizer that they would prefer to be assigned shifts between the start and end times.

Preferences must be manually triggered using one of the following strings in the title or description of an event:

  • prefer oncall
  • prefer-oncall

Event ownership and acceptance

Only events that are either organized or explicitly accepted by you are processed as sources of availability information.

Events created by other users which appear on a calendar (e.g. because you have been invited to participate in the event), will be ignored by On-Call Optimizer until you accept the event on the calendar. This check is in place to prevent any user with the permissions to place invited events on your calendar from being able to create availability information for you.

These rules are also applied if you configure a team or shared calendar which you have access to as a source of availabilty information in your On-Call Optimizer account. Only those events on the shared calendar which you have directly organized, or explicitly accepted will be imported as availability information for you in On-Call Optimizer.

Availability Lifecycle

New availability information is imported to On-Call Optimizer from configured calendars on a regular basis to cover the time period from the present time until 90 days in the future. Any previously imported availability information that has been removed or updated in the source calendar will also be removed or updated as necessary in On-Call Optimizer.

Availability information will expire and be removed from On-Call Optimizer once the end time of the event is in the past, however any such information that was used for assignment of shifts will remain available in the history attached to the assignment event record even after it has expired from On-Call Optimizer’s cache of upcoming availability information.

Removing availability information

Individual events in the future

To remove availability information for a future time from On-Call Optimizer, update or remove the calendar event that the information is sourced from (e.g. remove the associated holiday or out of office event, or update the event title or description to remove any no-oncall or similar tags).

On-Call Optimizer will detect the changes on the next refresh, or you can trigger an immediate refresh on the main Calendars page.

All future events sourced from a specific calendar

To remove all upcoming availability events sources from a specific calendar, turn-off the toggle button for that calendar in the corresponding row of the configuration for that connection. You can also disconnect a calendar product entirely from On-Call Optimizer which will remove all events that were imported from calendars provided by that connection.

More Information

For further details on how availability information is used in shift assignment, refer to the algorithm details documentation.

4.4 - Event Filtering

On-Call Optimizer is designed and built to preserve privacy by collecting as little calendar data as possible.

Calendar data is sensitive and often contains personal details. On-Call Optimizer is designed and built to minimize the amount of information processed and retained using the following filtering principles:

  1. On-Call Optimizer only requests event details for those calendars which have been specifically enabled.
    • Event details on other calendars will not be read or accessed by On-Call Optimizer even if access to them is incidentally available.
  2. When processing events on configured calendars On-Call Optimizer filters events using the following set of criteria
    • The event must occur within 90 days of the present date, AND
    • The event must be organized, or accepted by the user importing the calendar, AND
    • The event must be an “Out of Office” or “Holiday” event type, OR
    • The event must contain an exact match for at least one of the strings listed in the availability block or availability preference definitions (e.g. no-oncall, 'prefer-oncall)
  3. Any events not matching the filter criteria are ignored. No data or information about them is retained by On-Call Optimizer.
  4. For events matching the filter criteria, On-Call Optimizer stores only the 5 pieces of availability information.

4.5 - Supported Calendars

Understand which calendar products are supported by On-Call Optimizer and how to use them.

On-Call Optimizer supports the import of availability information from the products listed below.

If the calendar you use is not shown, please get in touch, and we will see if support can be added.

4.5.1 - Google Calendar

How to link a Google Calendar to On-Call Optimizer

On-Call Optimizer supports the import of availability information from one or more Google calendars.

Connection Process

To link a Google Calendar to your On-Call Optimizer account follow the connection instructions and click the Connect Google button.

You can connect any number of Google calendars (e.g. work and personal) to a single On-Call Optimizer account so long as you have permission to log-in and complete the authorization process with each Google account.

Updating calendar selection

You can change or update which of the accessible calendars will be used as a source of availability information following the instructions for calendar configuration.

Disconnecting

To remove a Google Calendar connection:

  1. Select Calendars from the side bar
  2. From the list of available connections click the Disconnect icon at the bottom of the connection you wish to remove.

Required Permissions and Data

On-Call Optimizer uses the minimum possible set of OAuth permissions and takes steps to minimize the amount of calendar data accessed and stored.

OAuth scopes requested

  • https://www.googleapis.com/auth/calendar.readonly
    • Used to retrieve the list of available calendars to allow you to select which calendars On-Call Optimizer should process.
    • Used to read event information from selected calendars to match to your availability preferences.

Data accessed

On-Call Optimizer filters events to minimize the amount of information processed and retained.

4.5.2 - Microsoft Outlook

How to link a Microsoft Outlook calendar to On-Call Optimizer

On-Call Optimizer supports the import of availability information from one or more Outlook calendars.

Connection Process

To link an Outlook Calendar to your On-Call Optimizer account follow the connection instructions and click the Connect Outlook button.

You can connect any number of Outlook calendars (e.g. work and personal) to a single On-Call Optimizer account so long as you have permission to log-in and complete the authorization process with each Microsoft account.

Updating calendar selection

You can change or update which of the accessible calendars will be used as a source of availability information following the instructions for calendar configuration.

Disconnecting

To remove an Outlook Calendar connection:

  1. Select Calendars from the side bar
  2. From the list of available connections click the Disconnect icon at the bottom of the connection you wish to remove.

Required Permissions and Data

On-Call Optimizer uses the minimum possible set of OAuth permissions and takes steps to minimize the amount of calendar data accessed and stored.

OAuth scopes requested

  • Calendars.Read
    • Used to retrieve the list of available calendars to allow you to select which calendars On-Call Optimizer should process.
    • Used to read event information from selected calendars to match to your availability preferences.

Data accessed

On-Call Optimizer filters all accessed events and only retains the description and start/end time details for matched events. No other calendar data is retained or stored.

4.5.3 - iCalendar

How to link any calendar providing an ICS feed to On-Call Optimizer

On-Call Optimizer supports the import of availability information from one any calendaring product that is able to provide a web-accessible iCalendar feed.

Connection Process

To add an ICS feed to your On-Call Optimizer account follow the connection instructions and click the Add ICS URL button.

Disconnecting

To remove an ICS feed:

  1. Select Calendars from the side bar
  2. From the list of available connections click the Disconnect icon at the bottom of the connection you wish to remove.

Supported Products

On-Call Optimizer’s ICS support is compliant with the RFC 5545 specification and should work with any calendar product producing a valid iCalendar feed in this format. On-Call Optimizer has been specifically tested with ICS feeds generated by the following products:

Required Permissions and Data

The URL provided to On-Call Optimizer must not required authentication.

Data accessed

On-Call Optimizer filters events from the provided feed to minimize the amount of information processed and retained.

5 - On-Call Product Integration

On-Call Products can act as both sources of schedule configuration and destinations of schedule assignments.

On-Call Optimizer provides smooth integration with popular On-Call Products, including PagerDuty.

5.1 - Connection

Establishing an API connection between On-Call Optimizer and an On-Call Product.

To establish a connection between On-Call Optimizer and a supported On-Call Product follow these steps.

1. Login to On-Call Optimizer and navigate to the On-Call Products section

  1. Select On-Call Products from the side bar.
  2. From the On-Call Products page, select Create New Connection at the bottom of the page.

After following these steps you should be at https://app.oncall-optimizer.com/irm_connections/new and be able to see the logo of your On-Call Product on screen.

3. Select your On-Call Product and configure authentication

  1. Click on the logo of the On-Call Product you are connecting to.
  2. Enter your API Key in the provided field and click Continue

Screencast

Done

Once you have configured an API key, On-Call Optimizer will begin the process of connecting to the chosen product and collecting details of the available schedules. This may take a couple of minutes during which you will see a loading spinner.

5.2 - Supported On-Call Products

Understand which on-call products are supported by On-Call Optimizer and how to use them.

On-Call Optimizer supports connection with the products listed below.

If the product you use is not shown, please get in touch, and we will see if support can be added.

5.2.1 - PagerDuty

PagerDuty + On-Call Optimizer Integration Benefits
  • Synchronize On-Call Optimizer’s flexible, calendar aware on-call assignments to your PagerDuty schedules.
  • Import PagerDuty schedule configuration and history into On-Call Optimizer.
  • Enjoy automated shift swap handling synchronized from On-Call Optimizer to PagerDuty.

How it Works

  • On-Call Optimizer will import the list of members and shift history from a PagerDuty schedule to an On-Call Optimizer schedule.
  • On-Call Optimizer will maintain override entries in one or more PagerDuty schedules to synchronize the on-call shifts assigned to members with the flexible, calendar aware assignments and swaps generated and managed by On-Call Optimizer.

Requirements

  • Connecting PagerDuty to On-Call Optimizer requires a PagerDuty API Key with read-write permissions to the PagerDuty schedule(s) you wish to connect.

Support

If you need help with the integration of PagerDuty and On-Call Optimizer please raise a support case from the help page within On-Call Optimizer, or contact us at support@oncall-optimizer.com.

Integration Walkthrough

In PagerDuty

  1. From the Integrations menu, select API Access Keys from the Developer Tools column.
  2. Click Create New API Key.
  3. Enter a description for the key (e.g. “On-Call Optimizer”) and click the Create Key button.
    • The Read-only API Key checkbox must remain unchecked.

Keep the generated key in a safe place for later use. You can now proceed to the In On-Call Optimizer section below.

In On-Call Optimizer

  1. Click On-Call Products in the side menu.
  2. Click Create New Connection at the bottom of the page.
  3. Click the PagerDuty logo.
  4. Enter the API Key obtained in the previous section into the API Key field and click Continue

On-Call Optimizer will begin the connection process and present the list of available PagerDuty schedules when complete. To continue onwards from this point, follow the Link an existing schedule getting started guide.

How to Uninstall

To remove a PagerDuty connection it must not be in use by any schedule in On-Call Optimizer.

  1. Identify all PagerDuty linked schedules using the green PagerDuty badge that appears to the right of their name.
    1. From the Configuration tab of the schedule, click the permanently delete link at the bottom of the page.
    2. Enter the name of the schedule in the Confirm permanent deletion text field and click the Permanently Delete Schedule button.
  2. Delete any destinations referencing the PagerDuty connection you want to remove from any schedule where they are configured.
    1. For each schedule, click the Destinations tab and review the list of configured destinations.
    2. For each destination using the connection being removed, click the Remove button on the right-hand side.

Once the connection is no longer in use by any On-Call Optimizer schedule:

  1. Select On-Call Products from the side menu.
  2. Click on the unused PagerDuty connection in the list of connections.
  3. Click the Destroy Connection button.

Additional Details

Permissions and Data Access Reference

On-Call Optimizer requires read-write PagerDuty API key to link to a PagerDuty schedule and export shifts to it as a destination.

Data accessed

On-Call Optimizer exclusively uses the Schedule and User endpoints of the PagerDuty API, and does not require access to any other API object types.

On-Call Optimizer reads the name, members and shift configuration of any available PagerDuty schedules for the purposes of presenting a list of available schedules to the user in the On-Call Optimizer application.

For any PagerDuty schedule linked to an On-Call Optimizer schedule, On-Call Optimizer will, in addition to the basic data described above, also read a list of assigned shifts and overrides on an ongoing basis for the purposes of maintaining and validating synchronization between On-Call Optimizer and PagerDuty.

For any PagerDuty schedule configured as a destination, On-Call Optimizer will create and delete override entries on the PagerDuty schedule for the purposes of bringing the PagerDuty schedule into alignment with the shift assignments in On-Call Optimizer.

While executing the above primary functions, On-Call Optimizer will also read the list of users available in the PagerDuty account for the purposes of mapping between the PagerDuty user ID and the user’s email address and full name which are required by On-Call Optimizer. On-Call Optimizer does not access or store any other attributes of PagerDuty users (e.g. phone numbers or contact methods).

5.2.2 - Opsgenie

How to link Opsgenie to On-Call Optimizer

On-Call Optimizer supports the import of configuration details and the export of shift assignments to one or more Opsgenie schedules.

Connection Process

To link an Opsgenie account to your On-Call Optimizer account:

  1. Select On-Call Products from the side menu.
  2. From the On-Call Products page, select Create New Connection at the bottom of the page.
  3. Click on the Opsgenie logo.
  4. Enter your API Key in the provided field and click Continue
  5. On-Call Optimizer will begin the connection process and present the list of available Opsgenie schedules when complete.

Opsgenie Schedules and Rotations

The data model for representing an on-call schedule and an associated set of assigned shifts differs between On-Call Optimizer and Opsgenie:

  • An On-Call Optimizer schedule has a single configuration describing how and when shifts rotate between members. Each shift within the schedule may have one or more assignees (e.g. primary, secondary, tertiary).
  • An Opsgenie schedule can contain one or more rotations, and each rotation can have an individual configuration for both how shifts rotate between members and the list of members for the rotation.
    • Alerts in Opsgenie may only be routed to a schedule, not a rotation.
    • Alerts routed to a schedule will be delivered to any member currently assigned to any rotation within the schedule.
  • To achieve the primary/secondary on-call functionality supported in a single schedule in On-Call Optimizer requires the use of two individual schedules each with their own rotation in Opsgenie.

To provide consistent behaviour despite these differences, On-Call Optimizer uses the following process:

  • Only an Opsgenie schedule can be the source or destination of/for an On-Call Optimizer schedule. On-Call Optimizer cannot be configured from or targeted to a particular rotation within an Opsgenie schedule.
  • When importing shifts from an Opsgenie schedule, assignees from each configured rotation within the schedule will be merged into a single On-Call Optimizer shift in the position indicated by their ordering in the Opsgenie interface (e.g. the first rotation will take the primary role in On-Call Optimizer, the second rotation will take the secondary role and so on).
  • When exporting shifts to an Opsgenie schedule, the override entries created by On-Call Optimizer in Opsgenie will not specify any particular rotation, and will therefore apply to all rotations within the schedule. The On-Call Optimizer shift role that is exported to the override entries for each Opsgenie schedule is selected at the time the destination is configured and can be any of the available roles for the On-Call Optimizer schedule.

Opsgenie Override Entries

On-Call Optimizer uses the Opsgenie override functionality to represent the assigned shifts for each schedule. An override entry is created for each shift assigned by On-Call Optimizer resulting in continuous override coverage being provided in the Opsgenie UI to match the schedule assigned by On-Call Optimizer.

On-Call Optimizer tracks the latest (most distant) date for which it has successfully exported assigned shifts to Opsgenie as override entries and does not make any further modifications to overrides prior to this date unless they are directly changed in On-Call Optimizer (e.g. by replacing an earlier assignment or using On-Call Optimizer’s swap functionality).

This allows last-minute and short-term changes to overrides (e.g. to cover a commute window from home to the office) to be made directly in Opsgenie without conflicting with On-Call Optimizer, however if you make a planned change to the schedule in On-Call Optimizer, Opsgenie will be updated.

Pre-existing overrides in Opsgenie for dates beyond the date to which On-Call Optimizer has previously exported will be overwritten when On-Call Optimizer exports the assigned shifts for that time period for the first time.

During normal operation the latest date exported to Opsgenie will match the shifts that have been assigned up to the configured horizon of the On-Call Optimizer schedule. This date can always be viewed in the tooltip associated with the destination in the bottom of the Schedule Details sidebar of any On-Call Optimizer schedule.

Disconnecting

To remove a Opsgenie connection it must not be in use by any schedule in On-Call Optimizer.

  1. Deleted any schedules in On-Call Optimizer which are linked via the Opsgenie connection you want to remove.
  2. Delete any other destinations using the Opsgenie connection you want to remove from any schedule where they are configured.

Once the connection is no longer in use by any On-Call Optimizer schedule:

  1. Select On-Call Products from the side menu.
  2. Click on the unused Opsgenie connnection in the list on the page.
  3. Click the “Destroy Connection” button.

Required Permissions and Data

On-Call Optimizer requires a read-write Opsgenie API key to link to a Opsgenie schedule and export shifts to it as a destination.

If destination export functionality is not required, On-Call Optimizer will work with a read-only API key, but will only be able to list and import configuration data from the available Opsgenie schedules.

Data accessed

On-Call Optimizer exclusively uses the Schedule, Schedule Rotation and Schedule Override endpoints of the Opsgenie API, and does not require access to any other API object types.

On-Call Optimizer reads the name, members and shift configuration of any available Opsgenie schedules for the purposes of presenting a list of available schedules to the user in the On-Call Optimizer application.

For any Opsgenie schedule linked to an On-Call Optimizer schedule, On-Call Optimizer will in addition to the basic data described above, also read a list of assigned shifts and overrides on an ongoing basis for the purposes of maintaining and validating synchronization between On-Call Optimizer and Opsgenie.

For any Opsgenie schedule configured as a destination, On-Call Optimizer will create and delete override entries on the Opsgenie schedule for the purposes of bringing the Opsgenie schedule into alignment with the shift assignments in On-Call Optimizer.

6 - Messaging

Messaging product integrations can be used to receive notifications and interact with On-Call Optimizer schedules..

On-Call Optimizer currently supports the following messaging products:

6.1 - Slack

Receive notifications and interact with your schedules from within Slack using the On-Call Optimizer Slack App.

To get started, an organization administrator must install the On-Call Optimizer Slack App in your Slack workspace. Once the app has been installed each member will then need to connect their Slack and On-Call Optimizer accounts in order to access the full functionality of the app.

App Overview

App Home

The App Home provides a quick overview of the current state of your On-Call Optimizer account showing your upcoming shifts and current availability information.

The App Home is available by clicking the item with the On-Call Optimizer logo and name in the Apps section of the Slack menu sidebar.

If you do not see On-Call Optimizer in your list of apps, you can use one of the links provided on the Messaging page in your On-Call Optimizer account to link directly to the App Home screen, after which the app will apppear in your list.

App Messages

The Messages tab located within the app’s home in Slack is a DM channel where notifications from On-Call Optimizer to you as an individual user will be delivered.

In addition to receiving your personal notifications from On-Call Optimizer via the messages tab, you are also able to use most of the app commands described below in this channel to interact with your On-Call Optimizer account and schedules without causing noise or disruption to other users in public channels.

Inviting the app to a channel

You can invite the On-Call Optimizer Slack App to any channel using the /invite @On-Call Optimizer command, or Integrations > Add App UI within the members dialog for the channel.

Once the On-Call Optimizer App has joined the channel it will post a welcome message describing the next steps and how the app will interact with the channel. The first of these steps will be to link one or more On-Call Optimizer schedules to the channel using the link schedule command described below. Once linked to a channel, On-Call Optimizer will deliver notifications regarding the schedule as messages to the channel when new assignments are confirmed, or new swaps are requested.

App Commands

The On-Call Optimizer Slack App supports the following commands which can issued from any channel the app is installed in using Slack’s standard @mention syntax (e.g. @On-Call Optimizer help), or from the Messages tab of the App Home in which case the @mention is not required. On-Call Optimizer does not receive or process any channel messages that are not directed towards it via one of these methods.

list schedules

The list [all] schedules command can be used in any channel and will return details of any On-Call Optimizer schedules which have been linked to the channel.

When used with the optional all parameter, a list of any other schedules available to the user issuing the command which could be linked to the channel will also be returned.

The link schedule <name_fragment> command can be used in any channel to create a link between the named On-Call Optimizer schedule and the current channel. The primary purpose of linking a schedule to a channel is to subscribe the channel to receive notifications regarding events on the schedule.

The schedule to link can be specified as any fragment of a schedule name (as shown by the list schedules command) that uniquely identifies a single schedule.

notification config

The notification config command displays the current notification settings for each schedule linked to the channel. Notifications which are enabled for delivery to the channel will be shown with a ✔. Notifications which are disabled for delivery to the channel will be shown with a ✘.

The name of the notification is show in CamelCase immediately following the status indicator and can be used with the enable and disable commands described below to control which notifications are received.

notification [enable|disable] <notification_name> [schedule_name_fragment]

When issued with a single parameter notification_name, the named notification will be enabled or disabled for delivery to the channel for all linked schedules.

When issued with the second schedule_fragment_name parameter, the named notification will be enabled or disabled only for the schedule that matches the specified name.

To find the name of the notification for use with this command, use the notification config command described above or check the context footer of any notification message.

help

The help command displays a brief summary of the available commands and a link to this page.

First time setup

Installation

To enable any of the functionality described on this page, the On-Call Optimizer Slack App must be installed in your Slack workspace. To do so, follow the instructions below:

  1. Visit the Messaging page in your On-Call Optimizer account and click the Add to Slack button
  2. Complete the Slack OAuth flow and grant the requested permissions.
  3. On-Call Optimizer will display a message confirming that your Slack and On-Call Optimizer accounts have been successfully connected in the On-Call Optimizer web interface, and as a message in Slack.

Connect Accounts

The first time each user attempts to use the On-Call Optimizer Slack App they will be prompted to connect their On-Call Optimizer account to their Slack account using the following process:

  1. View the App Home screen in slack. (If you need help finding it, use the links provided on the Messaging page in your On-Call Optimizer account).
  2. Click the Connect Account button shown at the bottom, you will be redirected to a page in On-Call Optimzer.
  3. If required, complete the On-Call Optimizer login process.
  4. On-Call Optimizer will display a message confirming that your Slack and On-Call Optimizer accounts have been successfully connected.

You can verify the status of the connection in future by visiting On-Call Optimizer’s App Home in Slack (which will only function if the connection has been established), or by clicking the Messaging link in the On-Call Optimizer menu sidebar.

7 - Reference

Detailed reference information for technical users of On-Call Optimizer.

Please refer to the following pages for detailed information on how On-Call Optimizer operates.

7.1 - Example configurations

Examples of how to configure Schedules

Using basic and nested schedules, it is possible to create almost any configuration of on-call schedule that you require as demonstrated by the examples below.

If none of these examples meet your needs, and you need help creating a schedule to match your requirements, please get in touch.

7.1.1 - Weekly Shift

Demonstrates a simple schedule changing between members once a week at a specified date and time.

Shift Configuration Entries

Day:Hour:Minute:Primary:Secondary:
Mon1000BEST_MEMBER[Not assigned]

Sample Assignment

2023-07-24 10:00 person2@example.com
2023-07-31 10:00 person3@example.com
2023-08-07 10:00 person1@example.com
2023-08-14 10:00 person3@example.com

Assignment Details

This configuration results in On-Call Optimizer balancing team members using a single shift type covering 7 days.

While this is a common rotation pattern for many teams, the full benefits of On-Call Optimizer will not be experienced in this configuration due to the limited number of shifts available to be matched to team member constraints and preferences.

It is recommended that you consider migrating to one of the later examples in the configuration library which provide more flexibility to schedule around team member constraints and preferences.

Return to the list of other examples

7.1.2 - Daily Shift

Demonstrates a simple schedule changing between members at 9am every day.

Shift Configuration Entries

Day:Hour:Minute:Primary:Secondary:
Daily0900BEST_MEMBER[Not assigned]

Sample Assignment

2023-07-24 10:00 member2@example.com    # Mon
2023-07-25 10:00 member1@example.com    # Tue
2023-07-26 10:00 member3@example.com    # Wed
2023-07-27 10:00 member4@example.com    # Thu
2023-07-28 10:00 member3@example.com    # Fri
2023-07-29 10:00 member4@example.com    # Sat
2023-07-30 10:00 member1@example.com    # Sun
2023-07-31 10:00 member2@example.com    # Mon

Assignment Details

This configuration results in On-Call Optimizer balancing team members using a single shift type covering each 24 hour period, with no differentiation made between weekdays and weekends in the balancing process.

Typically each member should be assigned similar numbers of shifts for each different day of the week by the default behaviour of On-Call Optimizer’s algorithm, however if team members persistently block or prefer particular days (e.g. weekends) via their availability information, other members may find themselves consistently assigned to particular days of the week without any schedule imbalance arising.

Enforcing Weekday vs Weekend Balance

An alternative configuration that ensures all team members are assigned balanced weekday and weekend day shifts despite individual preferences would be:

Day:Hour:Minute:Primary:Secondary:
Weekdays0900BEST_MEMBER[Not assigned]
Weekends0900BEST_MEMBER[Not assigned]

This configuration results in On-Call Optimizer using two shift types for balancing purposes which contain:

  1. All 24-hour duration shifts starting Mon-Fri.
  2. All 24-hour duration shifts starting on Sat and Sun.

On-Call Optimizer aims for each member to have a balanced share of the shifts within each shift type.

Return to the list of other examples

7.1.3 - Business hours only shifts (schedule contains gaps)

Demonstrates a schedule assigning members only during business hours with gaps in between the shifts.

In situations where out-of-hours coverage is not required, you can create a schedule which only assigns members during particular time periods, leaving gaps with no assignee(s) scheduled at all other times.

The following example demonstrates a shift configuration that will create shifts covering Mon-Fri 9am-5pm in the schedule’s time zone. No shift or assignee will be available outside those times.

Shift Configuration Entries

Day:Hour:Minute:Primary:Secondary:
Weekdays0900BEST_MEMBER[Not assigned]
Weekdays1700[Not assigned][Not assigned]

Sample Assignment

2023-07-24 09:00 person2@example.com    # Mon
# 2023-07-24 17:00 NO_ASSIGNEE
2023-07-25 09:00 person1@example.com    # Tue
# 2023-07-25 17:00 NO_ASSIGNEE
2023-07-26 09:00 person5@example.com    # Wed
# 2023-07-26 17:00 NO_ASSIGNEE
2023-07-27 09:00 person4@example.com    # Thu
# 2023-07-27 17:00 NO_ASSIGNEE
2023-07-28 09:00 person3@example.com    # Fri
# 2023-07-28 17:00 NO_ASSIGNEE
2023-07-31 09:00 person5@example.com    # Mon
# 2023-07-31 17:00 NO_ASSIGNEE

Assignment Details

This configuration results in On-Call Optimizer balancing team members using a single shift type covering each 8 hour period on Mon-Fri.

Return to the list of other examples

7.1.4 - Separate business and after-hours shifts (within team)

Demonstrates a schedule with different business and after-hours shifts every day.

A common motivation for using a schedule configuration of this type would be to avoid having any team member scheduled for a consecutive 24hr period.

Shift Configuration Entries

Day:Hour:Minute:Primary:Secondary:
Daily0900BEST_MEMBER[Not assigned]
Daily1700BEST_MEMBER[Not assigned]

Sample Assignment

2023-07-24 09:00 person2@example.com    # Mon
2023-07-24 17:00 person5@example.com
2023-07-25 09:00 person1@example.com    # Tue
2023-07-25 17:00 person4@example.com
2023-07-26 09:00 person5@example.com    # Wed
2023-07-26 17:00 person3@example.com
2023-07-27 09:00 person4@example.com    # Thu
2023-07-27 17:00 person2@example.com
2023-07-28 09:00 person3@example.com    # Fri
2023-07-28 17:00 person1@example.com
2023-07-29 09:00 person5@example.com    # Sat
2023-07-29 17:00 person2@example.com

Assignment Details

This configuration results in On-Call Optimizer balancing team members using two shift types which contain:

  1. All 8-hour duration shifts starting 9am.
  2. All 16-hour duration shifts starting 5pm.

On-Call Optimizer aims for each member to have a balanced share of the shifts within each shift type.

Return to the list of other examples

7.1.5 - Separate business and after-hours shifts (delegated to a partner team)

Demonstrates a schedule with after-hours shifts handled by a different partner team.

This schedule configuration is commonly used when two teams in different time-zones are able to provide coverage during different hours of the day.

Note how (unlike the basic after hours) example where every day of the week is treated the same, this example also demonstrates the use of the Weekdays wildcard in the shift configuration to achieve the result of having Saturday and Sunday also treated as after-hours and assigned to the partner team for the full 48-hour period.

Shift Configuration Entries

Day:Hour:Minute:Primary:Secondary:
Weekdays0900BEST_MEMBER[Not assigned]
Weekdays1700partner-rotation[Not assigned]

Sample Assignment for the main schedule

2023-07-24 09:00 person2@example.com    # Mon
2023-07-24 17:00 partner-rotation
2023-07-25 09:00 person1@example.com    # Tue
2023-07-25 17:00 partner-rotation
2023-07-26 09:00 person3@example.com    # Wed
2023-07-26 17:00 partner-rotation
2023-07-27 09:00 person2@example.com    # Thu
2023-07-27 17:00 partner-rotation
2023-07-28 09:00 person3@example.com    # Fri
2023-07-28 17:00 partner-rotation
2023-07-31 09:00 person1@example.com    # Mon

Assignment Details

This configuration results in On-Call Optimizer balancing team members in a very similar way to the business hours example, using a single shift type covering each 8 hour period on Mon-Fri.

There are two additional shift types (16-hour overnight shifts, and 64-hour weekend shifts) assigned to the partner team in the main schedule, however as explained below, these shift types are not used for balance and assignment purposes.

Partner Team Schedule

The shifts delegated to the partner team will be assigned in the final output of this schedule by referencing the existing assignments of the referenced partner schedule which are unchanged by the fact that it has been referenced from this schedule. This allows the partner team to use any rotation configuration they like, independently of any scheduling choices made in the the main schedule.

In this example, the partner team is using the Simple Daily Rotation configuration which assigns a single shift per day, and therefore will continue to aim to assign a balanced number of daily shifts to each member.

Fully Rendered Schedule

When viewed in the On-Call Optimizer web UI, or exported to an on-call products the “fully rendered” schedule combining the above two rotations will be as follows:

2023-07-24 09:00 person2@example.com    # Mon
2023-07-24 17:00 member2@example.com    # Mon 10:00 in partner-rotation America/Los_Angeles
2023-07-25 09:00 person1@example.com    # Tue
2023-07-25 17:00 member1@example.com    # Tue 10:00 in partner-rotation America/Los_Angeles
2023-07-26 09:00 person3@example.com    # Wed
2023-07-26 17:00 member3@example.com    # Wed 10:00 in partner-rotation America/Los_Angeles
2023-07-27 09:00 person2@example.com    # Thu
2023-07-27 17:00 member2@example.com    # Thu 10:00 in partner-rotation America/Los_Angeles
2023-07-28 09:00 person3@example.com    # Fri
2023-07-28 17:00 member3@example.com    # Fri 10:00 in partner-rotation America/Los_Angeles
2023-07-29 17:00 member3@example.com    # Sat 10:00 in partner-rotation America/Los_Angeles
2023-07-30 17:00 member1@example.com    # Sun 10:00 in partner-rotation America/Los_Angeles
2023-07-31 09:00 person1@example.com    # Mon
2023-07-31 17:00 member2@example.com    # Mon 10:00 in partner-rotation America/Los_Angeles

Return to the list of other examples

7.1.6 - Follow the sun (2 locations)

Demonstrates a schedule balancing two 12-hour shifts between a UK and US west coast pair of teams.

This schedule configuration enables each team to have the majority of their on-call hours within typical day/waking hours. It involves 3 separate schedules, one for each of the local teams and a third schedule which is then used to co-ordinate and join the local schedules together.

Main Schedule Shift Configuration Entries

The main schedule is configured in the America/Los_Angeles time zone and uses a simple shift configuration pattern that rotates between a nested schedule for each team at the appropriate time each day.

Day:Hour:Minute:Primary:Secondary:
Weekdays1000sfo-team[Not assigned]
Weekdays2200lon-team[Not assigned]

Sample shifts

2023-07-24 10:00 sfo-team
2023-07-24 22:00 lon-team
2023-07-25 10:00 sfo-team
2023-07-25 22:00 lon-team
2023-07-26 10:00 sfo-team
2023-07-26 22:00 lon-team
2023-07-27 10:00 sfo-team
2023-07-27 22:00 lon-team
2023-07-28 10:00 sfo-team
2023-07-28 22:00 lon-team
2023-07-31 10:00 sfo-team

London Team Shift Configuration Entries

The London team’s schedule is configured in the GMT time zone and the team has chosen to schedule themselves using a 4 day/3 day split across the week.

Day:Hour:Minute:Primary:Secondary:
Mon0600BEST_MEMBER[Not assigned]
Fri0600BEST_MEMBER[Not assigned]

The 06:00 UTC shift start time is selected to match the 22:00 America/Los_Angeles shift start time in the main schedule.

Sample shifts

2023-07-24 06:00 london-member1@example.com    # Mon
2023-07-28 06:00 london-member3@example.com    # Fri
2023-07-31 06:00 london-member2@example.com    # Mon
2023-08-04 06:00 london-member4@example.com    # Fri
2023-08-07 06:00 london-member3@example.com    # Mon
2023-08-11 06:00 london-member1@example.com    # Fri
2023-08-14 06:00 london-member4@example.com    # Mon
2023-08-18 06:00 london-member2@example.com    # Fri

US Team

The US team uses a simple daily rotation (specifically the Simple Daily Rotation example ).

Sample shifts

2023-07-24 10:00 member2@example.com    # Mon
2023-07-25 10:00 member1@example.com    # Tue
2023-07-26 10:00 member3@example.com    # Wed
2023-07-27 10:00 member4@example.com    # Thu
2023-07-28 10:00 member3@example.com    # Fri
2023-07-29 10:00 member4@example.com    # Sat
2023-07-30 10:00 member1@example.com    # Sun
2023-07-31 10:00 member2@example.com    # Mon

Fully Rendered Schedule

When viewed in the On-Call Optimizer web UI, or exported to an on-call products the “fully rendered” schedule combining combining all of the above configuration will result in the following shifts:

# Rendered in UTC
2023-07-24 05:00 london-member1@example.com    # Mon 6am LON / 10pm Sun SFO
2023-07-24 17:00 member2@example.com           # Mon 6pm LON / 10am Mon SFO
2023-07-25 05:00 london-member1@example.com    # Tue 6am LON / 10pm Mon SFO
2023-07-25 17:00 member1@example.com           # Tue 6pm LON / 10am Tue SFO
2023-07-26 05:00 london-member1@example.com    # Wed 6am LON / 10pm Tue SFO
2023-07-26 17:00 member3@example.com           # Wed 6pm LON / 10am Wed SFO
2023-07-27 05:00 london-member1@example.com    # Thu 6am LON / 10pm Wed SFO
2023-07-27 17:00 member4@example.com           # Thu 6pm LON / 10am Thu SFO
2023-07-28 05:00 london-member3@example.com    # Fri 6am LON / 10pm Thu SFO
2023-07-28 17:00 member3@example.com           # Fri 6pm LON / 10am Fri SFO
2023-07-29 05:00 london-member3@example.com    # Sat 6am LON / 10pm Fri SFO
2023-07-29 17:00 member4@example.com           # Sat 6pm LON / 10am Sat SFO
2023-07-30 05:00 london-member3@example.com    # Sun 6am LON / 10pm Sat SFO
2023-07-30 17:00 member1@example.com           # Sun 6pm LON / 10am Sun SFO
2023-07-31 05:00 london-member2@example.com    # Mon 6am LON / 10pm Sun SFO
2023-07-31 17:00 member2@example.com           # Mon 6pm LON / 10am Mon SFO

Return to the list of other examples

7.1.7 - Follow the sun (multiple locations)

Demonstrates a schedule balancing three 8-hour shifts that follow the sun around the globe.

In this example there are 3 teams, one in London, one in Sydney and one in San Francisco, who work together to provide an overall on-call schedule. The London and San Francisco teams are equally sized and participate every day of the week, while the Sydney team with fewer people only participates during their week days, with the weekend shifts covered only from London and San Francisco.

As with the more basic follow the sun example this example is constructed with one schedule per team, combined with a fourth co-ordinating schedule that is used to provide the overall schedule.

Main Schedule Shift Configuration Entries

The main schedule is configured in the Australia/Sydney time zone in order to easily highlight the shift start times that relate to weekend coverage being provded in London and San Francisco.

The first 3 shift configurations follow a simple repeating pattern for each of the weekdays, while the final 3 shift configuration entries deal with the slightly more complex set of shifts required to implement the different shift lengths for London and San Francisco that are required to provide the desired weekend coverage.

Day:Hour:Minute:Primary:Secondary:
Weekdays1000syd-team[Not assigned]
Weekdays1800lon-team[Not assigned]
Weekdays0200sfo-team[Not assigned]
Sat1002sfo-team[Not assigned]
Sun,Mon0300sfo-team[Not assigned]
Weekends1500lon-team[Not assigned]

Sample shifts

2023-07-24 03:00 sfo-team
2023-07-24 10:00 syd-team
2023-07-24 18:00 lon-team
2023-07-25 02:00 sfo-team
2023-07-25 10:00 syd-team
2023-07-25 18:00 lon-team
2023-07-26 02:00 sfo-team
2023-07-26 10:00 syd-team
2023-07-26 18:00 lon-team
2023-07-27 02:00 sfo-team
2023-07-27 10:00 syd-team
2023-07-27 18:00 lon-team
2023-07-28 02:00 sfo-team
2023-07-28 10:00 syd-team
2023-07-28 18:00 lon-team
2023-07-29 02:00 sfo-team
2023-07-29 15:00 lon-team
2023-07-30 03:00 sfo-team
2023-07-30 15:00 lon-team
2023-07-31 03:00 sfo-team
2023-07-31 10:00 syd-team
2023-07-31 18:00 lon-team

London Team Shift Configuration Entries

The London team schedule (configured in the GMT time zone) uses the same 4 day/3 day split as seen in the previous follow the sun example.

Day:Hour:Minute:Primary:Secondary:
Mon0600BEST_MEMBER[Not assigned]
Fri0600BEST_MEMBER[Not assigned]

The 06:00 UTC shift start time is selected to match the 22:00 America/Los_Angeles shift start time in the main schedule.

Sample shifts

2023-07-24 06:00 london-member1@example.com    # Mon
2023-07-28 06:00 london-member3@example.com    # Fri
2023-07-31 06:00 london-member2@example.com    # Mon
2023-08-04 06:00 london-member4@example.com    # Fri
2023-08-07 06:00 london-member3@example.com    # Mon
2023-08-11 06:00 london-member1@example.com    # Fri
2023-08-14 06:00 london-member4@example.com    # Mon
2023-08-18 06:00 london-member2@example.com    # Fri

US Team

The US team uses a simple daily rotation (specifically the Simple Daily Rotation example ).

Sample shifts

2023-07-24 10:00 member2@example.com    # Mon
2023-07-25 10:00 member1@example.com    # Tue
2023-07-26 10:00 member3@example.com    # Wed
2023-07-27 10:00 member4@example.com    # Thu
2023-07-28 10:00 member3@example.com    # Fri
2023-07-29 10:00 member4@example.com    # Sat
2023-07-30 10:00 member1@example.com    # Sun
2023-07-31 10:00 member2@example.com    # Mon

Sydney Team

The small Sydney team uses basic week long rotations.

2023-07-24 10:00 person2@example.com
2023-07-31 10:00 person3@example.com
2023-08-07 10:00 person1@example.com
2023-08-14 10:00 person3@example.com

Fully Rendered Schedule

When viewed in the On-Call Optimizer web UI, or exported to an on-call products the “fully rendered” schedule combining all the individual shifts will be as follows:

# Rendered in UTC
2023-07-24 00:00 person2@example.com           # Mon 10am SYD / Sun 5pm SFO / Mon 1am LON
2023-07-24 08:00 london-member1@example.com    # Mon 6pm SYD / Mon 1am SFO / Mon 9am LON
2023-07-24 16:00 member2@example.com           # Tue 2am SYD / Mon 9am SFO / Mon 5pm LON
2023-07-25 00:00 person2@example.com           # Tue 10am SYD / Mon 5pm SFO / Tue 1am LON
2023-07-25 08:00 london-member1@example.com    # Tue 6pm SYD / Tue 1am SFO / Tue 9am LON
2023-07-25 16:00 member1@example.com           # Wed 2am SYD / Tue 9am SFO / Tue 5pm LON
2023-07-26 00:00 person2@example.com           # Wed 10am SYD / Tue 5pm SFO / Wed 1am LON
2023-07-26 08:00 london-member1@example.com    # Wed 6pm SYD / Wed 1am SFO / Wed 9am LON
2023-07-26 16:00 member3@example.com           # Thu 2am SYD / Wed 9am SFO / Wed 5pm LON
2023-07-27 00:00 person2@example.com           # Thu 10am SYD / Wed 5pm SFO / Thu 1am LON
2023-07-27 08:00 london-member1@example.com    # Thu 6pm SYD / Thu 1am SFO / Thu 9am LON
2023-07-27 16:00 member4@example.com           # Fri 2am SYD / Thu 9am SFO / Thu 5pm LON
2023-07-28 00:00 person2@example.com           # Fri 10am SYD / Thu 5pm SFO / Fri 1am LON
2023-07-28 08:00 london-member3@example.com    # Fri 6pm SYD / Fri 1am SFO / Fri 9am LON
2023-07-28 16:00 member3@example.com           # Sat 2am SYD / Fri 9am SFO / Fri 5pm LON
2023-07-29 05:00 london-member3@example.com    # Sat 3pm SYD / Fri 10pm SFO / Sat 6am LON
2023-07-29 17:00 member4@example.com           # Sun 3am SYD / Sat 10am SFO / Sat 6pm LON
2023-07-30 05:00 london-member3@example.com    # Sun 3pm SYD / Sat 10pm SFO / Sun 6am LON
2023-07-30 17:00 member1@example.com           # Mon 3am SYD / Sun 10am SFO / Sat 6pm LON
2023-07-31 00:00 person3@example.com           # Mon 10am SYD / Sun 5pm SFO / Mon 1am LON

Return to the list of other examples

7.2 - Constraint Optimizing Algorithm

Learn how On-Call Optimizer creates balanced schedules using availability information.

On-Call Optimizer uses constraint programming algorithms to solve the challenge of producing an optimal schedule.

Goals

To determine what an optimal schedule looks like, On-Call Optimizer is programmed with a series of goals that are desired for a schedule. A perfect schedule would meet every goal, an optimal schedule comes as close as possible to meeting each goal given the constraints dictated by the shift configuration of the schedule and the availability information for each of the members.

The goals that On-Call Optimizer tries to achieve focus on maximizing the balance of the schedule over the mid to long term, while also maintaining the quality of each individual assignment in the short term. Typical goals that On-Call Optimizer tries to achieve include:

  • A member should not be assigned to a shift blocked in their availability information.
  • Each member should have a fair share of shifts, taking into account weekends, holidays and out-of-business hours shifts as distinct types.
  • A member should be assigned a shift marked as preferred in their availability information.
  • A member should not have consecutive shifts.

High Level Overview

On-Call Optimizer uses a constraint satisfying algorithm to find an solution (aka assignment) that is both feasible and comes closest to meeting each goal.

The input to the algorithm starts with a set of variables referenced by a tuple of (start time, assignee role, member). So for an example assignment for a single primary assignee in a schedule of 5 members for 7 shifts, there will be 35 different shift variables input into the algorithm.

Next hard constraints which determine whether or not a particular assignment is feasible or not are configured. In the simplest case the only hard constraint would be that the sum of all variables matching (start time, assignee type, *) must be equal to 1 - e.g. only solutions that assign a single member to a shift are feasible.

After the hard constraints additional constraints representing each desired goal for the schedule are configured. Goal based constraints utilize a weight factor rather than requiring equality to a fixed value and match against particular combination of shift variables that are set to represent each potential solution, A score is calculated for each constraint in each potential solution by multiplying the value of the matching shift variables against the weight of the constraint. The overall sum of these scored constraints is reported as the “cost” of the assignment solution, and the assignment solution with the lowest overall cost represents the optimal assignment given the set of inputs.

Example weighting factors

Illustrative weighting factors for the typical goals above might look like the following:

  • Any assignment matching a blocked shift: >2.0, ensuring that such assignments are only ever used as a last resort if no other possibilities exist.
  • Any shift assignment above or below the ideal balance are penalized: 1.0
  • Any assignment of a preferred shift: -0.5, the negative weighting results in a favourable score, making any assignment containing this shift preferred over an assignment that does not.
  • Any consecutive shift assignment for a member: 0.3

In practice the specific weighting factors used are much more complex and are selected based on On-Call Optimizer’s accumulated expertise of the ideal weightings for different schedule configuration patterns.

BEST_MEMBER

The “BEST_MEMBER” placeholder is used in the shift configuration for each schedule to denote that the assignee for the specified shift should be chosen from among the members of the schedule based on the output of the above algorithm.

Therefore the “BEST_MEMBER” for a shift will be the member assigned to the shift variable for that shift in the solution that resulted in the lowest overall cost.

Importantly “best” does not mean “perfect”. In situations where there are competing constraints, the best solution may require assigning a member to consecutive shifts or ignoring their preferences in order to achieve an overall optimum assignment.

7.3 - Extension logic

Learn how On-Call Optimizer generates future shift entries

On-Call Optimizer shifts are defined by the day of the week, hour and minute at which they start (e.g. Mon 10:00) and therefore no shift can ever be longer than 7 calendar days. The following details describe at a high-level how On-Call Optimizer uses this configuration data to generate specific shifts with fully-defined start and end times.

Basic procedure

Given a starting timestamp:

  1. Loop through all defined shift configurations; discard any with a starting day that does not match the weekday.
  2. From the remaining shift configurations; discard any with a starting hour before the hour of the day.
  3. From the remaining shift configurations; discard any with a starting minute before the minute of the hour.
    • Sort any remaining shift configurations by hour, then minute in ascending order and then select the first (earliest hour, minute). The Day, Hour and Minute from this selected configuration is the starting time of the next shift in the schedule.
    • If no matching shift configurations remains, advance the timestamp to the end of the day (00:00 next day) and repeat the process.

Use

The basic procedure can be used directly with an arbitrary timestamp to find the starting time of the next shift in the schedule.

To find the starting time of the shift that will follow an existing shift in the schedule, the procedure must be executed with the starting timestamp set to 1 minute after the starting time of the shift to be followed - any end time for the existing shift should be ignored. See the example below for an illustration of why this is important.

All time and date calculations during the extension process must be performed with respect to the time zone of the schedule itself.

Matching of day wildcards

  • A shift configured with the day set to the Daily wildcard will match any timestamp.
  • A shift configured with the day set to the Weekdays wildcard will match any timestamp, where the abbreviated name of the day of the week (e.g. %a strftime(3) component) in the time zone of the schedule is one of the Mon-Fri set.
  • A shift configured with the day set to the Weekends wildcard will match any timestamp, where the abbreviated name of the day of the week (e.g. %a strftime(3) component) in the time zone of the schedule is one of Sat or Sun.

Examples

For simplicity these examples do not display the time zone, which is not relevant but can be assumed to be UTC.

Basic

Assuming a shift configuration of Mon 10:00, Fri 17:00, when executed for the week starting April 1st 2024, the next 4 returned shifts would be:

  • 2024-04-01 10:00
  • 2024-04-05 10:00
  • 2024-04-08 10:00
  • 2024-04-12 10:00

This provides a schedule with a ~5-day shift covering the working week, and a ~2-day shift covering the weekend.

Daily and Weekends

Assuming a shift configuration of Daily 10:00, Weekends 22:00, when executed on April 4th 2024, the next 7 returned shifts would be:

  • 2024-04-04 10:00
  • 2024-04-05 10:00
  • 2024-04-06 10:00
  • 2024-04-06 22:00
  • 2024-04-07 10:00
  • 2024-04-07 22:00
  • 2024-04-08 10:00

This provides a schedule with 24-hour shifts during weekdays, but adds an additional “overnight” shift on weekends resulting in a split of each weekend day (Sat, Sun) into two 12-hour shifts.

Extension after configuration change

This example explains why it is important to extend from 1 minute after the start of the final existing shift, rather than from the end of the existing shift.

  • Original shift configuration: Mon 10:00
  • Existing shift: Mon 1st Apr 2024 10:00 - Mon 8th Apr 2024 09:59
  • New shift configuration: Mon 09:00
  • Expected next shift: Mon 8th Apr 2024 09:00 - Mon 15th Apr 2024 08:59

Moving the expected start time back by 1 hour creates an ambiguous situation for the schedule, either the next shift needs to start 1 hour prior to the end of the existing last shift, or if the end of the last shift is strictly observed and extension begins from 10am on Monday the 8th, the next starting time is not until 9am the following Monday, creating a 7-day gap in the schedule!

While either scenario will likely require user input to resolve and confirm the desired intention, On-Call Optimizer prefers to generate schedules that provide continuous coverage and therefore adopts the rule describe above - extension starts from the minute after the last existing shift starts, resulting in shifts that overlap the existing schedule by returned.

7.4 - Authentication and Authorization

Authentication and authorization with third-party integrations

On-Call Optimizer exclusively uses OAuth and OIDC for authorization and authentication, there is no support for accessing On-Call Optimizer via username/password.

On-Call Optimizer adheres to the principle of least privilege, requesting only the minimum OAuth permissions and scopes required to complete the action requested following the principle of incremental authorization. This allows users to mix and match between different providers without needing to grant an overly wide set of permissions to On-Call Optimizer.

Permissions requested at Login

On-Call Optimizer requests an OIDC login flow from the authentication provider requesting the OIDC standard email and profile grants. On-Call Optimizer stores the email and name returned in the provided ID token.

When logging in with a Google Workspace, or Microsoft organizational account, On-Call Optimizer will also retrieve and store the ID, name and primary domain of the workspace/organization of your account in order to create and associate your On-Call Optimizer account with a corresponding On-Call Optimizer Organization. For Microsoft accounts the User.Read permission is requested in order to retrieve this information as it is not included directly in the ID token.

All other information available to On-Call Optimizer during the login process is discarded. In particular, once the login process has completed, On-Call Optimizer does not retain or store the access or refresh tokens provided by the OIDC login flow.

Permissions requested when connecting a calendar

When connecting to a calendar provider, On-Call Optimizer uses a standard OAuth 2.0 authorization code flow to obtain a read-only access token, along with an offline access (refresh) token to allow continuing access to the users calendar.

Permissions requested when connecting an on-call product

On-Call Optimizer uses API tokens for access to any configured on-call product schedules. A read-only API token is supported when an on-call product is used a a source for On-Call Optimizer schedule configuration. A read-write API token is required when an on-call product is configured as a destination for a schedule.

Permissions requested when connecting to Slack

When the On-Call Optimizer Slack app is installed for a Slack Workspace, On-Call Optimizer receives an OAuth 2.0 access and refresh token which are used to access the Slack API. The following scopes are required for the On-Call Optimizer Slack app:

Permissions Summary

ActionScopes RequestedIncludes Offline AccessNote
Loginemail, profileYes [0]
LoginUser.ReadYes [0]Microsoft accounts only
Connect to Calendarread only [1]Yes
Connect to On-Call ProductAPI KeyYes
Slack App Installapp_mentions:read, channels:read, groups:read,im:read, chat:write, im:history, reactions:read, reactions:writeYes

[0]: The OIDC protocol includes the offline access scope by default, however On-Call Optimizer does not retain the provided refresh (or access) tokens, so no offline access is available to On-Call Optimizer, even though the permissions screen seen by the user indicates it may be.

[1]: Refer to the calendar provider for details on the specific scope name: Google, Outlook

7.5 - Integration Points

On-Call Optimizer provides numerous integration points to enable interoperation with other software.

Schedule Configuration

On-Call Optimizer supports import of the basic configuration of a schedule from supported on-call products.

Schedule Assignments

On-Call Optimizer supports export of the shift assignments for a schedule to supported on-call products.

Availabilty Information

Notification and Messaging

  • On-Call Optimizer supports email notifications for new assignments and new swap requests.
  • On-Call Optimizer has an integrated Slack App which in addition to providing notification and messaging functionality, also allows interaction with On-Call Optimizer schedules from within the Slack UI.

Additional Integrations

Additional integrations will be added as demand and development capability allow.

Please contact us, if you would like to request integration with a product not yet supported.

API and Event Notifications

On-Call Optimizer functionality can be made available via API or event (e.g. webhook) based methods upon request.

7.6 - Notifications

Discover available notifications and how to configure when and how On-Call Optimizer will notify you of relevant events.

Notification Philosophy

On-Call Optimizer aims to provide relevant and useful notification of key events and situations to all interested parties while minimizing unnecessary distraction and noise. To achieve this aim On-Call Optimizer provides a highly configurable notification framework which recognizes that what is relevant varies can vary significantly between individuals, teams and schedules!

This page describes the available notifications that On-Call Optimizer can generate, how they can be customized and how they are configured.

Notification Methods

To select your preferred notification method, use the selector on the profile page (also accessible by clicking the user icon in the top right corner of On-Call Optimizer and selecting My profile from the drop-down menu).

By default, all users will be notified via email, to the address associated with the account used to login.

Some users of On-Call Optimizer may also have the option to receive notifications via Slack. Slack notifications are available to members with an organization linked account where the organization in On-Call Optimizer has been linked to a Slack workspace. Details on whether these conditions are met can be found by clicking the Messaging item from the Integrations section of the menu sidebar.

Schedule Assignments

On-Call Optimizer supports export of the shift assignments for a schedule to supported on-call products.

Availabilty Information

Notification and Messaging

  • On-Call Optimizer supports email notifications for new assignments and new swap requests.
  • On-Call Optimizer has an integrated Slack App which in addition to providing notification and messaging functionality, also allows interaction with On-Call Optimizer schedules from within the Slack UI.

Additional Integrations

Additional integrations will be added as demand and development capability allow.

Please contact us, if you would like to request integration with a product not yet supported.

API and Event Notifications

On-Call Optimizer functionality can be made available via API or event (e.g. webhook) based methods upon request.

7.7 - Organization Support

Providing consistent visibility and management of schedules and users across your organization.

Organization support in On-Call Optimizer provides many benefits for larger teams including the ability for members to view schedules within the organization that they are not directly members of.

Organization Basics

An organization in On-Call Optimizer is inherited from the organizational information provided by the login identify provider. When the identity token resulting from a successful login provides organizational metadata your On-Call Optimizer account will be associated with the corresponding organization entity in On-Call Optimizer.

The supported organizational identity providers are:

  • Google Workspace
  • Microsoft Work accounts with an associated organization.

On-Call Optimizer’s organizational features cannot be used when authenticating from a consumer Gmail or Outlook personal account.

To check whether your On-Call Optimizer account is associated with an organization, click on the profile icon in the top right corner of the app. Organization accounts will show an organization icon and name between your name and email and the ‘My profile’ link. If you do not see this entry, your On-Call Optimizer account is not associated with an organization.

Organizational details can be viewed on the organization profile page which is accessible by clicking on the link in the user profile menu described in the previous paragraph.

Organization Resource Ownership

Most resources (including Schedules, On-Call Product and Messaging integrations) created by an On-Call Optimizer account belonging to an organization will be owned by the organization rather than the individual.

The only exception to this are Calendar integrations, which by their nature are always owned by the individual who created them.

Organization Roles

Each member of an organization in On-Call Optimizer belongs to a role which grants permissions to perform certain actions. The available roles are:

Organization Admin

  • Can participate in the schedules they have been added to according to their assigned schedule role.
  • Can change the organization role of any member of the organization.
  • Are automatically granted all of the organizational permissions available to members described below.

The first user to login to On-Call Optimizer from an organization will be assigned the organization admin role, subsequent users will be assigned as organization members.

Organization Member

Organization members can participate in the schedules they have been added to according to their assigned schedule role.

The organization member role can also be granted any or all of the following permissions on the organization:

  • View all schedules - Defaults to true. Allows members of your organization to view schedules in the organization that they are not members of.
  • Manage schedules - Defaults to false. Allows members of your organization to create schedules, and delete schedules on which they hold the schedule admin role.
  • Manage Integration Connections - Defaults to false. Allows members of your organization to create, update and delete integration connections such as On-Call and Messaging products.

8 - Frequently Asked Questions

Find answers to common questions about On-Call Optimizer.

How good are the generated schedules?

The quality of each generated schedule depends primarily on the degree of constraint created by the availability information On-Call Optimizer is working with for a schedule.

On-Call Optimizer is capable of generating an optimal schedule that completely meets each of the goals, but more commonly a perfect schedule is not available with the given inputs and the weights must be used to determine how to prioritize against the goals.

On-Call Optimizer provides detailed scoring data for the generated assignments to help you understand this process and what could be changed to improve the generated schedules if you are not happy with the quality.

To maximise On-Call Optimizer’s ability to generate optimal schedules, it is recommended that you consider using shorter shift lengths (e.g. 12hrs, 1 day) rather than longer shifts (e.g. entire week) as this provide more opportunities to schedule around the constraints of team members while maintaining fairness and respecting preferences.

Can additional logic be be added to the algorithm?

Yes! Subject to prioritization against other feature requests and roadmap items, we are very happy to consider adding further goals or constraints for the optimizer to consider.

Get in touch by filling out the form at the bottom of the page and let us know what you would find useful.

9 - What's New

On-Call Optimizer is continuously improving. Get the details on the latest changes and updates.

The following changes were released to On-Call Optimizer in November 2024.

Product Improvements

  • Support for importing calendars from any product capable of generating an iCalendar (ICS) feed. More details
  • The badges displayed beside the name of a schedule linked with an external system (e.g. Pagerduty) have been improved to better represent the configuration of the link, in particular whether it is used to import configuration, export shifts or both. Additional documentation has also been added to explain the concept of a linked schedule.

Certifications

Significant progress has been made in On-Call Optimizer’s certification journey during November:

  • Advantage Partners has been engaged to complete a SOC2 audit of On-Call Optimizer.
  • Capture the Bug has been engaged to complete a black box penetration test of On-Call Optimizer.

Bugfixes and minor changes

In addition to the changes described above, the following bug fixes and minor changes were also released in October 2024.

  • The “retain events” setting on individual calendars has been removed to simplify the product. User feedback showed this feature to be both confusing and infrequently required. Removing or deselecting a calendar will now cause all events imported from that calendar to be removed and unavailable for use in future assignments.

For more details on older changes, please select a month from the list below.

9.1 - November 2024

The following changes were released to On-Call Optimizer in November 2024.

Product Improvements

  • Support for importing calendars from any product capable of generating an iCalendar (ICS) feed. More details
  • The badges displayed beside the name of a schedule linked with an external system (e.g. Pagerduty) have been improved to better represent the configuration of the link, in particular whether it is used to import configuration, export shifts or both. Additional documentation has also been added to explain the concept of a linked schedule.

Certifications

Significant progress has been made in On-Call Optimizer’s certification journey during November:

  • Advantage Partners has been engaged to complete a SOC2 audit of On-Call Optimizer.
  • Capture the Bug has been engaged to complete a black box penetration test of On-Call Optimizer.

Bugfixes and minor changes

In addition to the changes described above, the following bug fixes and minor changes were also released in October 2024.

  • The “retain events” setting on individual calendars has been removed to simplify the product. User feedback showed this feature to be both confusing and infrequently required. Removing or deselecting a calendar will now cause all events imported from that calendar to be removed and unavailable for use in future assignments.

9.2 - October 2024

The following changes were released to On-Call Optimizer in October 2024.

29 Oct 2024 - Add/modify members on linked schedules

Membership options for schedules linked with an on-call product are now more flexible:

  • Additional members not present in the on-call product can now be added to the schedule in order to grant administration of viewer privileges. Members added directly to On-Call Optimizer in this way are not eligible for assignment in schedules.
  • Members sychronized from the linked on-call product schedule can be marked as ineligible for assignment in On-Call Optimizer to temporarily or permanently exclude them from generated assignments.

Both capabilities can be accessed from the Members tab of a schedule. Please refer to the Schedule Members docs for further details.

16 Oct 2024 - Auto-invite configuration

A new setting to control whether On-Call Optimizer will automatically send invitation emails to newly added members of a schedule has been added.

Previously On-Call Optimizer attempted to allow the user to choose behaviour in real-time by providing several different action buttons during the creation or modification of a schedule.

For more details regarding the operation of this setting (which defaults on), please refer to the documentation.

15 Oct 2024 - Tabbed UI for schedules

The schedule pages and configuration have been re-organized into separate tabs to improve the usability, navigation and discoverability of the various aspects of a schedule.

Please take some time to explore each of the tabs and let us know what you think.

Notable relocations:

  • The members of the schedule are now configured and managed on a top-level page accessed from the Members tab.
  • Settings related to automatic assignment are now on a separate page accessed by clicking the wrench icon beside the Next Shift Assignment heading on the Overview or Assignments tabs.
  • Destinations for the schedule have been promoted to a top-level tab, rather than being hidden at the bottom of the previous edit schedule page.

Bugfixes and minor changes

In addition to the changes described above, the following bug fixes and minor changes were also released in October 2024.

  • The case of the admin of a schedule configured to synchronize from a source schedule being removed is now correctly handled by marking the member as un-assignable in On-Call Optimizer, but leaving them as the admin of the schedule. Previously the synchronization failed as it attempted to remove them from the schedule entirely, leaving the schedule without an admin!
  • The ability to change the roles and assignable status of schedule members is now present on the Members tab of a schedule.
  • Fixed import of Pagerduty schedules containing references to users that no longer exist in Pagerduty.
  • Improved UX for schedule member role modifications to only show options available to users based on their current role.
  • Fixed a bug preventing the addition of Schedule destinations in certain circumstances.
  • Fixed bug preventing recognition of noc as a valid availability block keyword.
  • Fixed an issue where the import of historical shifts prior to the auto-assignment start date could overwrite confirmed assignments in On-Call Optimizer if one of the imported shifts spanned the start date itself.
  • The previous validation requirement that the auto-assignment start date and shift configuration days must much has been removed. This means the first assigned shift may occur on a date after the configured start date (e.g. if the start date is a Monday and the configuration only has shifts starting on Wednesday).

9.3 - September 2024

The following changes were released to On-Call Optimizer in September 2024.

4 Sep 2024 - Schedule balance and assignment quality statistics

On-Call Optimizer now provides detailed statistics on the balance and assignment quality of a schedule to assist in the understanding and management of a schedule.

Schedule balance is calculated and managed over the mid to long term timeframe and ensures that each member of the schedule is assigned a proportionate share of the total number of shifts.

Assignment quality is calculated and managed for each individual assignment and takes care of ensuring that member’s availability information is respected, shifts are not too close together and many other related factors.

More details regarding schedule balance…

More details regarding assignment quality…

Balance improvements for schedules with partial shift swaps

In conjunction with the new balance statistics now being reported, the handling of partial shift swaps has been improved to ensure that the balance of the schedule is maintained even when partial swaps are required.

Prior to these improvements balance was calculated by counting the number of shifts of each type assigned to each member, with fractional swaps resulting in many different types of shifts of varying duration being created and balance being managed within each type individually.

The improved approach maintains a record of the original shift type any partial shift originated from so the appropriate fractional share of the shift can be accounted to the member in the balance calculation.

9.4 - August 2024

The following changes were released to On-Call Optimizer in August 2024.

28 Aug 2024 - Blocked swap requests are deferred not declined

When a swap is requested On-Call Optimizer previously automatically declined the request on behalf of a member if their availability information contained a block covering the shift being swapped. Based on customer feedback, this behaviour is now changed to only defer the swap request so that the member has the opportunity to accept the swap if their circumstances have changed.

Please refer to the swap documentation for more details on the differences between declining and deferring a swap request.

02 Aug 2024 - Organization Support and Schedule Permissions

Organization Support

On-Call Optimizer now recognizes the organizational metadata provided by Google and Microsoft when authenticating from a Google Workspace or Microsoft Work account and places the On-Call Optimizer account into a corresponding organization.

The organization can be used to manage permissions for users and schedules across the organization.

More details…

Schedule Permissions

Schedule members can now be assigned a role which determines the permissions they have within the schedule. The three available roles are Admin, Member and Viewer.

Historically members had permissions equivalent to Viewer, but based on feedback and collected experience all new members added to schedules will default to being assinged the Member role, allowing them to configure and manage the settings and assignments of the schedule.

This change is being gradually deployed to Schedules and may not yet be visible in your schedule.

More details…

9.5 - July 2024

The following changes were released to On-Call Optimizer in July 2024.

30 July 2024 - Notification improvements

Notification for new assignments and new swap requests

On-Call Optimizer now generates notifications when a new assignment is confirmed for a schedule, and when a new swap request is created. These notifications can be received via email or Slack (via the new integration described below).

New assignment notifications are enabled by default and are sent to:

  • Each member of the schedule: containing the specific shifts newly assigned to that member.
  • Any linked Slack channel: describing the full set of shifts that were confirmed.

New swap request notifications are only enabled by default for Slack channels linked to a schedule. Individual members are able to opt-in if desired, but are not opted-in by default to avoid created unwanted duplication between notifying upon creation of the request, and the point at which the member receives the existing “swap response required” notification (which cannot be disabled).

More details…

Slack app

On-Call Optimizer now has a Slack app which can be used to interact with your schedules from within Slack to view current information and receive notifications for events such as new swap requests.

This feature is available to users with an organization linked account and requires installation of the On-Call Optimizer Slack App into the organizations Slack workspace.

Additional app functionality and notifications are planned in future releases.

More details…

9.6 - June 2024

The following changes were released to On-Call Optimizer in June 2024.

26 June 2024 - Swap Requests for partial shifts

Ability to request a swap for a partial shift

Swap Requests can now be created for partial periods during an assigned shift (e.g. one day during a week, or one hour during a day). To initiate a partial swap request, click the Edit start/end time button to the right of the Shift to Swap line when creating a swap request.

When responding to a swap request for a partial shift On-Call Optimizer attempts to identify equivalent partial shifts from your assignments to present as swap candidates.

More details…

Support for swapping the current shift

On-Call Optimizer now supports the ability to request a (partial) swap for the remainder of the current shift.

This change means swap requests now remain active and do not expire until the end of the shift being swapped, where previously they would expire at the start of the shift if a response had not yet been received.

More details…

17 June 2024 - Availability information changes

Only organized or accepted events can provide availability information

Availability information will now only be imported from events which you have either organized, or explicitly accepted.

Prior to this change, any event on a configured calendar which matched the filtering criteria would create an availability entry in On-Call Optimizer - including events created by other users on shared/team calendars and events you have been invited to (but have not accepted) from any user. The inclusion of these types of events almost always resulted in unwanted availability information being present in On-Call Optimizer which is prevented by this change.

This change will also remove any existing availability information that had been previously imported but does not match the new criteria to ensure consistency between On-Call Optimizer and the configured calendars.

More details…

Deletion of retained availability information

Availability information sourced from a calendar that is no longer connected can now be removed by clicking the red cross shown to the right of the entry in the availability list shown on the home page.

More details…

Configurable retention of availability information when disconnecting a calendar

On-Call Optimizer’s default behaviour of retaining any previously imported availability information for future use when a calendar is disconnected can now be disabled.

When disabled, any previously imported availability information is removed and will not be used in future assignments from the point when the calendar is disconnected.

More details…

12 June 2024 - UI improvements

To assist with navigation and understanding of where you are in the application, On-Call Optimizer now provides navigation breadcrumbs at the top of the main content area.

Integrations top-level menu

To reflect their central importance to On-Call Optimizer the external integrations for Calendar and On-Call Products have been promoted to top-level items in the side menu on the left of the page.

Pointers to this new location from the previous links within the user profile and schedules pages have been maintained while users adjust to the change.

Dark Mode

On-Call Optimizer now supports light and dark themes. The default theme will be chosen based on your operating system settings as reported by your web browser. To override the default theme use the selector to the left of the user menu in the top-right of the page. Your selected theme will be persisted in your account settings and will take effect across all logins.

5 June 2024 - Support non-continuous shifts

On-Call Optimizer can now support assignment of shifts that are non-continuous (e.g. contain gaps in coverage) which are typically used in situations where a schedule is desired to provide business-hours only coverage.

To use this feature, create a shift configuration for the time period where no assignee is desired and select the [Not Assigned] placeholder as shown in the example config.

More details….

9.7 - May 2024

The following changes were released to On-Call Optimizer in May 2024. For more recent changes see the current changelog.

30 May 2024 - Availability information displays

Two new ways to view the availability information associated with a schedule have been added.

Member availability summary

From the main schedule page, click the View member availability link under the list of members to view a summary of member availability matched to each shift of the next assignment planned for the schedule (top of page), as well as a list of the individual availability events that have been imported for each member of the shift (bottom of page).

The information on this page reflects the live view of future availability and will change over time as availability information is added, removed and updated from connected calendars for each member.

Assignment availability history

The availability information that was used when constructing each assignment is now displayed alongside the assignment for any pending or confirmed assignment.

The availability information shown on an assignment page is a snapshot of the actual data used in the assignment and is unaffected by any subsequent additions, removals or changes to the live availability data used for future assignments.

28 May 2024 - Require manual confirmation setting

Automatic assignment is now enabled for all schedules by default. The previous setting to disable automatic assignment has been replaced with a new setting to require manual confirmation of new automatic assignments.

The configuration of existing schedules is unchanged, by once automatic assignment is enabled it will not be able to be disabled again.

More details…

20 May 2024 - Assignment algorithm improvements

The assignment algorithm has been significantly improved to fix issues identified with providing balance between members when large imbalances are present in the historical schedule.

14 May 2024 - Swap Functionality

On-Call Optimizer’s long awaited swap functionality is now live!

When unexpected changes happen after the schedule has been confirmed users can now simply let On-Call Optimizer know which shift they are no longer able to perform and let On-Call Optimizer handle the logistics of finding an appropriate member or take or swap the shift with, saving time and hassle.

More details…

10 - Security and Trust

Understand On-Call Optimizer’s layered security approach and access trust resources.

10.1 - Reporting Issues

Vulnerability reporting and management for On-Call Optimizer

If you believe you have found a vulnerability in On-Call Optimizer, or are seeing unexpected behaviour that you believe has security implications, please follow the guidelines below.

Reporting a Vulnerability

To report a security concern, please email us at urgent-issue@oncall-optimizer.com with a description of the issue and steps to reproduce (if known).

Authenticated On-Call Optimizer users can access a token from the help page within the application at https://app.oncall-optimizer.com/help. Please include this token in your report to ensure faster notification and response.

Responsible Disclosure

Upon discovering a vulnerability:

  • Submit your findings to us via the instructions above.
  • We will acknowledge your submission within 1 working day and provide you with a named contact person.

Once a vulnerability has been reported

  • We will analyse your reported vulnerability and describe our planned response within 5 working days. If our response indicates that further time is needed beyond this initial period we will maintain regular updates to inform you of the progress.
  • We may invite you to further collaborate with us to ensure the vulnerability is dealt with as effectively and efficiently as possible.

Once a fix for a vulnerability has been deployed

  • We will notify any affected customers of the vulnerability and its solution.
  • If you desire, we will acknowledge your work in discovering, reporting and helping to resolve the vulnerability.

At all times, we expect you to act with professionalism, maintaining a high standard of conduct, including confidentiality. We expect any discovered vulnerability is reported directly to On-Call Optimizer in the first instance, in order to allow us to protect our customers as effectively as possible.

Acknowledgements

If you have found a vulnerability in On-Call Optimizer and follow the responsible disclosure process, we will acknowledge your contribution publicly on this page if requested.

10.2 - Certifications

Details of the standards and certifications On-Call Optimizer has achieved

On-Call Optimizer is designed and architected to be secure, protecting the confidentiality, integrity and availability of your data. We pursue independent third-party certifications to demonstrate our commitment to security and compliance.

Access to certification documents and related policies can be requested via our trust center.

SOC2

SOC2 is a widely recognized standard for security and compliance. On-Call Optimizer is committed to achieving a SOC2 Type 2 certification and is engaged in the audit process to fulfil this committment.

Latest Update

As of November 2024, Advantage Partners has been selected and a contract signed to complete a SOC2 audit of On-Call Optimizer. The final pre-review checks and evidence gathering work is underway with the SOC2 audit phase planned to commence in early 2025.

Next Steps

  • Complete audit pre-review engagement with Advantage Partners (December 2024).
  • Complete SOC2 audit and receive certification (Q1-Q2 2025).

Penetration Testing

In addition to security certification, On-Call Optimizer is also subject to external penetration testing to independently validate the security of our systems.

Latest Update

As of November 2024, Capture the Bug has been selected a contract signed to complete an external black-box penetration test of On-Call Optimizer.

Target Dates

  • End of December 2024: Testing work completed.
  • End of January 2025: Penetration test report available for customer distribution.

Other certifications

If you need evidence of compliance with another cerification, please contact us at compliance@oncall-optimizer.com.

10.3 - Trust Center

The central point for access to certification and policy documents for On-Call Optimizer customers.

To access the On-Call Optimizer trust center please visit the following address:

https://mkmba-limited.trustshare.com/

By default the trust center provides an overview of On-Call Optimizer’s compliance program. Please use the links provided in the center to request additional access to certification and policy documents if required.

If you have further questions, please contact us at compliance@oncall-optimizer.com.