Overview of optimization (Mastermind) -- DEPRECATED

Skedulo uses optimization to efficiently schedule multiple jobs and resources across a scheduling window, taking into account multiple constraints such as skills matching, resource availability, location, and travel time.

Skedulo’s intelligent scheduling engine, Mastermind, automates the task of finding and scheduling the right resources to do the job.

The Mastermind engine supports the following scheduling rules:

  • Optimize to reduce total travel time of resources.
  • Optimize for a balanced workload by the total number of hours worked or the total number of jobs done.
  • Respects “include” and “exclude” account resource preferences against jobs (i.e., always give me the same resource, or never send me this resource).
  • Supports hard tag matches between resources and jobs.
  • Supports soft tag matches between resources and jobs with variable weighting.
  • Supports scheduling within SLAs (time constraints).
  • Supports snapping schedule to fixed time increments. Setting snap to fifteen minutes would ensure jobs always get scheduled at 11:00 am, 11:15 am, 11:30 am, etc.
  • Supports fixed padding between jobs.
  • Supports scheduling flexible activities in the schedule. This allows defining breaks (i.e., to have a 30-minute lunch break anywhere between 11:30 am to 1:00 pm).

The Mastermind engine also enhances the scheduling experience via our web app. It powers the following features:

  • Optimizes the schedule for a given date range across selected jobs and resources.
  • Lists optimized resources that are the “best-fit” for a given job and time-range, including all of the factors that have been previously defined (e.g., tags, breaks, business rules).
  • The scheduler can fix any conflicting schedules or re-arrange the results as they see fit (manual optimization) before “saving” the results, which commit the result into real resource allocations. The scheduler then continues with their typical activities, such as dispatching all of the jobs that were just optimized.

Two features use the scheduling engine:

  • Optimize - creates a valid schedule for multiple jobs and resources across a specified scheduling window based on the job requirements and scheduling constraints. 
  • Suggest - suggests a resource and time for a single job based on the job requirements and constraints. 


Optimize can be applied to a single job or multiple jobs. It calculates the best time slot and resource allocation based on specified scheduling preferences. You can also use it to reschedule existing jobs/appointments in the swimlanes to achieve the best result. Optimization allocates a time after considering all available resources based on their availability, location, and any specified job requirements.

To enable Optimize in the scheduling console, select one or more jobs from the work list. When Optimize is started, the scheduler is presented with several scheduling options to apply. Once these options are finalized, clicking the Run button will start the auto-scheduling.

On completion, Optimize presents the results (both success and failure). On exiting the results modal, there is an opportunity to adjust the job placings before saving them. Alternatively, the optimizer can be rerun (using different combinations of options) or be canceled altogether.

Automate scheduling with Optimization.


Suggest can only be applied to a single job. When it is run, it will recommend the best time slot for each available resource (i.e., multiple suggestions for one job)—allowing the scheduler to choose the best option.

To enable Suggest in the scheduling console, select a job card from the work list. When Suggest is initiated (a button on the job card), it calculates the optimal scheduling times for the selected job, represented by colored placeholders in the resources’ swimlanes. The scheduler can then choose the best candidate from these results by selecting one of the placeholders, or they can clear the suggestions to start afresh. Once placed, the job card can be adjusted in situ if required, via the swimlanes.

When viewing a job in the job details view, Suggest will automatically propose the optimal scheduling time for the available resources. The scheduler can select one of the placeholders to lock in the time, or they can ignore the suggestions and manually allocate the job.

Using the Suggest feature.

Optimize Rules

The scheduling engine respects certain business rules to find an optimal solution, they are listed below.

Rules Description
Required tags (tags with priority “Required”)

Does the resource have a skill that matches the job required attribute?

Only the resources that have a matching “required attribute” will be suggested.

See, also Job details (Tags).

Soft tags (tags that are not “Required” but have a “weighting”)

This soft constraint weighting determines how likely “Optimize” will select a resource matched to a particular job. The scheduling engine will try to schedule resources that contain the highest weighted tags.

Skedulo uses the following weighted values:

  • High (3).

  • Medium (2).

  • Low (1).

Note: This is a soft constraint and is not guaranteed.


Is the resource excluded by the client requesting the job?

  • If Yes, the resource is not considered available for the job.

  • If No, the resource is considered available for the job.

Exclusion can be used to set a hard rule for resources that cannot perform work for a particular customer, e.g., “these resources do not have the required security clearance to work for this organization."


Is the resource selected by the client requesting the job?

  • If Yes, the resource will be considered.

  • If No, the resource is excluded.

Inclusion can be used to set a hard rule for resources that can perform work for a particular customer, e.g., “these resources have the required security clearance to work for this organization."


Availability periods that are outside of the resource’s normal work periods (as determined using their availability template) will be taken into consideration.


The engine will not schedule any jobs within unavailability periods.

Time constraints

Does the job have any required time constraints?

  • If Yes, jobs will be scheduled within time constraints.

  • If there are multiple time constraints, the engine will guarantee to satisfy at least one.

Travel time Only resources that can travel to the job and complete it on time will be suggested.
Allocated resources If the job has a resource allocated, it will schedule to that resource.
Job priorities or urgency

Prioritizes jobs by scheduling the most important first.

This is a soft constraint.

Note: This is currently undergoing further development.

Shifts When an organization activates the shifts feature, only those resources that are assigned to an active (or published) shift will be considered.
Activities Activities created without an address will not be considered when calculating travel times or optimization.

Manage tags (Skills).

Soft Constraints

Soft constraints are not always guaranteed. The scheduling engine works based on what we call “global optimization.” What this means is that some soft constraints might be violated in favor of a better overall schedule, e.g., scheduling several lower priority jobs instead of a few high priority jobs.