Preview environment — data may be reset without notice. Do not use for real work.

Scheduling

Dependencies & auto-scheduling

A dependency says “this can't start (or finish) until that one does.” Once tasks are linked, moving one ripples through the rest — that ripple is the schedule doing its job, not a glitch.

Task ATask BFSmove A → B followsFS · SS · FF · SF — which two ends are tied
Finish-to-Start: B waits for A. Move A and the whole downstream chain follows — that ripple is auto-scheduling.

Linking two tasks

Hover a task bar and drag from its edge handle onto another bar to create a dependency. Drag from the end of bar A to the start of bar B for the common case (B waits for A). You can also add and edit links in the task editor.

Madi refuses a link that would create a cycle (A → B → A) — a schedule that can never resolve — so you can't accidentally deadlock the graph.

The four link types

Every dependency is one of four kinds — which two ends are tied together:

  • FS — Finish-to-Start (the default): B starts after A finishes. “Write copy, then design the page.”
  • SS — Start-to-Start: B starts when A starts. Work that runs in parallel from the same trigger.
  • FF — Finish-to-Finish: B finishes when A finishes. Two tracks that must wrap together.
  • SF — Start-to-Finish: B can't finish until A starts. Rare — handover / shift-style relationships.

Lag (and lead)

A link can carry lag — a gap in working days. “Pour concrete, wait 3 days, then build on it” is FS + 3 days lag. Negative lag (lead) lets the successor overlap the predecessor: start the next task two days before the first one ends.

Auto-scheduling

With auto-schedule on, Madi keeps every task as early as its predecessors allow. Move or resize one task and its whole downstream chain shifts to stay consistent — you plan the dependencies once and the dates maintain themselves.

Turn it off when you want to pin a date by hand and stop the ripple. The critical path (the chain with no slack — the one that decides the end date) is highlighted so you can see which links actually move the finish.

“I didn't move that task — why did it jump?”

Because something it depends on moved. The jump is auto-scheduling re-deriving the earliest valid date from the dependency graph.

If a date must stay fixed regardless, set it explicitly (or turn auto-schedule off) — otherwise the graph wins, by design.

Recap

  • Link — drag bar-edge to bar-edge; cycles are blocked.
  • Type — FS (default), SS, FF, SF — which ends are tied.
  • Lag — working-day gap; negative lag overlaps tasks.
  • Auto-schedule — the ripple is the plan resolving itself; off = pin by hand.