Textual Gantt Scheduling
I have not found an easy and cost effective way to organize tasks as a Gantt chart to allow a better understanding of a project timeline.
Concept
The idea is to define a simple text format which defines project tasks. This can then be easily converted to a Gantt schedule through a simple conversion tool.
A textual representation is preferred because it is easily edited and can be version controlled.
There is a very powerful Gantt environment (pgfgantt) supported in LaTeX which could be used to visualize the Gantt scheme.
Wanted features
The following features are needed:
- Define task with
name
,completeness (50%)
,effort (2w)
andid (t1)
- Define dependencies between tasks
(t1)
- Specify allowed resources working on a specific task
- Specific resources
PL AK
- Specific resources
- Define checkpoints which depend on a set of tasks with an optional target date
Reasonable defaults for most parameters should be defined to avoid unnecessary editing.
- Default effort
100%
- Default marginal
0%
- Default workday
8h
- Default today date to current date
Textual format
The textual format is showed in the following example.
project "Build TxProject tool"
p0 "Make specification"
t11 "Define textual format" 4h 50% (PL)
t12 "Make language spec" 1d 50% (PL)
t13 "Make Haskell ADT" 4h 75% (PL AK)
p1 "Build Haskell implementation"
t21 "Build ADT in Haskell" 1d 75% (p0 PL AK)
t22 "Build planner from ADT to time" 2d 50% (t21 PL)
t23 "Build parser to ADT" 3d (t22 PL)
t3 "Write docs" 2d (p1)
milestones
mid "Mid project" (t3) 2018-02-02
resources
PL "Peter Ljung"
AK "Anders Karlsson" 50%
settings
workday = 8h
start = 2018-01-13
today = 2018-02-01
Special formatting
50% - part done
1h - 1 hour effort
1d - 1 day effort
1w - 1 week effort
p0 - identity/name
"" - description
() - dependencies and resource constraints
Some notes on formatting
- A task is not split in time
- Any set of optional resources may work on a single task at a time
- Selected resources work all available time on the task until it is finished
- A resource may be defined as a group of people
- All resource groups are disjunct i.e. no resource is part of different groups
- A resource may have an efficiency in percent where 100% means full workday
- A (sub-)project is a set of tasks
- A task must include an effort
- A project must not include effort or completeness (involved tasks define that)
- A task may have constraints in terms of ...
- Dependencies to other tasks
- Set of alternative resources used to complete task
- Constraints set on a project are directly mapped to every project task and sub-task
- Constraints on sub-projects or tasks may override parent constraints, but must be more restricted
- A project dependency is the same as a dependency on all (sub-)project tasks
- A milestone is a point in time where a set of tasks is finished
- A milestone may have a "wanted" completion date
- If want completion date is surpassed it will be shown in the resulting diagram
- Project
start
defines when project started today
defines current time and is defined directly after finished parts of the project
Markdown compatability
The text format should be defined so that it is compatible with markdown.
project "Build TxProject tool"
- p0 "Make specification"
- t11 "Define textual format" 4h 50% (PL)
- t12 "Make language spec" 1d 50% (PL)
- t13 "Make Haskell ADT" 4h 75% (PL AK)
- p1 "Build Haskell implementation"
- t21 "Build ADT in Haskell" 1d 75% (p0 PL AK)
- t22 "Build planner from ADT to time" 2d 50% (t21 PL)
- t23 "Build parser to ADT" 3d (t22 PL)
- t3 "Write docs" 2d (p1)
resources
- PL "Peter Ljung"
- AK "Anders Karlsson" 50%
milestones
- mid "Mid project" (t3) 2018-02-02
settings
- workday = 8h
- start = 2018-01-13
- today = 2018-02-01
Haskell ADT
-- A project is a tree of tasks where each task can have sub-projects
-- A project only structure tasks in a tree hierarchy, independent on dependencies
data Project = Project { name :: Id
, desc :: Desc
, projects :: [Project]
, tasks :: [Task]
} deriving (Show, Eq, Ord)
-- A work task
data Task = Task { name :: Id
, desc :: Desc
, effort :: Effort
, compeleteness :: Completeness
, resources :: Set Resource -- one of dep. resources must perform task
, dependencies :: Set Task -- all dep. tasks must be performed before
} deriving (Show, Eq, Ord)
-- A milestone specified in time
data Milestone = Milestone Id Desc UTCTime deriving (Show, Eq, Ord)
-- A project checkpoint with dependencies to a set of tasks
data Checkpoint = Checkpoint Id Desc (Set Task) deriving (Show, Eq, Ord)
-- A specific resource which may represent an individual or a group
data Resource = Resource Id Desc Size deriving (Show, Eq, Ord)
Example output
project "Build TxProject"
p1 "Make specifications"
2018-01-01 00:00 (AK) - t13 "Make Haskell ADT" (50% of 0.5 days)
2018-01-01 00:00 (PL) - t11 "Define textual format" (50% of 0.5 days)
2018-01-01 12:00 (PL) - t12 "Make language spec" (50% of 1.0 days)
p2 "Build Haskell implementation"
2018-01-02 12:00 (AK) - t21 "Build ADT in Haskell" (50% of 1.0 days)
2018-01-03 12:00 (PL) - t22 "Build parser to ADT" (0% of 3.0 days)
2018-01-06 12:00 (PL) - t23 "Build planner from ADT to time" (0% of 2.0 days)
2018-01-08 12:00 (AK) - t3 "Write docs" (0% of 2.0 days)
References
- https://ctan.org/pkg/pgfgantt
- pgfgantt manual
- dapulse.com - Simplifed gantt and project management as web service
- PERT
- PM with graphwiz