Task Manager

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 urgenturgent 
    BAimportant
     Cnot 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 href=”http://www.arsdigita.com/pages/toolkit/”>ArsDigita Community System, I’ll probably use <a href=”http://www.arsdigita.com/doc/general-comments.html”>general comments for this.



  • I’ll use <a href=”http://www.arsdigita.com/doc/general-links.html”>general links to let users record arbitrary URL links for a task.

0 comments

There are no comments yet. Be the first one to leave a comment!

Leave a comment