Dependencies

Dependencies define the logical sequencing of work: task B cannot start until task A reaches a defined state. DPlan supports all four standard relationship types — FS, SS, FF, SF — with optional lag (delay) or lead (overlap). Dependencies are visualised as arrows on the Gantt, can be created by dragging directly between bars, and drive the Auto Schedule calculation.

What Dependencies Are

A dependency (also called a precedence relationship or link) connects two tasks so the scheduler knows their relative order. DPlan supports all four PMI-standard relationship types:

TypePlain EnglishMeaning
FS"right after"Successor starts after predecessor finishes (most common)
SS"starts together"Successor starts when predecessor starts
FF"finishes together"Successor finishes when predecessor finishes
SF"inverse"Successor finishes when predecessor starts (rare)

FS handles ~95% of real-world sequencing. The other types exist for cases where the predecessor and successor share a start or end boundary (e.g. parallel kickoff, joint completion).

Adding a Dependency — Drag-to-Connect (recommended)

The fastest way to link two tasks is to drag from a handle on one bar to another bar:

  1. Hover any task bar. Two small handles appear: green at the start and blue at the end.
  2. Press and drag from a handle. A ghost arrow follows the cursor and a floating chip shows the dependency type as you move — for example, FS · "right after".
  3. Drop on another bar. The dependency type is inferred from the source handle and the half of the target bar where you released:
  4. Release. A toast confirms the link and the arrow appears on the Gantt instantly.
During the drag, the chip turns red if releasing on that bar would create a circular dependency. The drop is silently rejected — no error toast, just immediate visual feedback. You never need to undo a circle.

Adding a Dependency — Task Editor (alternative)

Drag-to-connect is fastest, but the Task Editor still works if you prefer a list-based flow or are setting up many predecessors at once:

  1. Double-click the successor task (the task that must wait) to open its Task Editor.
  2. Scroll to the Dependencies section.
  3. Pick a predecessor from the dropdown and click Add. The Task Editor flow always creates an FS dependency with lag 0 — to use SS/FF/SF or set a lag, edit the arrow on the Gantt afterwards (see below).
  4. Click Save (or press Ctrl+Enter).

Adding a Dependency — Dependencies Column (MS Project syntax)

The Gantt task list has a Dependencies column between End and Prog. Click any cell and type a comma-separated list of predecessors using MS Project syntax. The cell becomes editable in place — no modal, no dropdown.

TypeExampleMeans
Bare row #5Predecessor at row 5, FS, no lag
Type only5SSRow 5, Start-to-Start, no lag
Type + lag5FS+2dRow 5, FS, +2 working days
Type + lead (negative lag)3FS-1dRow 3, FS, 1 working day overlap
Multiple predecessors1, 2SS-1d, 7FFThree preds, comma-separated

Input is permissive — 5fs+2d, 5 FS + 2 d, 5FS+2D all parse the same. On save, the cell normalises to canonical form (uppercase type, lowercase d): 5FS+2d.

Validations on save:

Auto-snap to earliest valid position (ASAP): When you save a new dep, the successor task is automatically moved to the earliest valid date based on all its predecessors (latest binding constraint wins). Matches MS Project's default scheduling. Anchored tasks (📌) and descoped tasks are never moved.

The # column shows sequence numbers (1, 2, 3…) which is what the Dependencies column references — the two columns always stay in sync. Reordering tasks updates the displayed numbers but the underlying links remain intact (they reference task IDs, not row positions).

The Dependency Arrow on the Gantt

Each dependency is rendered as an elbow-routed arrow on the SVG Gantt. The arrow colour communicates the lag/lead status at a glance:

Arrow ColourMeaning
GreyZero lag — successor starts immediately when predecessor reaches its anchor point
Orange / AmberPositive lag — there is a waiting period built into the link
BlueNegative lag (lead) — overlap; successor begins before predecessor reaches its anchor
Red (cascade)Briefly highlighted after a Smart Reschedule cascade pushes successors

Editing or Deleting a Dependency — the Pill Editor

Click any arrow on the Gantt to open an inline pill editor anchored at the click point. No modal, no view switch.

A subtitle inside the pill shows the dependency in plain English: "right after · +3d", "starts together", "finishes together · -2d". This is the same vocabulary used by the chip during a drag — consistent everywhere.

