The Eisenhower Matrix in TaskWarrior



The Eisenhower Method is based on the simple understanding that urgency and importance are not the same (see for example The Eisenhower Method with a picture of the "matrix" at Wikipedia). The goal of this post is to implement it with TaskWarrior. We have to model the two dimension "priority" and "urgency". TaskWarrior has a notion of urgency but this is something totally different (it is a real number that tries to indicate how urgent a task is and that is derived by a complicated algorithm from facts like priority, duedate and dependence on other tasks). So I decided to use tags to model urgency: +urg for urgent tasks and +unu for unurgent tasks. For the priorities "important" and "unimportant" I use the built in priority field with the value H for important and L for unimportant (I'm not sure what to do with the priority M yet). Everything that does not have a priority or that is leaking both the +urg and +unu tag will be placed on an "inbox report" meaning that it has not yet been categorized completely.
report.inbox.description=INBOX report
report.inbox.filter=limit:page dep: status:pending -maybe -idea -FU -activedept and '( ( prio.not:H and prio.not:L ) or (-urg and -unu))'
report.inbox.columns=id,project,description,entry.age,tags
report.inbox.labels=ID,Proj,Description,Age,Tags
report.inbox.sort=entry+
This report does the following: * It shows only one page full of entries * it only lists task that are not depending on some other tasks (if the blocking task is done, they will automatically appear in the INBOX) * it only lists tasks that are not tagged by +maybe (tasks that are very optional),+FU (tasks that I delegated and are now on the "follow-up" list), +idea (I also use TaskWarrior to make notes about ideas that may or may not become projects in the future) or +activedept (since I don't want to let active depts show up on my INBOX report) * it only lists tasks that do not have a priority of L or H and also tasks that are neither taged with +urg nor with +unu * and sorts by entry date descending - showing the oldest entry first We also need reports for the different quadrants of the Eisenhower Matrix. So lets add the report definitions above and below to our .taskrc.
# task Q1
report.q1.description=Quadrant 1: important and urgent
report.q1.filter=limit:page status:pending and prio:H and +urg
report.q1.columns=start.active,id,project,urgency,description,entry.age,tags
report.q1.labels=A,ID,Proj,Urg,Description,Age,Tags

# task Q2
report.q2.description=Quadrant 2: important and unurgent
report.q2.filter=limit:page status:pending and prio:H and +unu
report.q2.columns=start.active,id,project,urgency,description,entry.age,tags
report.q2.labels=A,ID,Proj,Urg,Description,Age,Tags

# task Q3
report.q3.description=Quadrant 3: unimportant and urgent
report.q3.filter=limit:page status:pending and prio:L and +urg
report.q3.columns=start.active,id,project,urgency,description,entry.age,tags
report.q3.labels=A,ID,Proj,Urg,Description,Age,Tags

# task Q4
report.q4.description=Quadrant 4: unimportant and unurgent
report.q4.filter=limit:page status:pending and prio:L and +unu
report.q4.columns=start.active,id,project,urgency,description,entry.age,tags
report.q4.labels=A,ID,Proj,Urg,Description,Age,Tags
For a faster workflow, I placed the following in my .bashrc to enable me to write something like q3 55 to move the task with id 55 to quadrant 3 (urgent but not important) or just q3 to display quadrant 3 (for whatevery reason ;-) ):
function func_q1 {
    if [ $# -ne 1 ]; then
        task q1
    else
        task $1 mod prio:H +urg -unu
        task inbox
    fi
}
function func_q2 {
    if [ $# -ne 1 ]; then
        task q2
    else
        task $1 mod prio:H +unu -urg 
        task inbox
    fi
}
function func_q3 {
    if [ $# -ne 1 ]; then
        task q3
    else
        task $1 mod prio:L +urg -unu  
        task inbox
    fi
}
function func_q4 {
    if [ $# -ne 1 ]; then
        task q4
    else
        task $1 mod prio:L +unu -urg 
        task inbox
    fi
}
alias q1="func_q1"
alias q2="func_q2"
alias q3="func_q3"
alias q4="func_q4"
Since I ended up calling task inbox everytime after a call of q1, q2, q3 or q4 with an argument, I added the line task inbox in the else branch of all the four functions.

Tags:

2 Replies to “The Eisenhower Matrix in TaskWarrior”

  1. Danke für den tollen Artikel! Ich habe aus den Reports die Urgency rausgenommen, da ich mit dem numerischen Wert in der Ansicht und auf Papier nicht viel anfangen kann. Stattdessen habe ich die Felder Priorität, Zieldatum (Due.Date) und Countdown mit aufgenommen. # task Q1 report.q1.description=Quadrant 1: important and urgent report.q1.filter=limit:page status:pending and prio:H and +urg report.q1.columns=start.active,id,project,description,entry.age,priority,due,due.countdown report.q1.labels=A,ID,Proj,Description,Age,Pri,Due,Countdown Michael
  2. Hi, I think you want to use -BLOCKED instead of dep: for the inbox filter, otherwise the unblocked tasks don't show up after completing the dependencies. So I personally use report.inbox.filter=((prio.not:H and prio.not:L) -or (-urg and -unu)) status:pending -BLOCKED Best, lub

Leave a Reply

Your email address will not be published.