FastLinkIt

Waterfall, Gantt & phases

Organizerprojects9 min read

Waterfall, Gantt & phases

For long-running plans with explicit start / due dates and dependencies, the Gantt chart + phases give you a timeline view with critical-path scheduling and lifecycle grouping. Best fit for Waterfall projects, but works on any methodology.

Where to find it

  • Gantt button in the project detail header (Waterfall projects)
  • Phases button next to it (manage swimlanes)
  • Or deep-link: /projects/{id}/gantt, /projects/{id}/phases

The Gantt chart

/projects/{id}/gantt reads each work item's StartDate / DueDate and renders an inline-SVG timeline:

  • One row per scheduled item; bar coloured by status (Done = green, In progress = blue, Overdue = red, Open = neutral grey)
  • Day-width auto-scales: 24 px/day up to a 90-day window, 8 px/day for longer plans
  • Month tick marks at every 1st-of-month
  • Vertical dashed "today" guide
  • Stepped dependency arrows for Finish-to-Start links between visible items (other dependency types are skipped to keep v1 readable)

The summary cards above the chart show Scheduled / Overdue / Unscheduled / Done counts; filter pills let you switch to "Overdue only" or jump out to an "Unscheduled items" list (items missing one or both dates).

Scheduling with only a due date

Often the date you know is the deadline — "this is due Friday" — and the start date is implicit. The Gantt fills it in for you when both these conditions hold:

  1. The work item has a DueDate.
  2. The work item has a non-zero PERT-likely estimate.

The chart computes StartDate = DueDate − ceil(hours / DefaultHoursPerDay) working days back, walks Mon-Fri only, and renders the bar with a dashed border so it's visually distinct from real scheduled bars.

Confirming an inferred bar

The bar is provisional until you confirm the dates. Two ways:

  • Drag the bar — any drag (even a "click and release without moving") commits both endpoints, and the bar's border becomes solid on the next refresh.
  • Open the editor for the work item and fill in StartDate manually.

Why dashed?

The dashed outline is a deliberate visual signal: "I'm showing you a plausible schedule, but you haven't said yes to it yet." Once committed, future schedule changes only happen when you explicitly drag or edit.

When inference doesn't kick in

  • The item has DueDate but no estimate → it stays in the Unscheduled bucket. Add an estimate to see it appear.
  • The item has neither date → also unscheduled. The Gantt can't guess.
  • The estimate is zero — same as no estimate.

Drag to reschedule

Bars are interactive:

  • Drag the body — both StartDate and DueDate shift by the same delta
  • Drag the left edgeStartDate changes, due date stays put
  • Drag the right edgeDueDate changes, start stays put

Day-snapped feedback during drag — the bar jumps in whole-day increments as you move. Press Escape to cancel mid-drag. The drag continues if the cursor leaves the chart (handy when the chart scrolls horizontally).

Click a bar for details

Hovering a bar shows a quick tooltip with dates and status. Clicking the bar (releasing without dragging) opens a richer details card below the chart with:

  • Type icon, number, and title
  • Status / critical-path / inferred-start badges
  • An Open in editor primary button — one click to jump into the work-item form
  • Dates plus the working-day count for the span
  • PERT estimate breakdown (Optimistic / Likely / Pessimistic + computed expected)
  • Hours logged with % of estimate (turns red when over budget)
  • Priority, assignee (with avatar), phase, tags
  • Description preview (first ~280 characters, Markdown stripped)
  • Any active schedule warnings, in a yellow alert at the bottom

Close the card with the X button in its header — there's no auto-dismiss, so you can keep it open while exploring other bars (clicking another bar swaps the card to that one).

The click and the drag are different gestures: a release without movement opens the card; any movement of the cursor commits a reschedule via the drag handler. If you click and accidentally jiggle the cursor, the bar will snap back to its original position (zero-day commits are skipped for non-inferred bars) and the card opens.

Critical path

A toggle in the toolbar highlights the critical path — the longest chain of dependent tasks from project start to finish. Items on this path get a thicker red outline; the strip above the chart names the path's length in days.

What it actually means

