‘gest’ project progress estimation tool
Saturday, September 6th, 2008Something I’ve been tinkering with in spare time is a tool to help answer the interminable question, “when will it be done?” (closely related to “are we there yet?”)
Scarily enough, I could not find a single project management tool that would work this out for me. Sure, you can go and work out your dependency graph and schedule holidays and make pretty charts that say when various features should be done, but at the end of the day, you have a big elaborate guess that has no bearing on reality.
gest, which started life as ‘est’ and which I tweaked to make a pun on ‘guessed’, simply tries to figure out when a project will be complete. It does this by measuring your actual progress over time. If you’re getting through 10% of a project each day, you can reasonably assume that in 10 days your project will be complete. If your project’s scope is increasing faster than you’re completing it, you will have negative progress, and so you will never complete it. The following graph (produced by gest) may help to illustrate this better:
One nice thing about this is that you don’t have to worry about estimate accuracy, weekends, holidays, part-timers, tasks which distract you from your project, juggling multiple projects, and so on. None of it matters. All that gest is saying is for every day, on average, you complete x hours from your schedule. There are y hours total, so you will complete the project in y/x days. If the schedule changes, your y value will change along with the completion estimate. If you’re distracted by an emergency or another project, your x rate will change, and the completion estimate will be revised.
The output from the command line boils things down a little more:
BLSA licensing and encryption will finish on 2008-11-02 13:59:39; we're getting through 1.47hpd Estimation tool will finish on 2008-09-07 23:49:00.666667; we're getting through 3.52hpd Get your CISSP will finish on 2009-01-15 21:00:18; we're getting through 0.82hpd BLSA autobuild system will NEVER finish. SyncDroid Alpha Release will NEVER finish. Aggregate work-rate is 5.90hpd
‘hpd’ is a bastardisation of ‘hours per day’ and is a rough measure of how quickly a project is being completed. Note that the total work rate of 5.9hpd makes me feel a lot better about these projects taking so long (I can see that I’m not slacking off!) and doesn’t account for smaller projects which I don’t bother putting into this system.
Effectively, gest is decoupling the idea of an hour (used to represent work to be completed) from the time measurement of an hour. This is why I quote ‘hours’ in the graph. When you see 80 hours left on my SyncDroid schedule, that doesn’t mean that if I pulled two solid weeks of work I could have it finished. What is relevant is that over the past two months, the amount of work remaining has actually increased as I come up with new requirements and don’t complete any old ones, and so it doesn’t look like I’ll ever finish it (eek!)
Writing a schedule for gest roughly mirrors writing a todo list. I’ve moved to gest schedules as my primary project task-tracking system. It’s a simple text file that looks like so:
# Probably shouldn't let people see this list
Take over the world!
4 Call the president
Raise a military
2 Buy military fatigues from an army surplus store
3 Recruit people at the supermarket
1 Find some stray cats with sharp claws
1 Pick up milk on the way home
It’s just a hierarchical tree using indentation to denote depth, the same way as Python code. ‘Take over the world!’ is the project’s name, and should not be indented. Comments start with #. The numbers before task names are the number of hours required. You can hide a project from the graph by prepending its name with a hyphen (-). When you complete a task, put a period before its name or just delete it from the list.
Each time you run gest, it will take your current schedule, add it to a history database and regenerate the progress graph, which is displayed as a PDF. The overall stats (expected completion date and work rates) are printed on the command line.
gest depends on tinytree and pry from the awesome security geeks at Nullcube. The rest of the dependencies are fairly standard. Grab it from the git repository at:
git clone http://git.mutexlabs.com/gest

When the boards are cut, the bare copper will be exposed. I haven’t investigated the issue much, but I expect it’ll allow oxidisation and probably bad things long-term.





