Yet another software design proposal.
The Big Picture
I need a tool to help me manage my time. It’s my time, and the tool should recognize that fact. It shouldn’t try to make me do anything I won’t, and it shouldn’t get in my way. That’s the main idea here.
Here are the main requirements for my task manager:
- I want my tool to help me remember tasks that I must get done. But I
also want it to remember things that I’d like to get done,
that are not critical (but they might be fun).
- I want it to help me
remember what state I left a task in when I last worked on it, so I can
more easily pick it up later on.
- I want it to give me a clear overview
and arrange the things according to my head. Move stuff up and down my
list, put things aside for later, note it somewhere if I’m waiting for
someone else to do something before I can move on on the task.
- I also want to be able to categorize things, to help me divide my
time between, say, work, fun, organizing a private party,
etc. Grouping tasks together into bigger task chunks might be helpful,
too, but it’s tough to come up with a usable UI for that.
- Some task management gurus operate with the notion of A, B or C
tasks. They’re on a small grid:
not urgent urgent B A important C not important
Originally, my plan was to have hitgh/medium/low for both dimensions of priority (urgency is probably a better term) and importance. Maybe the simple A/B/C-scheme is simpler for people to manage and understand.
- I want my tool to have some clever default views that follows my
moods. Sometimes I’m really in the mood for diving into some
challenging and time-consuming task and spend all day doing
that. Sometimes I’m completely bombed, and just want to get some
routine, boring stuff done, stuff that doesn’t require normal brain
functions. That sort of views. I’ll think about the details when I’ve
got the basic tool working.
A World Outside
It’s obvious to integrate the task manager with other tools, sucs as a workflow manager, the ticket tracker or an email client. But each of their scope is different. The workflow manager’s purpose is to manage the workflow of processing a case, not to manage my time. The ticket tracker’s purpose is to organize communication around a ticket, and make sure no ticket slips through the cracks, not managing my time. The email client is good at managing email, but the task manager is better at managing my time, i.e. when I’m going to reply. So I want to be able to link any task to any other object (at least to any other object with a URL).
Another thing is collaboration. It’s natural for a group of people to have a list of stuff that needs to get done. A task manager might be reasonable at solving this problem. But there’s a crucial difference. The task manager is thought of as a personal tool, so all the tasks I’m supposed to do should be in my personal task manager. If one of the group tasks are delegated to me, an entry should show up in my private task manager, linked to the group task mananager. It’s imperative that I’m able to prioritize stuff on my own task list, independent of how they’re prioritized on the group task list.
Under The Hood
The basics are pretty simple:
create table todo_tasks ( task_id integer constraint todo_task_id primary key, owner integer constraint todo_task_owner_fk references users, one_line_desc varchar(200) constraint todo_task_one_line_nil not null, description clob, -- 1 is A, 2 is B, 3 is C, 4 is no priority priority integer constraint todo_task_priority_ck check (priority between 1 and 4), -- to move stuff up and down within one priority sort_key integer, load integer constraint todo_task_load_ck check (load between 1 and 3), start_date date, deadline date, state varchar(40) constraint todo_task_state_ck check (state in ('waiting','active','suspended', 'canceled','completed')), suspended_until date );
A bunch of things are missing, though:
- A table of categories and a table mapping tasks to categories
- A parent table,
todo_list, to hold an entry per seperate list of tasks. By default, each person will have his own, but since a todo list can also belong to a group, it’ll be cleaner to have a parent table.
- An audit table for all activity regarding a task, especially state
changes. Since I’ll be implementing this as part of the <a
System, I’ll probably use <a
comments for this.
- I’ll use <a
links to let users record arbitrary URL links for a task.