Textual Gantt Scheduling

Gantt Visualized

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:

Reasonable defaults for most parameters should be defined to avoid unnecessary editing.

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

Markdown compatability

The text format should be defined so that it is compatible with markdown.

project "Build TxProject tool"

resources

milestones

settings

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