Implementing GTD with vim, remind, and grep


The initial segment on my adventures with setting up Getting Things Done. I have big plans for this as it is a gold mine for integration of a number of unix tools into a personal information system that is starting to work for me.

I have been working on my personalized version of the Getting Things Done (GTD) system. After a couple false starts I think something is starting to work for me. Interestingly, this all started from listening to the GTD book on my iPod. That got me going, but trying to implement the system from my memory (or manually searching on the pod - which meant basically relying on my memory) translated into a pretty poor implementation. So I bought the book, reread it and have it handy to redo my implementation. I've also been drawing on insights from the excellent 43 folders. The result of all this is that I'm now hooked on using GTD as I'm clearly getting a number of benefits from it. Here I describe how I currently have things set up. This is a moving target so I hope to continue to track the evolution of this system on this blog.

You can parse my system either from a tools perspective or a functional perspective.

TOOLS
At the highest level my system can be decomposed into two sets of tools: digital and paper

Digital Components
I work at three different locations (office, home office, out and about) so for the digital component of this system it is necessary to mirror my setup on all the machines (desktops, laptops, portables) that I work on. This goal has meant relying on tools that are cross-platform. Not a problem given the richness of open source tools out there.

Currently my GTD system relies on the following tools: vim, vim outliner, grep and remind. All my lists are saved as flat text files in Vim which has a number of benefits:

  • easily searchable (with grep)
  • simple mirroring and backups
  • vim keymappings are burned into my synapses

To edit my lists within Vim I make heavy use of the The Vim Oultiner (TVO). Lends itself nicely to making subprojects in the projects list.

My calendar used to reside on iCal, but this turned out to have a couple of contstraints. First, I'm a heavy user of desktops on Mac Os X and use Desktop Manager for these purposes. I would have iCal up and running on one desktop which mean when I needed to look something up (say while responding in an email to someone about scheduling a meeting) I would have to switch desktops to peek at my calendar. Workable, but not all that efficient. Since I also make heavy use of the Terminal, as well as iTerm, I thought I'd give remind another look as I had used it on Linux boxes and found it very flexible, stable, and hackable. So after a few days of playing with remind, I've dumped iCal and now have all my calendar appointments in remind. This means my calendar is always accessible in a terminal on whatever desktop I'm currently on.

Adding things to my calendar is also a simple alias to use cat to dump stuff in. For example:

alias ap='cat >>~/.reminders'

is in my .bashrc file, so that when I need to enter a new appointment into my calendar it is as simple as:

serge@tibook:~$ ap
REM Dec 29 2004 AT 12:00 MSG Grades due.

A Control-D after entering that line then appends the appointment to my .reminders file. That is the file that is parsed by remind to render my calendar.

Paper Components
The GTD system makes heavy use of (paper) folders, and I find that despite some initial resistance on my part to this, once I started following this I came to really like this. So I use the 43 folders (actually 86 as I have the same setup at both home and work), 31 being numbered 1-31 and twelve being labeled for each of the months. These constitute the tickler system and I find this to be very handy as items that I need to be reminded of down the road (i.e., trips, tickets, hotel reservations) all can get dumped in either the folder for that date (if it is upcoming in the current month) or the folder for the month it is associated with. This has been a blessing for me as I use to continually forget what pile/drawer/folder/desktop/you-name-it I had put stuff in.

The other class of folders are for reference. Here again, I had some initial reservations about going to a simple A-Z organization of my reference folders as I was hesitant to mess with my existing paper filing system which functioned as follows:

  1. make up a name for the file label
  2. dump stuff in the file
  3. file it in a drawer
  4. forget what drawer I put the file in
  5. forget about the file
  6. wonder why I had so many bloody files and filing cabinets
  7. dread the thought of cleaning this up

As you can gather, my existing system excelled at the collection phase of things but was a train wreck when it came to retrieval. So I bit the bullet and spent an entire day pulling all my old folders out onto my office floor and ruthlessly going through them to either dump stuff that I no longer needed or to file it according to a simple A-Z system. I probably dumped about 50% of the stuff I had been accumulating over the years and I found that there were a lot of instances where I had multiple copies of the same item in different folders. The "purge" took about 2 days but has been well worth it. I know where things are now.

In addition to the new A-Z system I also picked up a labeler to type out the file labels. At first I thought this was overkill and a symptom of the geek gene kicking in (hey a new toy) but have found that my handwriting can an adventure to parse at times and these labels are much easier on the eyes.

FUNCTIONAL PERSPECTIVE
The tools part is what I think attracts the typical geek to the GTD system. Speaking for myself, setting this up provides an excellent chance to endlessly tweak and play with toys, hence the attraction. Truth be told, however, the system really only works if you actively engage with it from a behavioral perspective. That is you have to make it part of your daily routine to reap the benefits. That brings us to how I've changed my routine to get the functional aspects of GTD going.

On a daily basis I do the following:
  1. Overview of my calendar for the day
  2. Dumping the tickler file for the day into my in box
  3. Processing my in box

These three steps are a safety net to ensure that I'm capturing items into my system - the goal being that once I capture it I should no longer have to have that little voice in my head chirping up annoying reminders about stuff I need to do. Quieting that voice has been one of the biggest benefits for me.

In addition to the daily routine, I also schedule a 2-hour weekly review. The purpose of this is to review the projects list to see what the status of things are across all my commitments. This serves to address the horizontal integration of the system.

FUTURE PLANS
I have some pretty loose ideas about how to extend this, and there are some pieces I've not covered here. More to come in future entries.

Posted: Sat - December 11, 2004 at 09:03 AM          


©