Last term, I wrote a to-do list manager in Scheme for a class project. I have been frustrated with all the to-do list managers out in the world, so I finally wrote my own.
(OSAF‘s Chandler might have some of the features that I want, but it’s heavierweight than I need and isn’t really ready for prime time yet.)
The problem with most electronic to-do list managers is that they accumulate way too much stuff. I write down all the things I need to do, and then I am overwhelmed by the volume of tasks. Tasks that aren’t important or urgent or that I can’t work on right now end up getting in the way of seeing what I need to do right now.
I want to record that I need to take the car in for servicing in about three months, but I don’t want to see it until about three months from now. I want to write down that I need to paint the house, buy paint, buy rollers, and move furniture, but I don’t need to see the “move furniture” task until after I’ve bought the paint and rollers.
In my to-do list manager, tasks are presented in a hierarchical structure, and I gave myself three different methods for hiding things:
- Hide completed tasks
- Hide supertasks (i.e. those that I can’t start on until some other task is finished)
- Hide deferred tasks (until some later date (specified on a per-task basis))
(I of course also have the option to show completed tasks, show deferred tasks, or show supertasks.)
If I hide completed, deferred, and supertasks, then what is left are the things that I can work on right now.
Note that there is no option to mark supertasks “done”. My Scheme version also doesn’t let you defer tasks with dependencies, but I haven’t decided if I am going to keep that or not.
I had thought that it would be nice to have separate importance and urgency fields, as those really are different things. Answering a ringing phone is very urgent but probably not very important (voicemail will pick it up); writing a will is very important but (hopefully!) not very urgent.
It turned out, however, that I didn’t really miss having distinct urgency and importance fields; if an item wasn’t urgent, I just deferred it. Presto, out of sight, out of mind.
One thing that I hadn’t originally planned on, but which I did and liked, was to change the color of tasks based on how important they were rated. Very important tasks were deep blue, and as the tasks got less important, they got more and more washed out (less saturatated).
My Scheme version has a text box on the main page for quickly creating new tasks, but there was a cruical flaw: no way to specify which task was the parent task. I thought about showing an arbitrary number next to each task in the list of tasks, and using that to specify the parent, but that didn’t seem appropriate. Really what you need to be able to do is drag-and-drop tasks to different places in the list.
One thing that I thought of doing but didn’t get around to was to be able to expand/collapse branches of the tree. Thus if I just don’t feel like working on upgrading the family IT infrastructure today, I can collapse that task (and all its subtasks) down to one line.
I’ve started porting my to-do list manager, making it an AJAX application so that I can host it on my site at Dreamhost, but I’m not going to finish before I start at Google, alas.
Someday I’d like to integrate it with a calendar. (The Google calendar has an API; maybe I could connect to the calendar.) Someday I’d like to add optional at-location and with-person fields, so that I could ask what tasks I can do at e.g. the hardware store (like “buy paint”), or with e.g. Jim. But that will probably have to wait until after the summer is over.