Skip to main content

Grief with Gantt charts

Posted by cayhorstmann on November 17, 2008 at 2:27 PM PST

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.

width="170" height="134" /> 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 href="">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.

alt="" src=""
I 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
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 href="">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, href="">this
brilliant fellow wrote a program that lets me make a passable Gantt chart
from the command line. Using Python, and the href="">PyX 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 href="">unnatural acts.

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


coxcu: I had a look at taskblocks. It has a pretty UI, and it makes sure that people aren't overloaded, but it has no provision for task dependencies.


User/password: admin/admin or guest/guest

Task Blocks might be worth keeping an eye on. Task Blocks

> I've not really used it, but in theory it is cross platform-ish since it uses GNOME stuff: > I used to use it when it was still Mr. Project. As far as I remember, it was good enough, at least for our needs...

hi cay, ashvini here...........cay i want to make a "jar file" as a "window service". inface i don't want to execute jar file by double click on it.......rather i want to make this "jar file" set as a window this posible cay ? please help me cay it is urgent for me. i m using window xp. thank u.

I also tried several alternatives - including web solutions like dotProject. But anyway - nothing that really made me happy - so we are in the same boat.

Nice article. Like hat27533, I got the same problem as you have. But I'm also interested if someone has a workable alternative.

Aren't you expecting too much? If you google 'resource leveling' algorithm you will find at least from the top page that resource leveling is not a trivial problem. If you can point to a good source for the algorithm, I agree that the rest of the program will be quite easy to make in Java.

Thanks emarcotte. But Gnome Planner is really too basic. It also lacks support for resource leveling. TaskJuggler has its heart in the right place. The computational engine does the right thing, but then they went this weird detour with using Qt. BTW, here is an interesting article that potentially explains why there is no good software for drawing Gantt charts: Except, I think it is totally bogus. When I have a project with six developers, it does not spontaneously self-organize. And the humble Gantt chart does a good job in giving everyone some basic direction of work.

I've not really used it, but in theory it is cross platform-ish since it uses GNOME stuff: Good luck!

I am not the only one with the same experience as you then. You could always try creating a spreadsheet and gant chart with openoffice. :-)

When I made a Ghantt project tracker, I ran into questions about how to store tasks, either as a date range, a start date + duration, deadline - duration, and calculating duration based on # of resources is never really accurate anyway.

Task dependency is a sticky issue on it's own, as one task may be dependent on two other tasks, that are not themselves dependent on each other. Also a task may depend on the start of another task, not the completion of it (a parallel dependency). Others may be able to start at certain amount of time before the end of another task.

Resource leveling seems like a variation of the backpack problem, so maybe a modified version of some of those algorithms would work.