About Dependencies
This video demonstrates the use of intra-project and cross-project task dependencies. Duration: 7 min.
A dependency is a relationship between tasks in the same project, or between tasks in different projects (see About Cross-Project Dependencies for more information). When you create a dependency, the tasks get an additional designation:
-
Predecessor task - A task that must start or finish before another task can start or finish.
-
Successor task - A task that may not start or finish before another task starts or finishes.
Dependencies can incorporate lead/lag time to designate days between dependent tasks. See Dependency Lag & Lead for more information.
Adding dependencies to your tasks will reschedule the project based on those dependencies. Note that any constraint placed on a task will affect, and sometimes prevent, the rescheduling. See Dependency Rules for more information.
In addition, you can create soft dependencies between projects. See Creating Soft Project Dependencies for more information.
Who Can Create Dependencies
Users with permission to edit tasks can create, edit, and delete dependencies.
How to Create Dependencies
There are several ways to create dependencies:
Dependency Types
You can set up four standard dependencies between tasks:
-
Finish-to-Start
-
Start-to-Start
-
Finish-to-Finish
-
Start-to-Finish
Each dependency is described in the table below.
Dependency |
Graphic Representation |
Definition |
Example |
---|---|---|---|
Finish-to-Start |
The start date of a successor task = ["finish date" of the predecessor (target date, or complete date if present) + lag] |
Task (2) cannot begin until task (1) completes. For example, if you have the two tasks "Build bookcase" and "Stain bookcase", "Stain bookcase" can't start until "Build bookcase" completes. This is the most commonly used dependency. |
|
Start-to-Start |
|
The start date of the successor task = (start date of predecessor + lag) |
Task (2) cannot begin until task (1) begins. For example, if you have the two tasks "Lay floorboards" and "Sand floorboards", "Sand floorboards" can't begin until "Lay floorboards" begins. |
Finish-to-Finish |
|
The target date of the successor task = ["finish date" of the predecessor target date or complete date, if present + lag] |
Task (2) cannot complete until task (1) completes. For example, if you have the two tasks, "Write specifications" and "Approve specifications", "Approve specifications" can't complete until "Write specifications" completes. |
Start-to-Finish |
|
The target date of the successor task = (start date of the predecessor + lag) |
Task (2) cannot complete until task (1) begins. Start-to-finish dependencies can be used for "just-in-time" scheduling up to a milestone or the project finish date to minimize the risk of a task finishing late if its dependent tasks slip. If a related task needs to finish before the milestone or project finish date, but it doesn't matter exactly when and you don't want a late finish to affect the "just in time" task, you can create a Start-to-finish dependency between the task you want scheduled just in time (the predecessor) and its related task (the successor). Then if you update progress on the successor task it won't affect the scheduled dates of the predecessor task. |
The relationship of dependencies to schedule dates is influenced by constraints, manually scheduled tasks, and parent-child relationships. Conflicts occur when dependencies cannot be met. See Schedule Conflicts for more information.
The following describe the expected behavior of dependencies in various scenarios.
Dependencies and Parent/Child Task Dates
When a parent task’s dates change due to a dependency, the child task(s) dates will change as much as the parent task's dates.
When a child task’s dates change due to a dependency, the parent task(s) dates will change as much as the child task's dates.
When a dependency is deleted, the dates of the predecessor and successor tasks will not change.
If a child task is deleted (with or without a dependency), the dates of the parent task(s) will change if the date range (earliest start date to latest target date) of the remaining child tasks is different than prior to the deletion of the child task.
Prohibited Dependencies
A predecessor task cannot be the same as the successor task.
A predecessor task cannot be an ancestor of the successor task, or the other way around.
A predecessor task cannot be its own successor.
Constraints and Dependencies
Changing the Constraint Type on tasks can affect the Start or Target Date of a task. Constraints can be flexible, semi-flexible or inflexible depending on the type of constraint (see About Constraints). Flexible constraints work with dependencies to schedule the task to occur as soon or as late as possible. Some constraints give you the ability to specify that the task needs to start or finish before a chosen date. These dependencies still can affect the task schedule. Inflexible constraints that restrict the task to start or finish on a specified date take priority over dependencies .
Linking Manually Scheduled Tasks
When you make a manually scheduled task a predecessor to another task, the successor task respects the dependency. The successor dates will be set relative to the predecessor task. Conversely, when you add a predecessor to a manually scheduled task, the manually scheduled task will not change its dates relative to the predecessor task.
Inactive Tasks and Dependencies
Inactive tasks do not impact the project schedule. If an inactive task is a predecessor to another task, the successor will not change relative to the inactive task's dates.