/Main_Page

::You must have ninja focus to complete your mission::NinjaFocus::

TaskJuggler

Views:


http://www.taskjuggler.org/

TaskJuggler is a really powerful planning tool. It lets you define all of the tasks and sub tasks etc in a project and then plots the sequence they should be carried out in. It projects how long a project will take to complete under ideal or delayed circumstances.

You add details of all the resources you have, available time, costs, etc then link these with tasks or groups of tasks. For the tasks you only need to set a little bit of detail and TaskJuggler will figure it all out for you. As expected you can set the dependancies for tasks etc.

As you progress through a project you can add additional details of the effort that has been put in and TaskJuggler will re-shuffle your tasks and give you a new projection.


TaskJuggler projects are defined in a text file. You can keep this simple or make it really complex with many rules, reports etc and break it all out in to multiple files that can be pulled in to a main file.

Contents

Installation

If it's not part of your (linux) distro you can install from source or maybe get a package from their site. Mac users can install it through mac ports - you also need X11.app. It has quite a lot of dependancies and uses a lot of the KDE libraries.

Mac users might like to take some of the pain out of launching an X11 program from the commandline with this little bash script you can put in your personal bin directory or somewhere:

#!/bin/bash
open-x11 /opt/local/bin/TaskJugglerUI $@

Usage

There is a GUI program and a commandline program. Don't get excited the GUI version just has a built in text editor for you to define your project - but it does let you generate and view detailed Gantt charts. The commandline version will produce reports from your project file but can't create gantt charts.

To launch the GUI run TakJusgglerUI from a terminal.

On a mac you can launch straight in to X11 with:

open-x11 /opt/local/bin/TaskJugglerUI

Syntax

It's a declarative language, set in a text file. It only takes about 5 minutes to figure out all of the important bits - plus the appendix in the official manual is very good (see the web site www.taskjuggler.org).

Some handy bits to get you going:

Tasks

Tasks should ideally be specified with as little information as necessary. Don't give fixed dates unless they really are fixed dates.

Tasks can be nested inside one another to group them, and also to let settings you make to container tasks cascade down to the sub-tasks.

task code_name "Friendly Name" {
     <details>
      task sub_task_code_name "Sub Task Friendly Name" {
          <details>
     }
}

You can nest tasks as deep as you need to.

There are quite a few details you can specify:

  • start <iso date> -- the date the task should start in iso format, e.g. 2009-03-19
  • end <iso date -- the date the task must finish by in iso format, e.g. 2009-09-18
  • effort <time> -- the amount of effort staff will need to put in, e.g. 1h, 3d, 1w for 1 hour, 3 days or 1 week
  • duration <time> -- the total amount of time the task will take from start to finish. This doesn't mean that all of your staff will be working on it solidly, it is just the number of hours, days or weeks from start to finish on the calendar
  • length <time> -- the number of working hours it will run for
  • depends <task_code_name> -- a task (or list of tasks) that must be finished before this task can start
  • scheduling <asap|alap> -- schedule the task to complete As Soon As Possible or As Late As Possible
  • allocate <resource_code_name> -- allocate a member of staff or team of staff to carry out the task

Referring to Other Tasks

When you refer to a task, e.g. for dependancies, it's a little complicated because TaskJuggler lets you nest tasks in to groups.

Tasks are addressed in a similar way to path names like C:\foo\blah\pickle or /foo/blah/pickle. TaskJuggler starts with the project name, followed by each task name separated by a dot.

For this example project:


