Skip to main content
All guide chapters

Plan and schedule

Dependencies, milestones, and automatic scheduling

Last updated 30 September 2026

Dependencies link tasks so one cannot start or finish until another does. Ganttastic supports all four dependency types (FS, SS, FF, SF) with optional lag or lead in working days. When a predecessor moves later, dependent tasks are pushed later automatically, and milestones mark the fixed points your plan builds toward.

Most people link tasks by dragging between bars or picking from a dialog; you can also type a short expression directly. This page covers each method, lag and lead, what happens downstream when dates change, and how to mark key events with milestones.

The four dependency types

Every link between two tasks has a type. The type says which dates are connected: the predecessor is the task that comes first in the logic, and the successor is the task that waits on it.

TypeNameMeaning
FSFinish to startThe successor cannot start until the predecessor finishes. This is the default and by far the most common: build, then test.
SSStart to startThe successor cannot start until the predecessor starts. Useful when two streams of work should begin together.
FFFinish to finishThe successor cannot finish until the predecessor finishes. Useful when work must wrap up together, like writing and editing.
SFStart to finishThe successor cannot finish until the predecessor starts. Rarely used in practice.

Add a dependency

Ganttastic gives you several ways to link tasks. Pick whichever fits how you work; you never need to memorize syntax.

  1. Drag on the chart. Hover over a task bar and a small link handle appears at its right edge. Drag a line from the handle to another task’s bar to link them with a finish to start dependency.
  2. Use the dialog. Right-click a task on the chart or in List view, then pick Add Dependency... from the Manage Dependencies submenu. The dialog has a searchable task list, a Dependency type selector for FS, SS, FF, or SF, and a Lag (days) field.
  3. Type in List view. Click the Predecessors cell of the dependent task and enter the expression directly.
  4. Type in Task Details. Right-click the task, choose Edit Task, and edit the Dependencies field on the Dependencies & Notes tab.

Sub-tasks can be linked too. Use a sub-task’s display ID, such as 1.2, anywhere a task ID is accepted. See working with tasks for how tasks and sub-tasks are numbered.

Once two tasks are linked, a thin arrow runs from the predecessor to the successor on the chart.

The Add Dependency dialog listing the project’s other tasks to pick a predecessor from.
Pick the predecessor from the list rather than typing an ID.

Lag and lead

Lag adds a wait after the linking condition is met. Lead does the opposite and starts the successor early, overlapping the two tasks. Both are counted in working days, so days outside your work week and any custom holidays are skipped. The work week and holidays are set on the Work Calendar tab of Project Settings (see settings).

In the Add Dependency dialog, enter a positive number in Lag (days) for lag, or a negative number for lead.

When you type dependencies by hand, or read them in the Predecessors column, they use a compact syntax: the predecessor’s ID, a colon, the type, and an optional lag.

  • 2:FS+2 reads as: depends on task 2, finish to start, then wait 2 working days.
  • 2:FS-1 reads as: depends on task 2, finish to start, but start 1 working day early.
  • 3:SS+1 reads as: start 1 working day after task 3 starts.
  • 2 on its own is a plain finish to start dependency on task 2 with no lag.
  • Separate multiple dependencies with commas, for example 2, 3:SS+1.

Change or remove a dependency

A task’s dependencies are stored as one list, and you can edit that list wherever it appears.

  • Right-click the dependent task and open Manage Dependencies. Each existing link is listed as a Remove entry named after its predecessor; click one to delete that link.
  • In List view, click the Predecessors cell and edit or delete the expression.
  • In Task Details, edit the Dependencies field on the Dependencies & Notes tab.

To change a link’s type or lag, edit its expression directly, or remove the link and add it again through the dialog with the new settings.

How automatic scheduling works

When a predecessor moves later or runs longer, every task that depends on it is pushed later as far as its link needs, and the push carries down the whole chain. A one week slip at the top pushes everything downstream by the right amount. The cascade honors each link’s dependency type and lag, your project’s work week, and any custom holidays, so rescheduled tasks always land on working days.

Links push tasks later. They never pull them earlier. If a predecessor finishes sooner because you shorten it, move it earlier, remove a holiday, or delete the link, the tasks after it keep their dates. To bring a task forward, set its start date by hand. If the date you pick is earlier than its links allow, Ganttastic moves it to the earliest date they do.

When you move a task earlier than one of its links allows, a Held by a predecessor message explains why. If the task already sits on the earliest day its link allows, nothing changes and the message ends "Nothing was changed." If it sat later, it moves to that earliest day and the message ends "so it was moved there instead." Either way the message names the predecessor and the day it finishes (or starts, for SS and SF links).

Scheduling works in whole working days. Durations are entered in steps of 0.25 working days, but a task always finishes on a whole working day, rounded up: a duration of 0.25, 0.5, or 1 finishes on the start day, and 1.25 finishes on the next working day. Project Settings has a Work Hours section, but those hours do not affect scheduling.

Tasks are kept off non-working days. A new task placed on a weekend day or a holiday (for example with New Task Here on a Saturday), or a task a push lands on one, moves to the next working day. To work on a particular weekend day or holiday on purpose, see working on a weekend or holiday.

When you open a project you can edit, Ganttastic checks its dates once per session. Tasks that sit on non-working days, or whose finish does not match their start and duration, are corrected and saved, and a Dates corrected message says how many tasks moved. It offers Undo for 15 seconds, and Ctrl+Z also reverses it. A project with nothing to correct is left as it is.

After a cascade runs, a toast summarizes what moved and offers an Undo cascade action. Click it to put every affected task back where it was; a confirmation appears once the cascade is undone.

Moving tasks in and out of sub-tasks, or deleting them, changes their links in these ways:

  • A predecessor you put on a task that has sub-tasks is passed down to each of its sub-tasks that has no predecessor of its own, so the whole group waits for it. If one of those sub-tasks later leaves the group, the passed down link is dropped from it.
  • Deleting a task removes it from every other task’s predecessors.
  • A sub-task can never depend on its own parent. Such a link is removed, including when you nest a task under the task it depended on.
  • A task that loses its last sub-task gets back the dates, progress, and predecessors it had before it gained sub-tasks.
  • A link that would create a loop is refused before anything is saved.

Milestones

A milestone is a task with zero duration that marks a fixed point in the plan, such as a kickoff, a client approval, a delivery date, or a launch. Milestones render as diamonds on the chart instead of bars.

There are two ways to create one:

  1. Right-click a task on the chart or in List view and choose Convert to Milestone. On an existing milestone the same menu item reads Unmark milestone.
  2. Right-click a task, choose Edit Task to open Task Details, and check the Milestone checkbox on the General tab.

A few behaviors worth knowing:

  • Converting a task sets its duration to zero. Unchecking the Milestone checkbox turns it back into a task with a duration of 1 day.
  • Milestones cannot be dragged or resized on the chart. Change their date in Task Details.
  • A parent task’s rolled up progress is weighted by duration, so a milestone, with zero duration, adds nothing to it. A project’s progress in a portfolio view leaves milestones out too. The Dashboard is different: its Overall Progress and each project’s percentage count every task, milestones included, so a milestone at 100 percent counts as a finished task there.
  • A parent task that has sub-tasks cannot become a milestone; the checkbox is disabled for it.
  • Milestones are included when you capture a baseline.

The AI project wizard adds milestones at phase gates automatically when it generates a plan, along with the dependencies between tasks.

Easier to try than to read about.

Open Ganttastic in your browser and follow along. No account needed.