GTD with VDP

I’m writing this down as much to reinforce the process that I (sometimes) follow as much as to (hopefully) provide some benefit to others out there. This post kind of assumes you know something about GTD.

I first read David Allen’s “Getting Things Done” in the summer of 2006 and found that it was a decent approach to organizing the variety of disparate tasks that come up in day to day life, as well as the things that I’m supposed to be attending to at work. So I set about trying to incorporate some of the principles from that system into my life. This went well for a while and I either was more productive and organized, or I had the feeling that I was anyway, which is almost as good. As time went on I followed the GTD method less and less and as a result chaos began to take root again. The trouble is that once this starts to happen it’s easy to become overwhelmed with the mess and continue sweeping stuff under the rug rather than tidy things back up.

Recently I came across Things which is made by Cultured Code and though the screen shots look very nice, it is still at the alpha stage of development so I’ve no idea how well it works. This did get me thinking again about getting myself organized and staying that way this time. Before I went back to my old system, I looked at some of the other GTD apps such as OmniFocus and iGTD. While these are all fine apps, they just weren’t quite flexible enough for me.

When I originally began considering GTD, I realized that I needed an application to organize all the notes, images, pdfs, and whatever else might by relevant to a particular project. Flying Meat’s VoodooPad fits the bill perfectly. As it says, “You put your brain in it”. Next I needed to come up with an organization structure I could apply to VoodooPad, email, disk drive, del.icio.us, etc.

GTD, as I recall, organizes items into contexts. That is, where a task might be accomplished. This doesn’t really suit me as most of my tasks revolve around my computer which I am usually at. I decided to organized my tasks into categories. In addition I wanted these categories to exist in both a hierarchal structure and tagged structure. Mail (email), and subversion repositories are hierarchal, while gmail, del.icio.us, are tagged. The Finder (primarily hierarchal) and VoodooPad (primarily flat) are a bit of both. So the first thing I did was start a new VoodooPad document and create a map on the starting page defining the hierarchy and a key for each to uniquely identify a category in a flat organization. A sample:

  • index
    • gtd: gtd
      • inbox: gtd:in_bucket
      • actions: gtd:action_list
      • snapshot: gtd:snapshot
    • personal: personal
      • household: household
      • recreation: recreation
      • relationships: relationships
    • professional : professional
      • development: development
        • projects: dev_projects
          • griffin: dev_griffin
            • proxi: dev_proxi
    • .
    • .
    • .

You get the idea. After I figured out my organization, I applied it to my email, my disk organization, everything. Everything on my Desktop and everything in my Inbox was filed away accordingly.

From this directory in VoodooPad, I created new pages for each category or project as needed. To do this, I select the keyword and then Link from the Edit menu. So everything created in VDP is liked to from the main page. In each page, I designate sections using the following tags: {in}, {next}, {waiting}, {someday}. Each section is delimited with an {end} tag. More on that later. Also, each page contains a header describing its location within the hierarchy and the date on which it was created. To make this a little easier, I set up VDP’s NewPageTemplate so the creation of each new page fills in most of this information for me when I create a new page. My template looks something like this:

index > … > $title
created: $date$

Description
Summarize category description or follow index:process for projects, etc

{in}
{end}

{next}
{end}

{waiting}
{end}

{someday}
{end}

reminder: be sure to assign category and meta data if applicable

I organize tasks according to one of a few states. In, Next, Waiting, and Someday. As I mentioned earlier, each VoodooPad page can contain sections for each of these states. Now, without the ability to extend VDP through scripting, this wouldn’t be all that useful. Since VDP can be extended with Lua (or Python, Perl, or Ruby) I can run a script which looks at each page and the various tags to build an In Bucket page, or a list of Actions, or a snapshot of my projects. My scripts are available here, but I must warn you, this was all sort of put together on the fly, learning Lua as I went and tailoring the scripts to my particular tastes. Still they may be useful. Maybe I’ll clean them up someday and make them fit for human consumption. If you’re brave, install them at ~/Library/Application Support/VoodooPad/Script Plugins/

Each morning, or whenever I feel like it, I run my Build In Bucket script. This script scans all my pages and takes any information between {in} and {end}, removes it, and copies it into my in bucket page. The location of the project within my hierarchy, which I ensure is the first line of each page, is used to identify which projects these items apply to. Of course most of my “In” items are found on the index page, which is were I typically scribble things down that pop into my head. Next I go through each of these items and, if they can taken care of quickly, I do them. Otherwise, I determine the next action and make an entry in the {next} section of the appropriate category or project page.

After I’ve taken care of my in bucket, I run my Build Actions script. This looks through all my VDP pages looking for items in {next}, {waiting}, and {someday}. It takes all of these items and creates an Action List page divided into section for each and list each of these items under a header describing its location within the hierarchy. I usually read over each item making notes or updating information as needed, then I select from the most appropriate item from my next actions and work on that item. The output of my script looks like this, except with many more tasks and very few that just say “stuff”:

index > gtd:action_list
created: 2007-12-10 17:36:22 -0600

>>> NEXT ACTIONS <<<


index > personal > lifestyle > internet > sgntn

• stuff

index > professional > development > dev_projects > dev_griffin > dev_proxi

• stuff

index > personal > relationships
• stuff

index > professional > development > projects > dev_griffin

• stuff
• stuff

index > personal > recreation > genealogy
• stuff

>>> WAITING <<<

index > professional > development > dev_projects > dev_griffin > dev_powermate

• stuff

>>> SOMEDAY / MAYBE <<<
index > personal > lifestyle > career
• stuff

index > professional > development > dev_projects > dev_griffin > dev_proxi

• stuff

index > personal > relationships
• stuff

Though not strictly a GTD principle, once a week or so, I run my Build Snapshot script. This script looks at all of my active projects at work and creates a page with highlights for them all. I use a {snapshot} tag to designate information to be shown in this report. I also use VDP’s support for Meta Keys to add a status key for each project describing its state. A handy reference to take to meetings and such.

The only thing I’m missing is a tickler. That is a mechanism to periodically, or on a given day, remind me about certain tasks. So far this hasn’t been something I’ve particularly needed. iCal is fine for reminded me of meetings, birthdays, or what have you.

So that is my sort of high level approach to GTD. Perhaps someone will find this instructive and adopt it as their own, or adopt some of the ideas for your own approach. One of the appeals of the GTD philosophy is that it is flexible enough to mold into a style that suits your needs or personality.