Project Scheduling Engine - Geneva
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-05-2015 10:24 AM
Yay! Geneva is released . We are super excited about the upcoming changes in Project Management and the completely overhauled project scheduling engine in Geneva. This post describes the Project Scheduling Engine behavior in Geneva release.
Before going ahead if you have not read the Project Scheduling Engine Fuji post please do that now. The engine behavior in Eureka/Fuji as outlined in that post still holds good for Geneva. But Geneva comes with tons of new features and tweaks which I will walk through in this post. Plus Geneva project scheduling engine is going to be a lot more performant than Fuji/Eureka.
The first big change in Geneva is the support for 4 new relation types
- Finish to Start
- Start to Start
- Finish to Finish
- Start to Finish
Let us go through each of these relations in details
Finish to Start
This was the only relation supported in Fuji. Now we support Finish to Start relation with lag and lead components.Let us see some examples at work
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-08 17:00:00 | 1 days | Project |
Now let us add an FS relation between Task 1 and Task 2.
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Finish to Start | 0 |
The result of adding the relation would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-11 17:00:00 | 4 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-11 08:00:00 | 2015-09-11 17:00:00 | 1 days | Project |
The successor Task 2 is now starting after finish of predecessor Task 1. And finish of Project has been pushed out by one day and project duration is also increased by one day.Now let's see how it behaves with lag/lead. Suppose we add FS relation with lag of 1 day
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Finish to Start | 1 days |
The result of adding the relation would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-14 17:00:00 | 5 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-14 08:00:00 | 2015-09-14 17:00:00 | 1 days | Project |
Task 2 starts after finish of Task 1 with one day lag. Since 2015-09-12 is a Saturday — a holiday in our schedule the task gets pushed to 2015-09-14 (Monday) and ends the same day. The overall project duration is now 5 days.A negative lag means a lead. So if we want to start successor Task 2 with lead of 1 day, this could be done as follows
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Finish to Start | -1 days |
The result of adding the relation would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-10 08:00:00 | 2015-09-10 17:00:00 | 1 days | Project |
The successor Task 2 now starts 1 day before finish of Task 1, hence it starts on the same day as Task 1 is finishing. Overall project end date or duration is not affected.
Start to Start
In a Start to Start relation, successor task can start on or after the predecessor starts. Again let us see some examples with the following project structure
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start On | 2015-09-10 08:00:00 | 2015-09-10 17:00:00 | 1 days | Project |
Let us add a SS relation between Task 1 and Task 2.
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Start to Start | 0 |
The result would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-08 17:00:00 | 1 days | Project |
The start date of Task 2 gets pushed ahead to start with Task 1. Also note the time constraint of Task 2 also gets changed. The effect of adding a Relation on Time constraint is explained below.Now let us add a SS relation between Task 1 and Task 2 with a lead.
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Start to Start | -1 day |
The result would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-09 08:00:00 | 2015-09-09 17:00:00 | 1 days | Project |
Task 2 now starts with a one day delay from start of Task 1.In the above example we will not be able to add Start to Start relation with a 1 day lag. If we add such a relation, start date of Task 2 would be pushed to 2015-09-07 and this date is before the Start date of the project and hence not supported. No task can start before the project start date.
Finish to Finish
In a Finish to Finish relation, successor task can finish only on or after the predecessor finishes. Let us see some examples with the following project structure
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-08 17:00:00 | 1 days | Project |
Let us add a FF relation between Task 1 and Task 2.
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Finish to Finish | 0 |
The result would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-10 08:00:00 | 2015-09-10 17:00:00 | 1 days | Project |
The end date of Task 2 gets pushed to 2015-09-10 17:00:00, which is the end date of Task 1. And start date of Task 2 is recalculated accordingly.Let us add a FF relation between Task 1 and Task 2 with a lag of 1 day.
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Finish to Finish | 1 day |
The result would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-09 08:00:00 | 2015-09-09 17:00:00 | 1 days | Project |
The end date of Task 2 will be set to one day before the finish of Task 1. And start date of Task 2 will be adjusted accordingly.Let us add a FF relation between Task 1 and Task 2 with a lead of 1 day.
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Finish to Finish | -1 day |
The result would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-11 17:00:00 | 4 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-11 08:00:00 | 2015-09-11 17:00:00 | 1 days | Project |
The end date of Task 2 will be set to one day after the finish of Task 1. And start date of Task 2 will be adjusted accordingly. The project also gets extended by one day with end date and duration of project getting changed.
Start to Finish
In a Start to Finish relation, predecessor must start on or before successor can finish.
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-08 17:00:00 | 1 days | Project |
Let us add a SF relation between Task 1 and Task 2.
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Start to Finish | 0 |
The result would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-11 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-09 08:00:00 | 2015-09-11 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-08 17:00:00 | 1 days | Project |
When we add a Start to Finish between Task 1 and Task 2, Task 1 start date gets pushed to end date of Task 2. Since as per the schedule working hours end at 17:00:00, Task 1 starts at 2015-09-09 08:00:00 (the next working day). The project also gets extended by one day.Let us add a SF relation between Task 1 and Task 2 with a lag of 1 day.
Parent | Child | Sub Type | Lag |
Task 1 | Task 2 | Start to Finish | 1 day |
The result would be
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-14 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-10 08:00:00 | 2015-09-14 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-08 17:00:00 | 1 days | Project |
When we add a Start to Finish between Task 1 and Task 2 with a lag of 1 day, Task 1 start date gets pushed to end date of Task 2 + 1 day. So Task 1 now starts on 2015-09-10 08:00:00 and ends on 2015-09-14 17:00:00. The project end date also extends.
Effect of Relation on Time Constraint
Any "Start on" task gets converted to "Start ASAP" task if the task is at the successor end of the relation (except in SF relation where predecessor get converted to "Start ASAP").
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ON | 2015-09-10 08:00:00 | 2015-09-10 17:00:00 | 1 days | Project |
Adding a FS relation between Task 1 and Task 2 would result in conversion of Time constraint of Task 2 to Start ASAP.
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-11 17:00:00 | 4 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ASAP | 2015-09-11 08:00:00 | 2015-09-11 17:00:00 | 1 days | Project |
Also the date of successor task would also be modified as per the relation constraints.
Retaining Start On tasks with their Start Dates
The scheduling engine gives flexibility to retain the constraint and lock-in the date/time of successor tasks while adding relation. For this you have to set the property "Retain start on constraint on tasks after adding relations" in Project > Preferences.Once the property is checked adding a relation would not modify the time constraint or start date of the successor task.In the above example adding the relation between Task 1 and Task 2 would result in no change on Task 2.
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | -- | |
1.1 | Task 1 | Start ASAP | 2015-09-08 08:00:00 | 2015-09-10 17:00:00 | 3 days | Project |
1.2 | Task 2 | Start ON | 2015-09-10 08:00:00 | 2015-09-10 17:00:00 | 1 days | Project |
Rollup of Project Start Date
By default the scheduling engine rollups the start date of project from project tasks. So Project Start date would always be the earliest task start date. But if you want the Project Scheduling engine to retain the Project Start date — after every recalculate — the property "Rollup project start date from tasks" should be unchecked under Project > Preferences.
Case "Rollup project start date from tasks" is true
Given a project
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | -- | 2015-09-08 08:00:00 | 2015-09-08 17:00:00 | 1 days | -- |
Add a task
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Task 1 | Start On | 2015-09-10 08:00:00 | 2015-09-10 17:00:00 | 1 days | Project |
The project would be modified as
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-10 08:00:00 | 2015-09-10 17:00:00 | 1 days | -- |
The project start date got rolled up from the task start date.
Case "Rollup project start date from tasks" is false
Given a project
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Project | 2015-09-08 08:00:00 | 2015-09-08 17:00:00 | 1 days | -- |
Add a task
# | Task | Time Constraint | Planned Start | Planned End | Planned Duration | Parent |
1 | Task 1 | Start On | 2015-09-10 08:00:00 | 2015-09-10 17:00:00 | 1 days | Project |
The project start date would not be modified in this case.
Automatic vs. Manual Projects
The calculation type field on project record decides if a Project is Manual or Automatic. For Automatic projects all the Project Scheduling rules mentioned here are applicable.For manual projects — only date rollups work. Adding relation to manual projects doesn't have any impact.Note: There is a change in behavior for Manual projects in Geneva compared to Fuji. In Fuji the scheduling engine is never invoked for manual projects and dates are not rolled up nor relations work. In Geneva we have enabled date rollups for manual projects.
Changing project start date
At any point of time the project start date can be changed and this would result in the following
- All asap tasks starting on the Project start date will be move to the project start date
- All start on tasks starting after the new project start date will be untouched
- All start on tasks starting before the new project start date will be converted to asap tasks and their dates would be set to the new project start date.
Debugging the EngineHow do I know if the Project Scheduling Engine is running when I save my records?
Check the logs — we always print these messages in the log
ProjectLoader: Load project...139260e537230200af1326877e41f1d9
ProjectLoader: Load Project 139260e537230200af1326877e41f1d9 Complete! in - 00:00:00 : 17
ProjectAction: Applying actions and recalculating the Project...24c9442537230200af1326877e41f149
ProjectAction: Recalculation Complete!
ProjectDoSaveWithoutBRs: Saving the project...24c9442537230200af1326877e41f149
ProjectDoSaveWithoutBRs: Save project without BR Complete! 24c9442537230200af1326877e41f149 in - 00:00:00 : 3
As the log indicates Engine works in a 3-step process
- Load the project
- Recalculate the project
- Save the project
If these 3 messages are not appearing in the log it indicates that engine is not working.
Project Scheduling Engine is not working for my projects?
- Check the calculation type of the project — for manual projects engine doesn't do full recalculate and ignore the relations
- The top task should be populated for the project and all the project tasks. Project engine will not work if the top task is not populated in all the records. Top task should be set to the project.
How do I derive detailed logs?
- Create a property "com.snc.pm.debug.enable" and set it to true
- Detailed method level logs will be logged by the project engine
- After debugging set the property to false
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-06-2015 03:46 AM
Yay! Geneva is released -> Where?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-06-2015 04:14 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-23-2015 09:01 AM
It's not open to the general public yet. But ServiceNow developers who are a part of the developer program and using a dev instance can now upgrade their dev instances to Geneva.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎11-09-2015 05:48 PM
Very helpful!
I'm super excited about the different task relationships, and also being able to better control auto-rollup of the project start date.
"Original approved projected start date"