Implementing Getting Things Done using Outlook 2007

Last week, I made the switch from Office 2003 to Office 2007 Beta 2.  Prior to the upgrade I was organizing my “stuff to do” using David Allen’s Getting Things Done (GTD) methodology and using the NetCentrics GTD Add In for Outlook.  Unfortunately, as I discovered after the upgrade was complete, the NetCentrics GTD Add In is not yet compatible with Outlook 2007.  They have plans to release an upgrade, but closer to RTM. 


My Requirements


Not wanting to revert back to Outlook 2003, yet still wanting to implement GTD style functions in Outlook, I wanted to see whether I could implement a system that takes advantage of some of the new features in Outlook 2007 (such as the improved categorization for items) without requiring any custom Add-Ins for Outlook.


To start, I drew up a list of ten requirements I needed for implementing GTD using Outlook:


1.       File Email.  I want to set a project (e.g. TechEd) for an Email and then file it to a searchable folder.

2.       Create Task from Email.  I want to set a project and action for an Email (e.g. TechEd, @Office) and then convert the Email to a task item.

3.       Filter Filed Email and Tasks.  I want to filter my filed emails and tasks, both on project and action as applicable.

4.       Create Waiting For Tasks.  I want to create a “Waiting For” task when I send or reply to an Email that delegates an action to someone else.

5.       Create Tasks from Any Machine.  I want a quick way of assigning new tasks from any machine, and ideally any Email account.  (For example, sending myself a task from my Pocket PC Phone when I’m on the road)

6.       Sync with PDA.  I want all my tasks to synchronize with my Pocket PC – and with the ability to filter on both project and action.

7.       Works with the Command Line.  I want to implement a system that also supports my command line add-in from an earlier post.

8.       Supports Keyboard Shortcuts.  I want to use keyboard shortcuts for everything above.  I need a rapid fire way of going through my Email box without using the mouse.

9.       Leverages New Features in Outlook 2007.  I’d like to leverage the new features of Outlook 2007 (e.g. the ToDo bar) if possible.

10.   No Add Ins.  I want to avoid a COM Add In, although rules and VBA macros are OK.




