The ultimate ToDo, task management, GTD tool.
I’ve tried quite a few online and desktop todo list applications. Some are quite good, lots are not. None has everything. I thought that i would write down what everthing is, just so that i can keep track of which tools have what. This is just a hodge-podge of features and requirements.
I should make it clear that this list ignores pure project managment tools. No gantt charts, no adding resources to tasks. More basic. Let the PMs use MSProject or, better yet, OpenWorkbench to do all that planning.
Here is a list of some of the software that i’ve used, and am stealing all the good ideas from, and learning from their downsides: Tasks Pro, ActiveCollab, GTDTiddlyWiki/MonkeyGTD, Propel’r (vapor so far), ThinkingRock, Sandy, Vitalist, RoundUp, phpCollab - an open source version of Macromedia’s SiteSpring. I’ll try to add context to each of these, giving the good and bad of each. Just got wind of RedMine, which looks darn good.
In (re)looking at some of the above tools, i need to talk a bit about the interface. How one implements all/some of these requirements and features is of paramount importance. If the thing looks like Microsoft Word, with 8 billion buttons and menus, its just not going to fly. Simple, clean. It can be complex, but not complicated. Keep easy things easy, make difficult things possible. I’m drawing from Aza’s blog over at Humanized, and his fathers ideas on interface design.
Tadalists is a good example of the simplest to-do list. Very straight forward. But that is really all it does. Vitalist, i think, has a pretty great interface, but is still mostly a single user tool. Sandy is all about the email interface, and Roundups, once you’ve used it, is hard to give up - see this paper for the thinking behind why Roundup works the way it does.
In talking about Roundup, i’ve gotten to thinking about implementations. I’ve become quite enamored with Erlang lately, and i came to it via CouchDB, which i think could be an excellent match for a project like this. Although, i say that about every cool new programming language/technology i find! Anyway, Roundup uses a Hyperdatabase (from this paper), which is a non-relational DB. CouchDB is inherently non-relational, and document centric, with name-value pairs comprising each document. This lack of schema could be advantageous for dynamic addition of items, data or meta-data that was not hard-coded into the application. I believe that this was one of the big pluses of Lotus Notes’ way of doing things too - see this great intro for more info about Notes. I’d also look to the Yahoo! User Interface Library for the front-end and a Python web framework (Django or Turbogears) to run the back end.
The List
Support for Project/Task management methodologies. These are just suggestions, although, for me, i’d want support for the GTD stuff at a minimum. I need to look at what XP/Scrum would need and how it might interface with a product that i would want to use before i can say they are must-haves.
Support for tagging everything - used as both contexts for GTD, but just good to have regardless.
Multi-user support baked in from the beginning.
Robust Permissions/Access Management Tools
- public/private data - everything defaults to ‘private’ to the group that an item is related to.
- view, edit, create
- easily create groups - this replaces the hard-coded company/subcompany/department. These are all just different ‘groups’. Each group will have a set of members, which could be dynamic, with a set of permissions.
- Roles - assigned to individuals? items? anything? basically a way to have a template of permissions. Is a role specific to a group or an individual?
Time tracking/Time estimation/Actual time
Due-dates/Milestones/
Reoccurring tasks
Reports
Searching, Sorting and Grouping on arbitrary data
The creation of Smart folders/groups, containing Searches, Sorts or Groups, dynamically updated
Delegation/Assignment/ownership of items
- Delegation “It is the assignment of authority and responsibility to another person to carry out specific activities.”
Dependancies/Task sub-task relationships/heirarchical relationships
Forms and templates (‘submit a bug’ form, which would take a textarea input, and create a task from it)
Being able to move anything from one place (in a hierarchy for example) to another (another task/sub-task group).
Notes/Messages/Comments on everything
- It might be good (overkill) to allow for linking between notes/comments/tasks etc. Wiki-like. Everything is linkable.
Attachable Files
RSS, Atom, iCal feeds.
Versioning for everything - every change is tracked and saved, including attached/uploaded files.
History for everything - each edit/change of state is recorded - user/time/action etc.
Was thinking about % done, but really, each task should be pretty atomic. The percentage done could be for parent tasks, that have a number of sub-tasks, and it could then show the % of done sub-tasks.
Configurable Printouts - PocketMod, hipster PDA, etc..
Email interface
Reminders/Alerts
Add tasks via Email
on the fly mailing lists - see Roundup for how the email gateway might work. How this interacts with groups/access controls is an important question to answer. Someone who is not registered with the tool, but invited via an email to participate in the discussion around an item will need some default permissions, which could be associated with a Role, which could be different from group to group. What happens when there is more then one group associated with an item? Use the Role with the lowest set of access permissions? Highest?
Different Views? (this is getting in UI territory)
Outline style
This brings up the idea of clones - an item that appears in multiple places in a list/group/outline/hierarchy. Leo is a great outliner which uses clones.
List style
Calendar view, or just allow for a rich iCal output and let the user pick what calender they want to use? ie. just subscribe your iCal at google.
Guest access (for bug/feature submission without having people sign up)
Workflow - attached to roles and groups. Who can set what to what when.
Interface with Version Control Systems - SVN, CVS, etc.

Leave a comment