Skip to main content

Dependency types: FS, SS, FF, SF with lead and lag

Project schedules are built from relationships between work items. These relationships — called dependencies — control the logical order in which work can happen. Raytio PPM supports the four standard dependency types along with lead and lag modifiers.

This page explains what each dependency type means and how lead and lag shift the timing.

The four dependency types

Every dependency links two work items. We call them the source and the target:

  • The source is the work item that drives the constraint
  • The target is the work item that is constrained
TypeNameMeaning
FSFinish-to-StartThe target cannot start until the source finishes
SSStart-to-StartThe target cannot start until the source starts
FFFinish-to-FinishThe target cannot finish until the source finishes
SFStart-to-FinishThe target cannot finish until the source starts

Finish-to-Start (FS)

FS is the most common dependency type — it represents straightforward sequencing. The target work item waits for the source to finish before it can begin.

Source:  ██████████
Target: ██████████
← source finishes, then target starts →

Example: "Foundation must be complete before framing can begin."

Start-to-Start (SS)

SS means the target cannot start until the source has started, but both can run in parallel after that point. This is useful when two activities can overlap but one must begin first.

Source:  ██████████████████
Target: ····██████████████████
↑ target starts after source starts

Example: "Pouring concrete and levelling can happen in parallel, but pouring must begin first."

Finish-to-Finish (FF)

FF means the target cannot finish until the source has finished. Both activities can be in progress at the same time, but the target must wait for the source to complete before it can also complete.

Source:  ██████████████████
Target: ██████████████████
↑ both finish together (or target finishes after)

Example: "Testing cannot be signed off until development is complete."

Start-to-Finish (SF)

SF is the rarest type. The target cannot finish until the source has started. This is typically used for just-in-time scheduling where a new activity replaces an ongoing one.

Source:            ██████████
Target: ██████████████
↑ target finishes when source starts

Example: "The old security shift cannot end until the new shift has started."

Lead and lag

Lead and lag modify a dependency by shifting the timing forward or backward. They are stored as a numeric value (in days by default) on each dependency record.

Lag (positive value)

Lag adds a waiting period between the two work items. The target must wait an additional number of days beyond what the dependency type requires.

FS + 3 days lag:

Source: ██████████
··· ← 3-day wait
Target: ██████████

Example: "After pouring concrete (source), wait 3 days for curing before framing (target)."

Lead (negative value)

Lead is a negative lag — it allows the target to start earlier than the dependency would normally permit. This represents overlap between activities.

FS + (-2 days) lead:

Source: ██████████████
Target: ██████████
↑ target starts 2 days before source finishes

Example: "Begin site preparation 2 days before demolition finishes — the last phase of demolition doesn't affect the prep area."

Combined examples

Dependencies can combine type and lead/lag to model complex scheduling relationships:

DependencyMeaning
FS + 0Standard sequencing: target starts when source finishes
FS + 5Target starts 5 days after source finishes (e.g. curing time)
FS - 2Target starts 2 days before source finishes (overlap)
SS + 3Target starts 3 days after source starts
FF + 0Target finishes when source finishes
FF - 1Target finishes 1 day before source finishes

Source and target terminology

Raytio PPM uses source and target to describe the two ends of a dependency:

  • source_work_item_id — the work item that drives the constraint
  • target_work_item_id — the work item that is constrained

These terms describe a logical relationship rather than a chronological one. For example, in an SF dependency the source can actually start after the target on the calendar, even though it is still the "source" of the constraint. The source drives the relationship; the target receives the constraint.

tip

When reading a dependency record, think: "The target is constrained by the source." The dependency type tells you how it is constrained (which start/finish events are linked), and the lag tells you by how much.

How dependencies are stored

Each dependency is a row in the ppm_work_item_dependencies table:

ColumnPurpose
source_work_item_idThe driving work item
target_work_item_idThe constrained work item
dependency_typeOne of FS, SS, FF, SF
lag_daysPositive for lag, negative for lead, zero for no offset

Dependencies are stored independently of the start and finish dates on the linked work items. See How PPM handles scheduling for how dependencies relate to schedule calculations.

Worked example: a small project schedule

Consider a project with four work items:

IDWork itemDuration
ADesign5 days
BBuild foundation10 days
CCure concrete3 days
DFrame structure8 days

Dependencies:

SourceTargetTypeLag
ABFS0
BCFS0
CDFS0

This creates a simple chain: Design (5d) -> Build (10d) -> Cure (3d) -> Frame (8d), totalling 26 days on the critical path.

Now suppose we change to:

SourceTargetTypeLag
ABFS0
BCFS+3
CDFS-2

Now there is a 3-day wait between foundation and curing (for the concrete to partially set), and framing begins 2 days before curing finishes (because the last day of curing doesn't affect the framing area). The schedule compresses while respecting real-world constraints.

Further reading