Create a Gantt Chart from Github issues
A Gantt chart is a type of horizontal bar chart,
where the X-axis is each task,
while the Y-axis is the timeline (could be days, weeks, months, etc.).
The magnitude of each bar is the duration of the task.
A task may have a start- and end-date,
it may also have an indication of its progress, [TODO]
and its dependencies.
NB: A task’s start- and end-date,
are not the same as its creation- and due-date. [TODO]
For defining dependencies and in turn progress,
Gantt charts usually rely on a work-breakdown structure.
In a WBS, a parent task is 100% completed when all (ie. 100%) of its children are completed.
This is the 100% rule,
and has the important property that a parent task may not be more than the sum of its parts.
In other words,
a project definition should contain 100% of the necessary actions to complete the project.
-
Start to Start: When Task A starts then Task B starts
-
[TODO: StF]
-
Finish to Start: When Task A finishes then Task B starts
-
Finish to Finish: When Task A finishes then Task B finishes
Finish to Start, is the traditional sequential approach to task management.
Start to Start, and Finish to Finish, allow for parallel execution of tasks.
In a traditional approach, you might have:
-
Step one
-
Step two
-
Step three
Doing them sequentially:
Step two is started when Step one is done,
Step three is started when Step two is done;
ie this is an ordered list.
Here is another example that perhaps better represents github issues:
-
Task A
-
Task B
-
Task C
This is an un-ordered list.
Tasks are completed in any order,
no dependency between them is specified.
Finally here is an example using StS and FtS
-
Step one, start here, no dependencies
-
Step two, FtS, depends on Step one being finished
-
Step three, StS, depends on Step two starting
Here is an example with sub-tasks:
-
Task A
-
Task B
-
Task C
-
-
Task D
-
Task E
Using the 100% rule, Task A wouldn’t be complete until both Task B and C are completed.
Ignoring the 100% rule, [TODO]
Here is an example using StS, FtS, and FtF
-
Project A
-
Step one, start here, no dependencies
-
Step two, FtS, depends on Step one being finished
-
Step three, StS, depends on Step two starting
-
-
Celebrate Project A’s completion, FtF, depends on Step one being finished
-
Start to Start: Start-date depends on another task
-
Start to Finish: End-date depends on another task
-
Finish to Start: Start-date depends on another task
-
Finish to Finish: End-date depends on another task
| Dependency | Start | End |
|---|---|---|
None |
YYYY-MM-DD |
YYYY-MM-DD |
StS |
Depends on |
|
StF |
Depends on |
|
FtS |
Depends on |
|
FtF |
Depends on |
A task may have:
-
a
start-time, -
a
duration, -
an
end-time, which is thestart-time+duration -
and dependencies
For simplicity’s sake let’s just consider Finish-to-Start dependencies.
This affects the start-time,
ie the start-time is set to the end-time of its dependent task.
So, in that case
(since end-time is affected by start-time which in turn is affected by another task)
the two pieces of information worth specifying is the depedent task and the duration.
What about with other sorts of time dependencies?
| Dependency | Start | End | Duration |
|---|---|---|---|
None |
YYYY-MM-DD |
YYYY-MM-DD |
|
StS |
Depends on |
Start + Duration |
|
StF |
End - Duration |
Depends on |
|
FtS |
Depends on |
Start + Duration |
|
FtF |
End - Duration |
Depends on |
A naive implementation would set the duration of a parent task to the sum of the duration its children, due to the 100% rule. Unfortunately this doesn’t take into account slack/buffer time, eg weekends.
A parent task has an implied StS and FtF relationship with its children. A parent task starts when the first child task starts, and ends when the last child task ends.
If I had to create a Gantt chart from a simple markdown list, this is how I would specify it:
-
Task A: Starts with Task B, Ends with Task D
-
Task B:
-
Task C: Starts on completion of Task B
-
Task D: Starts on completion of Task C
-
-
Task E: Starts on completion of Task A & Starts with Task F, Ends with Task G
-
Task F:
-
Task G: Starts on completion of Task F
-
-
Task H: Starts on completion of Task E
-
Task I
-
Task J
-
Task K
-