Occasionally, I have to put together a project schedule with a Gantt chart. In my software engineering class, I figured I should use something cross-platform and open-source, and not Microsoft Project, which I vaguely remember as a muddleheaded mess.

Making a Gantt chart for a small project should not be rocket science, right? Put in each task, estimate the duration, assign a person, and specify which tasks depend on each other.

http://ganttproject.biz/img/ganttproject-house-building-sample.png Unfortunately, it isn't so simple. I started with GanttProject, a visually appealing Java application. I can enter tasks, assign resources, and link dependent tasks. Then I get a useless chart that has each developer working 120 hours per week. To “solve” that, I need to add bogus dependencies. By hand. If I change my mind and erase a dependency, the task doesn't flow back to its prior location. It has now remembered its delayed start time, and I need to manually move it if I want it elsewhere. That's not scheduling. It's painting.

http://openproj.org/themes/bluebreeze/images/OpenProj_thumb.jpgI moved on to OpenProj, another visually appealing Java application. First off, why does an open source project block PDF file generation, suggesting I use the commercial version instead? Don't they know I can just print to PDF? Or do they rely on me being stumped by this nasty Java bug? OpenProj remembers when I specify a task without locking in a specific start date, which is good, but it simply has no provision for resource leveling. I wanted to like it, so I tried manual leveling by adding bogus dependencies. But it was just too painful. Particularly since the mouse clicks for linking tasks had to be just so, or you'd accidentally increase a task duration.

no-mouse.jpeg Next, I tried TaskJuggler. TaskJuggler has a brilliant concept: No GUI. No mouse clicks. You just enter the tasks in a text file. Mercifully not XML. I had mine entered in a jiffy. It produced a schedule. With automatic resource leveling—nobody worked more than 100%. But the schedule was just a table, without a Gantt chart. To make a Gantt chart, you launch an ugly GUI application, written in Qt. The tool didn't do anything but generate the graphs, which you must then print to PDF. You can't just do that from the command line. Launch the tool, click, click, click, click, click, click, get your Gantt chart. What a way of snatching defeat from the jaws of victory!

Judging from the comments on the mailing list, this is some Qt3 limitation, and they are ever so slowly moving to Qt4. Sheesh. Fortunately, this brilliant fellow wrote a program that lets me make a passable Gantt chart from the command line. Using Python, and thePyX library that pulled in half a gigabyte of TeX files when I installed it. Sheesh.

What do I conclude from my journey?

Lesson #1. The keyboard is more powerful than the mouse. It was not just a little bit faster to enter my schedule into the simple markup language of TaskJuggler. It was faster by an unbelievable amount. Sure, I'll suffer a bit when I need to edit the schedule, and I have to locate the items in the text file instead of dragging bars. But I am so far ahead that I don't care.

Lesson #2. If you want cross-platform, just use Java. There has been all this bellyaching in the open source world about how Java is too slow or too proprietary or whatever, but the alternatives are pathetic. Had TaskJuggler been a Java app, it would have been a jiffy to produce charts in headless mode. And Windows and Mac users would be able to use it without going through unnatural acts.

Do you have a tool that you actually like for generating Gantt charts? If so, please let me know.