27 March 2009

How I've implemented GTD with Outlook 2007

I've been trying to follow the Getting Things Done principles since I read David Allen's book with the same name, and I think I have much better control over incoming email and active tasks now. One important GTD principle is to organize incoming correspondence into what you can process right away, what you need more time to work on, what you probably will need in an ongoing project and what you can file for later reference.

After following this principle for a while, my inbox now contains just a handful of items that I have flagged for action, and I also have had the pleasure of achieving zero email bounce a couple of times. Yes, that is a completely empty inbox :) By flagging everything that needs attention, I’m also very confident that nothing will be forgotten or overlooked. The To-Do Bar in Outlook 2007 gives me a very nice overview of all upcoming tasks, and the default calendar view displays the items that are due each day:
This view has another great advantage because it also includes what I have completed each day. (This image is not grabbed from my primary work laptop, and I’ve been working on additional stuff during the week :) )

This can be done in Outlook by flagging emails and organize items in folders outside the main inbox manually, but it can be a tedious task in itself. I have therefore written a couple of macros in plain old VBA, that I can invoke from the keyboard. The macros are organized in a custom GTD Toolbar, that looks like this:
GTD toolbar in Outlook 2007 

As you can see from the image, every function is accessible from the keyboard by pressing the Alt key and a number. By using these macros , I can flag items with various actions, move them to my reference or project folders or delete them if I’m sure they aren’t need anymore. I can drill down into the action menu and flag items with actions and categories that indicates I’m waiting for somebody else before I can proceed or items that I intend to read later. If the reference and project folders contain subfolders, I can also drill down into them and file the items exactly where I want. I’ve also implemented an undo feature, but remember that it only tracks what the macros do (with the except of the standard follow up functions on the action menu) and what you do manually in Outlook will interfere with this function.


This is what you have to do to try out these macros yourself in Outlook 2007:

  • Download the code in this zip file and extract the six files to a local folder:
  • Enable unsigned macros
    • Open “Trust Center” from the “Tools” menu
    • Select “Macro Security”
    • Select “Warnings for all macros”
      This is a potential security concern, and you can sign the macros yourself if you want. Then you can choose to only trust macros signed by your own certificate.
  • Import macros into Outlook
    • Open “Visual Basic Editor” from the “Tools->Macro” menu
    • Click “File –> Import file…” and import each of the six files in the zip-file
  • Enable GTD when Outlook starts (This is optional, because you can also initialize GTD from the toolbar manually when you need it.)
    • Still in “Visual Basic Editor”, double click on “ThisOutlookSession” in the project explorer
    • Paste inn the following code or edit your existing Application_Startup method if you already have one:
      Option Explicit

      Private Sub Application_Startup()
          Set gtd = New CGTD
      End Sub

    • Close “Visual Basic Editor”
  • Initialize GTD
    • Open the “Macros” window from the “Tools->Macros” menu
    • Select “Initialize” and click “Run”
    • The GTD toolbar is floating by default, but you can drag it everywhere you want

Customization and issues

You can customize the name of the root project and reference folders in the GTDConstants file, but if you have multiple Outlook data files the folder names have to be the same in each file. If GTD can’t find folders with the configured names the corresponding buttons will be disabled. You can also customize the categories that are used to tag items you like to read later or those you are waiting for, and the maximum number of items to keep in the undo stack (only meta information abut the items are stored in the stack). The undo stack is implemented as a ring, so when the stack is full, the new element will overwrite the bottom position and become the new top element.

If something goes wrong, you can usually press the Initialize button to recover from an error. You will loose the undo history, but everything else should work fine. There is one known exception though, and that is if you create a sub folder of your reference or project folders and they didn't previously have any subfolders. The reason for this is that the toolbar button has to be exchanged with an toolbar menu instead, and there is a bug in that code that I haven’t bothered tracking down. This is a rare problem, and it has a simple workaround:

  • Right click on the toolbar and select "Customize..."
  • Select the "Toolbars" tab
  • Select the "GTD" toolbar and click Delete
  • Follow the initialization steps above to recreate the whole toolbar from scratch


I’ve been using these macros for some time now without any problems, and I’m very confident in how I handle the emails I receive. This system also works for notes in OneNote, because you can assign an Outlook task to any text or page in OneNote. You can then track these tasks in the To-Do Bar like any other task or flagged email.

This isn’t a complete GTD solution though, because I still have flagged blog posts in FeedDemon and a list of web pages in the Firefox extension Read It Later. I’m not 100% sure it is smart to have everything in Outlook, but I want to check out News Gator Inbox and see if it can only synchronize the items I have flagged in FeedDemon.

Disclaimer: This code is released as-is without any warranty. If you have questions or comments you are welcome to post a comment on my blog.