Recently I came to realise that my planning and memory skills weren't adequate to keeping track of what I want to do, and what I need to do.
For a while I've been fooling myself into thinking than "emacs ~/TODO" was a good way to keep track of tasks. It really isn't - especially if you work upon multiple machines throughout the week.
So I figured I needed something "always available", which these days mostly means an online application / website.
Over the years I've looked at many multi-user online "todo-list" applications, and inevitably they all suck. Mostly they suck because they're either too rigid or don't meet my particular way of working, living, and doing "stuff".
To my mind :
- A todo-list should above all make it easy to add tasks.
- If you cannot easily add tasks then you won't. So you'll never use it.
- A task might be open or closed, but it will never be 23.55% complete.
- A task might be "urgent" or not, but it will never be "urgent", "semi-urgent", "do soon", "do today".
- A task might have many steps but they should either be added separately, or the steps noted in some notes.
- I find the notion of making "task A" depend upon "task B" perilous.
- A task belongs to one person. It cannot be moved, shared, or split.
Some of those things such as subtasks and completion percentages I guess are more application to project management software. Those and time-sheet applications really wind me up.
With my mini-constraints in mind I sketched out a couple of prototypes. The one I was expecting to use had a typical three-pane view:
[ Task Menu ] | Task1: Buy potatoes | Task2: Remember to check email All Tasks | Task3: Order more cake. Completed Tasks |------------------------------------ Urgent Tasks | | [Taske Details here] Tags: | * Work | [Urgent | Non-Urgent ] * Fun | * Birthdays | [Close Task | Re-OPen Task ] * Parties | * Shopping | [Notes ..] ...
That turned out to be a pain to implement, and also a little unwieldy. I guess trying to treat a tasklist as a collection of email is a difficult proposition at best - but more on that in my next post.
So a quick rethink and now I've came up with a simple but functional layout based upon the notions that:
- Adding tasks must be almost too easy.
- Most tasks only need a one-line description.
- Adding tags is good. Because tasks cross boundaries.
- Adding notes is good.
- No task should ever be deleted - but chances are we don't actually wish to view tasks older than a month. We can, but we can hide them by default.
- When a task is closed/completed it cannot be edited.
- All tasks belong to their owner and are non-public.
So what I've got is a multi-user system which is essentially split into four behaviours: Adding a task, viewing open tasks, viewing closed tasks, and searching for tasks.
Tasks can be tagged, have notes added to them (but never deleted/edited) and over time closed tasks fade away (though they're never deleted).
Some of my constraints or assumptions might change over time, but so far I'm happy with them. (e.g. I can imagine tagging an entry "public" might make it appear visible to others.)
Anyway the code is (surprise) built using minimal perl & jquery and you can play with it:
The site contains a demo user which you can use. I don't much care if people wish to use it for real once it is more complete, but I expect that it will either be ignored completely or be the kind of thing you wish to self-host.
With that in mind the code is currently closed, but I'll add it to my mercurial repository soon. (Maybe even tonight!)
ObSubject: Dog Soldiers