Lag — Delay After Predecessor

Lag introduces a mandatory waiting period between when the predecessor finishes and when the successor can start. Lag is expressed in working days.

Examples of lag:

In the Auto Schedule forward pass, a lag of N days adds N working days between the predecessor's EF and the successor's ES.

Lead — Overlap (Negative Lag)

Lead allows a successor task to begin before its predecessor has fully completed. Lead is entered as a negative number in the lag field. Lead represents an overlap assumption — the premise that the successor can safely begin with partial output from the predecessor.

Examples of lead:

Lead introduces schedule risk. If the predecessor task slips or its output changes during the overlap period, the successor may need to be reworked. Always document the risk assumption in the successor task's Notes field when using significant lead values.

Multiple Predecessors

A task can have any number of predecessors. Auto Schedule takes the maximum of all predecessor Early Finish dates (adjusted for lag) as the task's Early Start. This is the "all must finish" merge logic — the successor cannot begin until the last predecessor has finished.

Example: "User Acceptance Testing" has three predecessors: "Core Features Complete" (lag 0), "Test Data Ready" (lag 0), and "Test Environment Configured" (lag 1 day). Testing starts the day after the last of these three is complete. If Core Features finishes on Day 20, Test Data on Day 18, and Test Environment on Day 19 (+1 lag = effective Day 20), then UAT starts on Day 20.

Removing a Dependency

The fastest way: click the arrow on the Gantt → click the 🗑 Delete button in the pill editor. The arrow disappears immediately and a toast confirms.

Alternative: open the successor task's editor, find the predecessor chip in the Dependencies section, and click × on the chip.

Removing a dependency is undoable — press Ctrl+Z to restore it.

Circular Dependency Detection

DPlan checks for circular dependencies (A → B → C → A) at three points:

To resolve a circular dependency, identify which link in the chain is logically incorrect and remove it. Most circles are caused by accidentally connecting the last task in a phase back to the first task, or by copying/pasting dependency data incorrectly.

How Auto Schedule Uses Dependencies

Dependencies are the primary input to the CPM scheduling algorithm. Without dependencies, all tasks are independent and Auto Schedule can only set each task to its constraint date (or project start if ASAP). The more completely your dependency network reflects real-world sequencing logic, the more useful Auto Schedule's output will be.

See Scheduling for the full algorithm detail, and Critical Path for how dependency chains produce the critical path.

Practical Dependency Patterns

Pattern 1 — Sequential Chain

The simplest and most common pattern: A → B → C → D. Each task waits for the previous one to complete. Use this for work where each phase produces a deliverable the next phase consumes.

Requirements (5d) → Design (8d) → Build (15d) → Test (5d) → Deploy (1d)

The entire chain forms the critical path if no parallel work exists.

Pattern 2 — Parallel Work with Merge

Multiple independent work streams converge at a merge point — typically a milestone or an integration task.

Frontend Dev (10d) ──┐
Backend Dev  (12d) ──┼→ Integration Testing (5d) → Launch
API Design    (3d) ──┘

The merge task (Integration Testing) has three predecessors. Auto Schedule sets its start to the latest finish of the three parallel tracks. The longest parallel track (Backend Dev at 12d) defines when integration can begin.

Pattern 3 — Phase Gate Milestone

All tasks in a phase feed into a milestone, and the next phase begins after the milestone.

Task A ──┐
Task B ──┼→ [Phase 1 Gate Milestone] → Task D (Phase 2 start)
Task C ──┘

Set the milestone's constraint to MSO if the gate review is on a fixed date. See Milestones for full detail on this pattern.

Pattern 4 — Lag for External Wait

Use lag wherever an external process introduces a mandatory wait: regulatory approval, shipping, curing, legal review, client sign-off cycles.

Submit for Patent Review → [lag: 90 days] → Begin Manufacturing Scale-Up

Pattern 5 — Lead for Fast-Track Overlap

Use negative lag to compress the critical path by overlapping tasks where technically feasible.

Content Writing (10d) → [lead: -3d] → Content Review (5d)

Review begins 3 days before writing completes — reviewers start on early chapters while writers finish later ones.

Best Practices