I have developed a task management tool. And some task lists can be very large. (I have myself more than 300 tasks to do).
I would like to do some task reviews from time to time as the tasks pile up to be able to sort them by priority.
I imagine presenting tasks 2 by 2 to the user and ask him what task is more important than the other. Repeat until all the tasks are sorted.
Note that:
- The algorithm need to be "halt resistant": the user can abort the review when he wants to and the result of precedent sortings would not be lost.
- The tasks already have a initial rank already set by the user by hand that represent the priority.
My questions are
- What is the best algorithm that reduce the number of comparison needed to sort all tasks ?
- Do you have a better strategy to propose (or way of presenting the tasks and questions) in order to speed up these reviews ?
EDIT 1
Thank you very much for all this feedback !
To answer some questions:
- Yes, each tasks have responsibles and each responsible can order all (thous their) tasks.
- We already have tags, but a tasks review is there to determine priorities among them. I agree that priorities can also be set by features and at the task level.
- I do not want to have a tree of tasks classified by features and lose the flat list. I prefer a flat backlog with tagged tasks. It is sometimes very useful to prioritize a task belonging to a not so important feature placed later in the queue.
- I realize that I maybe have first focused on this problem on the software level (asking for an algorithm) but my question is maybe belonging more to a project management group. I wonder for example how the agile review meetings are held.
EDIT 2
The more I think about it and what is my goal is (asking this question of this algorithm), is that I want to make it fun to do the tasks review.
The ultimate goal is keep tasks ordered by priority. But it is danting to review tasks. I'd like to have a sexy interface where tasks are presented, and the user could play while doing his review. The sexy/playing part is up to me, but I have a hard time finding a way to logically (algorithmically) present tasks and then order them, giving that the user can stop this process at anytime.
Say I present 2 random tasks, and that the user says that B is more important than A and stop there. Then what ? Does that mean I simply update the rank to b.rank = a.rank - 1 (lower the more important it is). And why randomly by the way ? Is there a logically thing to do there ? You see, I don't know how to proceed.
EDIT 3
I received a lot of input and I will greatly profit from all of them, so a big thank to all of you.