I spent a few days after the upgrade thinking about the above list and looking at the best ways of implementing this using Office 2007.  I checked out other add-ins (Omar turned me on to ClearContext – I actually really like this add-in, although the current version doesn’t have great support for exposing topics (projects) through tasks.  They use their own topic category system which was incompatible with #6 and #7.  I’m looking forward to the next version, which is supposed to fix this).


The Approach


Here’s my approach:


1.       First, I store tasks in Outlook 2007 as “tasks”.  I did contemplate keeping a folder of “tasks” using mail messages only – after all, 99% of my tasks seem to come from Email – but decided against it as I wanted the tasks to appear in the new Todo list in Outlook (Requirement #9), and creating a new mail and saving it to a folder is hard. 


2.       I use a single task folder.  I did consider separate task list folders for each action (@Home, @Office etc.), but this proved difficult to synchronize with my PDA.  (Requirement #6)


3.       I use categories in Outlook to define both the action and the project (e.g. @Office, Blog). 




All my tasks have two categories - both an action and a project.  All my filed Emails just have a project assigned to them.


4.       To turn an incoming Email into a task (something I have to do), I assign it two categories (action and project) and move it to my tasks folder.  Using Keyboard shortcuts, I discovered this can be done as follows (to create a task from the currently selected item, set the project category to TechEd and the action to @Office):


ALT-A, I, A, @ O F F I C E, [SPACE], @ T E C H E D, [SPACE], [ENTER]  (to categorize)

CTRL-SHIFT-V, T, ENTER (to move)


To file an item from my inbox – I select and:


ALT-A, I, A, @ T E C H E D, [SPACE], [ENTER]  (to categorize)

CTRL-SHIFT-V, F, ENTER (to move)    (this sends it to my “file” folder, which is the only one beginning with “f”)


I found this worked well, but after a couple of mishit keys, I couldn’t help thinking there was a more efficient way of doing this.  I blew the dust of an old VBA book and wrote a couple of Macros.  This one does exactly the same as above, excepts opens the categorize dialog  and moves the item automatically:


Sub Task()


    Dim item As MailItem

    Set item = Outlook.Application.ActiveExplorer.Selection.item(1)



    Dim myolApp As Outlook.Application

    Dim myNamespace As Outlook.NameSpace

    Dim myTasks As Outlook.folder

    Dim myFolder As Outlook.folder

    Set myolApp = CreateObject("Outlook.Application")

    Set myNamespace = myolApp.GetNamespace("MAPI")

    Set myTasks = myNamespace.GetDefaultFolder(olFolderTasks)


    item.Move myTasks


End Sub


Now all I need to do is assign this macro to a button on the tool bar (called GTD Ta&sks) and it’s:


ALT-S, @ O F F I C E, [SPACE], @ T E C H E D, [SPACE], [ENTER]


Same with filing an item to the task folder (a little trickier this time as we need to search for the folder):


Sub File()


    Dim item As MailItem

    Dim myolApp As Outlook.Application

    Dim myNamespace As Outlook.NameSpace

    Dim myInbox As Outlook.folder

    Dim rootFolder As Outlook.folder

    Dim subFolders As Outlook.Folders

    Dim subFolder As Outlook.folder

    Dim fileFolder As Outlook.folder

    Dim fileEntryID As String

    Dim fileFolderName As String


    'Set the folder name - must be at the same level as the inbox

    fileFolderName = "File"


    ' Pick the category

    Set item = Outlook.Application.ActiveExplorer.Selection.item(1)



    ' Move the the file folder

    Set myolApp = CreateObject("Outlook.Application")

    Set myNamespace = myolApp.GetNamespace("MAPI")

    Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox)

    Set rootFolder = myInbox.Parent

    Set subFolders = rootFolder.Folders


    Set subFolder = subFolders.GetFirst

    Do While Not subFolder Is Nothing

        If subFolder.Name = fileFolderName Then

            fileEntryID = subFolder.EntryID

            Set fileFolder = myNamespace.GetFolderFromID(fileEntryID)

            item.Move fileFolder


            Exit Do

        End If

        Set subFolder = subFolders.GetNext



End Sub


With a 2nd button called GTD F&ile I can do:




Much easier!


5.       After getting the categories and shortcuts out of the way, I started thinking about requirement #5 – to quickly create new tasks on the fly.  With the NetCentrics Add In, I was creating a new task (CTRL-K) and then assigning the project and action.  This is still possible, but in Beta 2 I couldn’t find any keyboard shortcut to bring up the categories – and I really wanted to create something that could work from my PDA also.


I wanted a system that would allow me to send an Email to myself with the associated project and action in the body of the Email. 



I then wanted Outlook 2007 to categorize accordingly and move it to the task folder.  To do this, I started creating rules in Outlook that would fire everything an incoming Email came in and I was the sender and on the TO line (i.e. I had sent it to myself).  I had one rule for each category – e.g. a rule that set the category to @office if the body of the Email contained Office etc.


One thing I quickly found however (unfortunately, after having entered about 50 rules), is that the total size of all rules cannot exceed 32k.  This is because Outlook sends all rules to the server using a single RPC call (the maximum size of the data in an RPC call is – you’ve guessed it – 32k).  Even though these were considered client side rules I found Outlook bombing out after I created over 30. 


To overcome this, I wrote a script in VBA that does the categorization for me.  This is really nice as it’s easy to add and remove categories.


Sub SetCategories(MyMail As MailItem)


    Dim body As String

    body = MyMail.body


    Dim action As String

    Dim project As String

    Dim categories As String




    If InStr(LCase(body), "@blog") > 0 Then

        action = "@Blog"

    End If


    ‘ etc…




    If InStr(LCase(body), "projectx") > 0 Then

        project = "ProjectX"

    End If


    ‘ etc…


    categories = action & ", " & project


    ' Save

    MyMail.categories = categories



End Sub


As you can see, the VBA function looks at the body of the incoming Email, checks whether it has any matching categories and sets the categories accordingly.


With this, all I need is one rule that runs the categorization script, and a second rule that moves the incoming mail to the task folder.  I call these GTD Categorize and GTD Move To Task.




One important point:  I was finding that my categorization script was failing for two reasons.  1.  The macro security has to be set accordingly and 2.  I had download headers and then full items enabled on my mailbox.  This was causing some synchronization errors (some of the time) and the categorization would fail (depending on whether the full item or the header was downloaded).  To resolve this, I set the option to download full items and everything worked perfectly.


6.       Creating a Waiting For task.  Now that I had the quick and dirty way of creating new tasks I wanted to enable creating a waiting for task on my delegated mail.  (Requirement #4)


To do this, I created a third rule called GTD Waiting For.  This rule checks Email as it arrives in my Email box to see if it was send from me and if I’m on the CC line.  If this is true, it sets the category of the Email to “@Waiting For” and moves the Email to my task folder.



Now, to set a waiting for action, all I need to do is to make sure I’m on the CC line of Email that I send (which I’ve seen a number of other GTDers do).


7.       Searching for stuff.  To search for stuff, I created a third macro that opens my “File” Folder (which is very similar to the “File” macro above – except it does a folder.Display instead of moving the item – I’ll spare you the VBA listing).


Once the folder is open I hit CTRL-E which moves my cursor to the top of the email list.  I think type and using Windows Desktop Search (WDS) 3.0 Beta, it provides a really quick way of searching my file folder.  This is probably my most favorite feature of Outlook 2007.



One note of caution however:  By installing WDS Beta, you’ll lose the UI of Windows Desktop Search (i.e. the search edit box on the task bar).  I was happily using this until the beta, so have moved to SlickRun until the UI re-appears.  (Actually, SlickRun provides me more options for shortcuts, so I may just keep it J).



Other GTD Habits with Outlook 2007


Well, that’s pretty much how I implemented GTD in Outlook 2007.  Other good habits I try to use:


1.       Decide when you are going to check your Email.  I check mine first thing in the morning, at lunchtime, and then do a “zero email” session in the evening (i.e. take my inbox down to no items). 


2.       If you do need to cursory glance at your inbox during the day (after all, things do come up that need your attention), I recommend creating an Outlook rule that sets the color of mail sent directly to you to a different color (e.g. blue) vs mail sent with you as a CC (e.g. green).  That way you can easily tell the important Emails and get back to your task list.


3.       Related to the other 2, I also recommend removing Mail from the Navigation pane.  This will prevent you “accidentally” clicking on your inbox to have a sneak check! 



To get to your inbox you can use CTRL-SHIFT-I, which will add enough cognitive friction that you’ll think twice before doing so.  I also recommend keeping TASKS as your top most pane, the default view as you open Outlook, and learning to love CTRL-4 (which takes you back to the tasks view at any time).




Well, I hope some of the above is useful – especially if you are looking to implement GTD using Outlook 2007.  I’m going to start work on creating a new version of my command line add-in to work with the new categories in this upgrade.  (I need to work out where the complete list of categories is being stored in Outlook 2007 – for previous versions it was in the registry, but this no longer seems to be the case).


In the meantime, I’d love to hear any more tips and tricks for implementing GTD functionality in Outlook!  Enjoy.

Comments (13)

  1. Wes says:

    In Outlook 2007 I believe all the categories are provided as a property on the Application object (i.e. myolApp.Categories)

  2. David says:

    "…where the complete list of categories is being stored in Outlook 2007"

    I think they are now a new property down from the ‘Namespace’ object?

  3. Cam Ens says:

    This is great.  I’m trying to use your macros… would there be a command you could add that would open the task after moving it from the inbox so I could edit the title, reminder day, etc.?

  4. Jason Kneen says:


    Thanks for this. Excellent stuff.

    Using your examples as a basis I’m developing a set of macros/forms that will simulate most of the GTD functionality. I’ve already got filing working, reading the actions, projects and subprojects from the settings XML file and then using a form selecting these before filing to a selected folder. I still have to make it read the archive folder from the settings file.

    It’s basic but it works for now. I’m working on tasks next and adding/updating the XML settings file.

    My aim here is to write something that uses the  GTD settings as much as possible so that once a 2007 GTD add-in appears everything will still work (hopefully).

    If I get the time I may write it as a 2007 add-in.


  5. Hirlpoo West says:

    Having spent the past few weeks assiting a customer on some Word Addin issues, I’ve come to like the…

  6. Simon.says has a great blog entry on Implementing Getting Things Done using Outlook 2007. If you are into GTD or want to be more efficient then you should really check this out.

Skip to main content