Time Management for Systems Administrators and todo.txt

11 Jun 2013

I’ve been reading Tom Limoncelli’s Time Management for Systems Administrators once again, and am trying out (once again, for real this time) the time management system described in the book called “the cycle”. I also use todo.txt system as one of my (several) task list tools, and decided to try to make it work with the cycle.

The advantages of the todo.txt system are its simplicity, ease of adding new items (with an alias it’s simply typing t add Do something in any terminal window). The built in tools did need some tweaks to get things working correctly however.

One very nice feature of the cycle is that you have a different todo list for each day. Do you have something that needs doing Wednesday next week? Add it to that day’s todo list and you don’t have to think about it again until Wednesday comes around, at which point it will be on your todo list ready for you to look at. Items that you don’t get done today, either because you have decided you’re not doing them today or because you run out of time at the end of the day, get bumped to next day’s todo list and are marked as ‘managed’ on today’s todo list. This system makes it very easy to see what you have left to do today, and lets you immediately get items that aren’t going to be done today out of the way and to somewhere where you’ll come across them as a more appropriate time.

Out of the box todo.sh, the todo.txt cli script, is primarily made to work with a single file, namely todo.txt, and another to archive completed tasks so they don’t clutter up the main file. Because of this, I thought I’d have to write another tool to effectively deal with daily todo lists. However, the config file is actually sourced as a shell script, and so it was a simple matter to change to using a todo.txt file based on today’s date:

export TODO_FILE="$TODO_DIR/$(date +%Y-%m-%d).txt"
export DONE_FILE="$TODO_DIR/$(date +%Y-%m-%d)-done.txt"

So far, so good. I run todo.sh and it instantly picks today’s todo list.

$ todo.sh add Throw things at Brian once I get in the office
1 Throw things at Brian once I get in the office
2012-05-25: 1 added.

The book recommends 3 priorities for tasks: A - needs to be done today, B - needs to be done soon, C - everything else. Todo.sh also uses alphabetical priorities, and they’re simple to add/change:

$ todo.sh pri 1 A
1 (A) Throw things at Brian once I get in the office
TODO: 1 prioritized (A)

Todo.sh even has built in support for looking at other dated files:

$ todo.sh listfile 2013-05-24.txt # you could use 'todo.sh lf' here
1 Revoke VPN keys for bob
2 Purchase new servers

The missing piece was the ability to bump tasks, both individually and with a single command to bump any incomplete tasks left at the end of the day. This functionality was implemented as an addon to todo.sh, which is available on github.

Commands that are in the addon:

I also have the following in my setup, which are included as separate addon commands in the git repository:

One of the biggest downsides of this system is that it’s tied to the computer. Tom mentions in the book that your system should always be with you to be able to write something down as someone tells it to you in the hallway. While I agree that you should have something with you at all times, it doesn’t have to be the entire todo list system. Borrowing from GTD, I just keep a small notebook or stack of index cards to capture new items on, and review it regularly, adding items to the computerized list as I get back to my desk. The cycle already has a step where you collect new items from phone calls, emails and so on. And having a small notebook or stack of index cards and a pen handy ensures that I don’t lose track of anything… as long as I write it down.

I’ve been using this system for a few weeks now, and it’s working pretty well for me so far. If you’re interested, download the todo.txt cli scripts, and the tmsa todo.txt addon and give it a try!