The critical path is the set of tasks where any delay pushes the project end date. It's a planning insight, not a problem to fix:

  • Every project has a critical path. As long as you have at least one task with dependencies, one chain is the longest, and that's the critical path. It doesn't go away when you organise your dates well — it just tells you where the schedule is bound.
  • A short critical path is healthy. It means most of your work is parallelisable; only a few tasks gate the deadline.
  • A long critical path with most tasks on it isn't broken — it's the natural shape of a sequential plan. If task A finishes, then B starts, then C, then D, then all four are on the critical path because slipping any of them pushes everyone after.

Why are all my tasks on the critical path?

Usually because the dependency graph is a straight line — no parallelism. If you've added Finish-to-Start dependencies all the way down the list, every task gates the next, so 100% of them are critical.

To reduce the critical path:

  • Find parallelisable work. If two tasks don't actually depend on each other (one person codes while another writes test cases), remove the dependency between them. Whichever one is shorter falls off the critical path.
  • Move dependencies higher up the chain. If C depends on A finishing but doesn't actually need B's output, link C → A directly instead of going through B.
  • Add buffer to non-critical items. Items with slack (the gap between their due date and when their dependents start) aren't on the critical path. Pad earlier tasks deliberately and the critical path shifts to the gating ones.

Hiding the alert

If you don't find the alert useful — or you've understood the chain and don't need the running reminder — flip the Critical path toggle in the Gantt toolbar. Both the red bar outlines and the alert strip disappear.

Cycles

When dependencies form a cycle (A blocks B blocks C blocks A), the chart can't compute a critical path and shows a warning instead — the cycle has to be broken before scheduling can proceed.

Phases (swimlanes)

A phase groups work items into a chunk of the project lifecycle — Discovery, Build, Launch, Hardening, whatever fits.

Managing phases

/projects/{id}/phases lists all phases with inline create / edit / delete:

  • Name (required, unique per project)
  • Description
  • Color — appears as a coloured left stripe + tinted background on the swimlane
  • Start date / End date — optional planned span
  • Reorder with up/down buttons

Deleting a phase doesn't delete its items — they're unassigned (resurface in the "Unassigned" lane on the Gantt) but stay put.

Assigning items to phases

The work-item editor gains a Phase dropdown when the project has any phases defined. Empty option = "Unassigned".

Swimlane view

When phases exist, the Gantt's toolbar gains a Phases / Flat toggle. Phases mode is the default:

  • One swimlane per phase (in your defined sort order)
  • Header shows the phase name in bold + a coloured stripe
  • Right edge of the label column shows a rollup: 12/40 done · 156h / 280h · Apr 1 → May 15
  • Phase's planned date range renders as a translucent band on the timeline portion
  • Items without a phase land in an "Unassigned" lane at the bottom

Drag between phase lanes

Body-drag on the Gantt re-parents the item when the cursor crosses into a different swimlane. Same gesture, additional effect:

  • Same lane, different dates → reschedule (only)
  • Different lane → phase change (with optional date shift)
  • Resize handle drags never re-parent — only "body" drags carry the lane delta, so a sloppy left-handle drag won't accidentally move the item to another phase

A pure cross-lane drag with zero day delta still persists.

Dependencies

Two ways to manage dependencies:

From the Gantt directly

Click a bar to open the details panel below the chart, then click + Add link in the panel header. The dialog asks for the link type (Predecessor / Successor / Parent / Child) plus the target item, opens the work-item picker, and saves on confirm. The Gantt re-renders so new arrows + critical path + schedule warnings update immediately. Cycle detection rejects loops with a yellow warning instead of saving.

Open the work item, switch to Related, click + Add link. Same dialog as above. From here you can also remove existing links (every chip has an X button — see Working with work items › Related for the details).

Dependencies render as stepped arrows on the Gantt for Finish-to-Start links between visible items. Other dependency types (Start-to-Start, Finish-to-Finish, Start-to-Finish) are stored and respected by the critical-path algorithm but aren't drawn as arrows in v1 — they show as a small SS / FF / SF badge on the relation chip in the editor's Related tab.

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.