Scheduling¶
The dependency graph drives execution¶
Milestones, epics and tickets are nodes; blocks dependencies are
edges, at any level (a ticket can block a milestone, a milestone can block
a ticket). A ticket is runnable when it is in state ready and
every item that blocks it is resolved — done, or cancelled so that
abandoned work never stalls its dependents.
Ballet rejects any blocks edge that would create a cycle. Each
dependency change also bumps the project’s graph version, so two
concurrent additions cannot jointly create a cycle: the second one is
re-validated against the updated graph.
Dependencies are limited to items of the same project for now.
The scheduler keeps a ready queue and starts runs up to the configured concurrency limits (globally, per organization, per project). Anything ready runs in parallel; nothing starts before its prerequisites.
The Gantt chart is a forecast¶
The Gantt chart is the primary human view of a project, computed from the same graph:
lanes show which work can proceed in parallel;
sync points are milestones and other join nodes where parallel work must converge;
the critical path shows which tickets determine the end date;
durations come from estimates first, then from historical run durations of similar tickets.
Changing the plan (adding a dependency, re-ordering, splitting a ticket) changes the forecast immediately. The Gantt chart never triggers work by itself — the graph and the ready queue do. This keeps execution correct even when estimates are wrong.
Sync points¶
At a milestone, Ballet can require a human gate before dependent work starts — a natural moment for the human and planner to review direction, update documentation and re-plan.