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.
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:
| Type | Plain English | Meaning |
|---|---|---|
| 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).
The fastest way to link two tasks is to drag from a handle on one bar to another bar:
FS · "right after".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:
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.
| Type | Example | Means |
|---|---|---|
| Bare row # | 5 | Predecessor at row 5, FS, no lag |
| Type only | 5SS | Row 5, Start-to-Start, no lag |
| Type + lag | 5FS+2d | Row 5, FS, +2 working days |
| Type + lead (negative lag) | 3FS-1d | Row 3, FS, 1 working day overlap |
| Multiple predecessors | 1, 2SS-1d, 7FF | Three 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).
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 Colour | Meaning |
|---|---|
| Grey | Zero lag — successor starts immediately when predecessor reaches its anchor point |
| Orange / Amber | Positive lag — there is a waiting period built into the link |
| Blue | Negative lag (lead) — overlap; successor begins before predecessor reaches its anchor |
| Red (cascade) | Briefly highlighted after a Smart Reschedule cascade pushes successors |
Click any arrow on the Gantt to open an inline pill editor anchored at the click point. No modal, no view switch.
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 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:
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.
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.
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.
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.
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.
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.
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.
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
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.