TaskJuggler - project management tool to plan and track projects, resources, tasks, costs and deliverables. TaskJuggler is written in Ruby and leverages parts of the KDE environment. Original code came from SUSE Linux in Germany (now Novell). The software is used by many people/organizations like AMD and there is good support in the active forums and mailing lists. Source code is maintained on GitHub.
There is a new version - TaskJuggler III - that is in beta now, and the system is a complete rewrite of the C++ system in ruby, maintained in a git repository instead of Subversion. The project is still maintained by Chris Schlaeger.
Unfortunately, it does not appear that there is any QT4 development work going on, so it remains doubtful when we'll see TaskJuggler in KDE4 -- however the 2.4 version is available in Ubuntu repos and appears to work as before (so perhaps it's not dependent on KDE3)
Contents
Using TaskJuggler
The GUI application front-end is called specifically TaskJugglerUI while the commandline tool is taskjuggler. Aside from managing all aspects of a project including calendars, dependencies, costs and scenarios, the software provides HTML reports that make it very convenient to communicate the project status easily. The software is based on KDE, and as such has a great deal in common with the Quanta or Kate editing enviroments. Still, you may find it useful to edit the files in the full-blown Quanta or Kate. See the Contribs section for more info on using an external editor.
Training
- TaskJuggler-Workshop.pdf (328KB, MIME TYPE: application/pdf) Adobe Portable Document format
- http://www.taskjuggler.org/download/TaskJuggler-Workshop.sxi (source)
is a complete set of slides used in the TaskJuggler training workshop.
Help
There is extensive help distributed with the application and available online in HTML format. From inside the application, you can press F1 to launch the KDE Help Center. The equivalent command line would be
khelpcenter file:/usr/share/doc/kde/HTML/en/taskjuggler/index.html
The tutorial included inside the application help also provides complete example project files.
Cheatsheet
Assigning the effort, duration and length of a particular task is fundamental to getting the right results.
- effort
- is a measure of how much a person must do. Warning to project managers and estimators: effort 10d does NOT equal 5d when you have two resources to divide up the task. The software will let you say so, but that doesn't make it reality. The ONLY time this is reality is if the effort can be partitioned without adding ANY overhead. For more information, read "The Mythical Man-Month" by Frederick P. Brooks, Jr.
- length
- is a measure in working days I.e. length 20d = 1 month
- duration
- is a measure in calendar days I.e. duration 30d = 1 month
- interval
- is similar to duration with specific start and end dates. There is no keyword, you just specify (or inherit) the start date and specify the end date. E.g. start 2007-05-01 end 2007-05-15
In the Logical Expressions supported by TaskJuggler, the tilde character means 'NOT' e.g.
icalreport "drupalProjectGregIcalReport.ics" {
# Only export tasks that Greg is assigned to
hidetask ~isDutyOf(Greg, plan)
}
In the dependency scoping, it is normal to use a relative reference so that sections are more easily portable throughout the project definition. The notation for relative references is to use the exclamation character '!' to mean one level up. The ! carries exactly the same meaning as ../ in filesystem notation. In addition to relative references, object paths are represented using '.' dot notation. E.g.
depends !!implementation.gui.theming
One approach to balancing resource loads is to use the limits property right in the allocation. You can also define limits in the resource defintion, or you could adjust (artificially) workinghours
task baseActivities "Baseline Activities" {
effort 3000h
start 2008-04-01
allocate GregRundlett { mandatory limits { dailymax 4h } }
allocate SallyStar { mandatory limits { dailymax 4h } }
allocate JoeDoe { mandatory limits { dailymax 4h } }
}
Files
- .tjp
- The TaskJuggler project file will have the .tjp extension.
- .tji
- Since projects can be defined so as to include other resources, those include files are named .tji.
- .tjx
- created by the report function, these are the (compressed) XML versions of the source data
XML
Using the XML report function, you can export the project into XML format (identified with the .tjx extension). These XML files are actually compressed (with gzip). Thus, in order to edit them directly you would need to uncompress them and give it an .xml extension
gunzip -S tjx --stdout myProject.tjx > myProject.xml
or
zcat myProject.tjx > myProject.xml
The TaskJuggler DTD defines the XML syntax. The application can read either the tjp source or tjx source files equivalently.
Once you have the XML source, you can use any XML editor like Kate or Quanta as an editing interface rather than the TaskJuggler software. When finished, you need to convert the XML source back into tjp syntax, and I haven't found a script or XSL to do that yet
Integration
VI
For instructions on setting up syntax highlighting so that Vi 'knows' about TJP and TJI syntax, see Syntax Highlighting
FreeMind
FreeMind is a mind mapping tool that can be used to quickly break down and organize the things that need to happen in a project (aka the Work Breakdown Structure or WBS). FreeMind has built-in ability to export nodes as TaskJuggler include files. Just name the node TASKS or RESOURCES and use the File->export menu option. Then include the resulting files in your TaskJuggler project. See http://freemind.sourceforge.net/wiki/index.php/FreeMind_0.9.0:_The_New_Features#TaskJuggler_Integration
Wiki
To manage projects in a bottom-up fashion, you could create a wiki template or series of templates that allow participants to view and define the project plan in a medium that enables collaboration, cross-referencing to support and linking to other resources by all project participants. At any given moment, you can then take these defined tasks from the wiki and roll them up into a TaskJuggler file. Conversely, you could take a top-down approach by defining tasks in TaskJuggler and publish that information via (XML) export to the wiki
<!-- template guide --> {{task | id = myProject | name = "Distribute Free Software to 400,000 in India" | account = | allocate = | complete = | depends = | duration = | effort = 100d | endbuffer = | endcredit = | end = | flags = | journalentry = | length = | maxend = | maxstart = | milestone = | minend = | minstart = | note = | period = | precedes = | priority = | projectid = | purge = | reference = | responsible = | scheduled = | scheduling = | shift = | startbuffer = | startcredit = | start = | statusnote = | supplement = | task =}}
Extensions / Contribs
See the source code for contributed code that extends the application e.g. /usr/local/src/taskjuggler-2.2.0/Contrib/ There are Contribs for
- emacs
- kate
- tjGUI
- TJ-Pert
- tjx2gantt
- vim
So, in the case of Kate, there is a DTD that defines the markup structure so that Kate can easily assist you in editing the file
There is also a similar DTD available for Quanta Download it, extract it into the DTEP directory and you can use it on .tjx files. (.tjx files are compressed. See the note in the files section)
There is also a website page http://www.taskjuggler.org/contrib.php that lists some resources which are not distributed with the source code
Example Project File
http://www.taskjuggler.org/manual-svn/example.html shows this example file (presented here with syntax highlighting)