task master_plan "The Evil Master Plan" {
     start 2009-03-19
     duration 2w
     task preparation "Prepare the Evil Things" {
          task clean_widgets "Clean Widgets" {
                duration 2h
          }
          task sharpen_pokies "Sharpen Pokey Thingies" {
               duration 1d
          }
     task be_evil "Evil Time!!" {
          effort 7d
     }
}

You can either specify the task names in a path from the upper most task name to the task in qestion:

master_plan.preparation.cleanWidgets

or you can specify a relative path. You refer to the current level or group of tasks with the exclamation mark ! . To go up a level, add an additional exclamation mark.

If you are referring from "sharpen_pokies" to "clean_widgets" you could say:

!clean_widgets

To refer to "sharpen_pokies from "be_evil" you could say:

!preparation.sharpen_pokies"

Bank Holidays

You probably want to tell TaskJuggler when bank holidays are so that it doesn't try to schedule work to take place on them. This is a list of UK holidays until 2011:

vacation "Good Friday" 2009-04-10
vacation "Easter Monday" 2009-04-13
vacation "May Bank Holiday" 2009-05-04
vacation "Spring Bank Holiday" 2009-05-25
vacation "Summer Bank Holiday" 2009-08-31
vacation "Christmas Day" 2009-12-25
vacation "Boxing Day" 2009-12-26

vacation "New Years Day" 2010-01-01
#vacation "Good Friday" 2010-04-02
#vacation "Easter Monday" 2010-04-05
#vacation "May Bank Holiday" 2010-05-03
#vacation "Spring Bank Holiday" 2010-05-31
#vacation "Summer Bank Holiday" 2010-08-30
#vacation "Christmas Day Holiday" 2010-12-27
#vacation "Boxing Day Holiday" 2010-12-28

#vacation "New Years Day" 2011-01-03
#vacation "Good Friday" 2011-04-22
#vacation "Easter Monday" 2011-04-25
#vacation "May Bank Holiday" 2011-05-02
#vacation "Spring Bank Holiday" 2011-05-30
#vacation "Summer Bank Holiday" 2011-08-29
#vacation "Christmas Day Holiday" 2011-12-26
#vacation "Boxing Day Holiday" 2011-12-27

Template Project File

/*
 * This file is a project template. It illustrates the basic features
 * of TaskJuggler and can be used as a base for your first projects.
 * You can put your own templates in
 *
 * ${KDEHOME}/share/apps/taskjuggler/Templates/${LANG}/
 *
 * Permission to read, modify and distribute this file without any
 * restrictions is granted.
 *
 * Please see the TaskJuggler manual for a more detailed
 * description of the various syntax elements. You can find more
 * information about TaskJuggler at http://www.taskjuggler.org!
 */
# End date is not inclusive i.e. project runs from the 19 march to the 18 september
project acmeproj "Acme Co Web Site" "1.0" 2009-03-19 - 2009-09-19 {
  # Hide the clock time. Only show the date.
  timeformat "%Y-%m-%d"
  # The currency for all money values is EUR.
  currency "GBP"




  # We want to compare the baseline scenario, to one with a slightly
  # delayed start.
  scenario plan "Plan" {
    scenario delayed "Delayed"
  }
}

copyright "Acme Co Ltd"

# Put your macros here.
# Macro with paramater:
# macro foo [
#   task foo { }
# ]
# Macro with one paramater
# macro bar [
#   task ${1} { }

# Put your flag declarations here. You can flag task, resources and
# accounts to use them as filter criteria when generating reports.
# flags important, dontcare
flags team

# In order to do a simple profit and loss analysis of the project we
# specify accounts. One for the development costs, one for the
# documentation costs and one account to credit the customer payments
# to.
account costs "Costs" cost
account rev "Payments" revenue
account dev "Development" cost


resource dev "Developers" {
  resource dev1 "Developer"
  flags team

}
resource des "Designers" {
  resource des1 "Designer"
  flags team

}
resource client "Client" {
  resource client1 "Client"
  flags team

}

# Global vacations go here
# vacation "Labor Day" 2005-09-05
# 2 days Christmas break (27th not included!)
# vacation "Christmas" 2005-12-25 - 2005-12-27

vacation "Good Friday" 2009-04-10
vacation "Easter Monday" 2009-04-13
vacation "May Bank Holiday" 2009-05-04
vacation "Spring Bank Holiday" 2009-05-25
vacation "Summer Bank Holiday" 2009-08-31
vacation "Christmas Day" 2009-12-25
vacation "Boxing Day" 2009-12-26

vacation "New Years Day" 2010-01-01
#vacation "Good Friday" 2010-04-02
#vacation "Easter Monday" 2010-04-05
#vacation "May Bank Holiday" 2010-05-03
#vacation "Spring Bank Holiday" 2010-05-31
#vacation "Summer Bank Holiday" 2010-08-30
#vacation "Christmas Day Holiday" 2010-12-27
#vacation "Boxing Day Holiday" 2010-12-28

#vacation "New Years Day" 2011-01-03
#vacation "Good Friday" 2011-04-22
#vacation "Easter Monday" 2011-04-25
#vacation "May Bank Holiday" 2011-05-02
#vacation "Spring Bank Holiday" 2011-05-30
#vacation "Summer Bank Holiday" 2011-08-29
#vacation "Christmas Day Holiday" 2011-12-26
#vacation "Boxing Day Holiday" 2011-12-27

# The daily default rate of all resources. This can be overriden for each
# resource. We specify this, so that we can do a good calculation of
# the costs of the project.
rate 300.0

# Put your resource definitions here:
# resource dev "Developers" {
#   resource dev1 "Paul Smith" { rate 330.0 }
#   resource dev2 "Sébastien Bono"
#   resource dev3 "Klaus Müller" { vacation 2005-02-01 - 2005-02-05 }
# }
# This resource does not do any work.
# resource confRoom "Conference Room" {
#   efficiency 0.0
# }

# Now we specify the work packages. The whole project is described as
# a task that contains sub tasks. These sub tasks are then broken down
# into smaller tasks and so on. The innermost tasks describe the real
# work and have resources allocated to them. Many attributes of tasks
# are inherited from the enclosing task. This saves you a lot of
# writing.
task acmesite "Acme Web Site" {
  start 2009-03-19
  #end 2009-09-19


  # All work related costs will be booked to this account unless the
  # sub tasks specifies it differently.
  account costs


  #task exampletask "Example Task" {
  #  start 0000-00-00
  #  end 0000-00-00
  #  effort 1h #man hours required
  #  length 1d #working hours it runs for
  #  duration 1w # calendar time it runs for
  #  priority 1-1000
  #  depends !taskname
  #  scheduling asap|alap
  #  allocate resourcename
  #
  #}
 




}

# Bookings should be put here
# supplement resource r1 {
#   This is the work that has been done up until now by r1.
#   booking 2003-06-06 2003-06-07 t1 { sloppy 2 }
#   booking 2003-06-08 2003-06-09 t1 { sloppy 2 }
#   booking 2003-06-11 2003-06-12 t1 { sloppy 2 }
# }

# A traditional Gantt Chart for the TaskJugglerUI
taskreport "Nice Gantt Chart" {
  headline "Schedule G - Gantt Chart"
  caption "Acme Web Site"
  columns name, start, end, effort { title "Work" }, duration, chart
  # For this report we like to have the abbreviated weekday in front
  # of the date. %a is the tag for this.
  #timeformat "%a %Y-%m-%d"
  timeformat "%d/%m/%Y"
  loadunit days
  hideresource 1
  #rolluptask 1
  rollupresource 1
}

# A traditional Gantt Chart for the TaskJugglerUI
taskreport "Gantt Chart" {
  headline "Project Gantt Chart"
  columns hierarchindex, name, start, end, effort, duration, chart
  # For this report we like to have the abbreviated weekday in front
  # of the date. %a is the tag for this.
  #timeformat "%a %Y-%m-%d"
  timeformat "%d/%m/%Y"
  loadunit days
  hideresource 1
}

# A list of tasks showing the resources assigned to each task.
taskreport "Task Usage" {
  headline "Task Usage Report"
  columns hierarchindex, name, start, end, effort { title "Work" }, duration,
          cost, revenue
  timeformat "%Y-%m-%d"
  loadunit days
  hideresource 0
}

# A list of all tasks with the percentage complete for each task
taskreport "Tracking Gantt" {
  headline "Tracking Gantt Chart"
  columns hierarchindex, name, start, end, effort { title "Work" }, duration,
          completed, chart
  timeformat "%a %Y-%m-%d"
  loadunit days
  hideresource 1
}

# A graph showing resource allocation. It identifies whether each
# resource is under- or over-allocated for.
resourcereport "Resource Graph" {
  headline "Resource Allocation Graph"
  columns no, name, rate, utilization, freeload, chart
  loadunit days
  hidetask 1
}

# A list of all project resources, both human and material resources,
# together with the costs for each.
resourcereport "Resource Sheet" {
  headline "Resource Sheet"
  columns no, name, efficiency, id, maxeffort, rate
  loadunit days
  hidetask 1
}

# A list of resources and each task associated with each resource.
resourcereport "Resource Usage" {
  headline "Resource Usage Report"
  columns no, name, utilization, freeload, cost
  loadunit days
  hidetask 0
}

# This report looks like a regular calendar that shows the tasks by
# their dates.
htmlweeklycalendar "Calendar.html" {
}

# This report is a status report for the current week. It also
# provides an outlook for the next week.
htmlstatusreport "Status-Report.html" {
}

# A P&L report for the project.
htmlaccountreport "Accounting.html" {
  # Besides the number of the account and the name we have a column
  # with the total values (at the end of the project) and the values
  # for each month of the project.
  columns no, name, scenario, total, monthly
  headline "P&L for the Project"
  caption "The table shows the profit and loss
           analysis as well as the cashflow situation of the Accounting
           Software Project."
  # Since this is a cashflow calculation we show accumulated values
  # per account.
  accumulate
  scenarios plan, delayed
}

Main Menu

Personal tools

Toolbox