Juggling projects with org-mode

productivity mumblings

It has taken me an embarrassingly long time to realise that I am bad at juggling multiple projects. And when I say ‘bad’, I mean, really bad. My natural mode of working is to focus intensely on a single project at a time. This is unfortunate, because academic life mostly consists of juggling a large number of different projects simultaneously. I love (almost) everything else about academia, and I’m generally good at my job (I think), but I struggle constantly when having to switch between projects. Last year, I read about Shawn Blanc’s 8-week work cycles and was jealous. His ‘monk mode’ sounds like heaven to me. I do what I can with the wiggle room I have to carve out blocks of focused time on particular projects, but I still needed some way to — if you’ll forgive me for extending the juggling metaphor — avoid dropping any balls in the process. Since I’ve been using Emac’s org-mode a lot recently, I decided to see if I could help me.

My problem is two-fold:

  1. Since my working style is to focus intensely on a single project, I get so involved in that project that I forget that I need to be moving my other projects along as well. This perpetuates a cycle of making great progress on one project, then suddenly realising that I need to do something else urgently for a deadline, switching to that project in a panic, and consequently neglecting the first (and all the other) projects. Rinse and repeat.
  2. When I do go back to a project, I completely forget where I was with it, what needed doing next, which problems I had already solved and how, and which I still needed to solve. Every switch in project needed my time and energy to build up the necessary focus again.

Although I use org-mode extensively, I don’t use it for tracking tasks or calendar events, as I already have software I prefer for that. However, those systems (Things and Fantastical at the moment) were evidently not making it easy for me to identify my active projects and see which needed some input at any one time, or to capture the work-in-progress state of the project. I eventually realised that I could still make selective use of org todo items together with org-agenda to help me to do this. For those who don’t know org-mode, org-agenda is a very flexible view in which you can show both dated events and todos, as well as other headings in a variety of org files, so that it serves as a central, filtered view of what is most important to you right now.

What I decided to do was a keep a work.org file in which I would have a headline for each project that I was currently juggling. Under that headline, I keep running notes and dated logs on what I have done, any links or information I need as part of the project, and note how I have solved problems, problems that I don’t yet know how to solve, decisions I have made, dead ends I have gone down and so on. If I have meetings, I add notes on those, which I enter as MEET keywords. I schedule those so that they appear in my org-agenda view, which reminds me to write notes during or after the meeting on what was discussed.

I also add a todo item with a NEXT keyword when I have to switch from the project I am currently on to another. In this todo item, I record (fairly obviously) what I need to do next to move the project on when I return to it. I also enter this in Things, but having it in my work.org file means that these items show up in the todo list in org-agenda, but more importantly, any projects without a NEXT item appear in the ‘stuck projects’ section. Here’s how I’ve got my custom agenda view set up:

  (setq org-agenda-custom-commands
        '(("c" "Simple agenda view"
           ((agenda "")
            (todo "TODO"
                  ((org-agenda-overriding-header "Refile:")
                   (org-agenda-files '("~/org/refile.org"))))
            (todo "MEET"
                  ((org-agenda-overriding-header "Upcoming meetings:")))
            (tags "+project-meeting"
                  ((org-agenda-overriding-header "Current work projects:")
                   (org-tags-match-list-sublevels nil)))
            (stuck ""
                   ((org-agenda-overriding-header "Stuck work projects:")
                    (org-tags-list-sublevels nil)
                    (org-agenda-files '("~/org/work.org"))))
            (alltodo ""
                     ((org-agenda-overriding-header "All other todos:"))))))))

The active project headings get a project tag, and meetings get a meeting tag (which is a bit redundant, but that doesn’t matter). I use org-capture templates to add meetings and next items quickly, and the ‘Refile’ section means that I can just dump these in my refile.org file, safe in the knowledge that they will show up in this section and remind me that I need to move them to the correct project in work.org. Refiling in org-agenda is very easy, as you just hit r and choose the destination file and headline.

I’ve used this system for about a month now, and it seems to be helping me to keep on top of my projects. The notes help me to get back up to speed quickly after I have switched, and stop me going down the same dead end twice (which happened an embarrassing number of times before). The ‘stuck projects’ section helps me keep on top of making bits of progress with each of my projects, by figuring out what I need to do next.

I would still love to work in monk mode, but this is making project-juggling bearable for me.