This post describes the way in which I’ve set up org-mode to track my work and life in general. It’s broken down into a couple of “sections” and I’ve linked to the relevant parts of my config on my github account. I’ve tried to be a little verbose to explain how things work so that you can try this out if you’re inclined. If you hit any snags, mail me and I’ll try to help you out.
All this is stuff that I use on a daily basis. I’m not as organised as I like to be but I mostly practice what I’m about to preach in this post. This covers only the PIM part of my setup. I also use org for some authoring which I haven’t discussed here.
Also, my emacs configuration files are in need of cleanup. They’re functional as far as config files go thinking of them as “programs” makes me retch.
History
I’ve messed with quite a few ways of keeping myself “organised”. I took a course on the Franklin Covey system and for a while, kept my weekly and monthly sheets up to date. I tried a bunch of programs that helped me track time, keep notes and organise myself in general. None of them really worked and in retrospect, there were a few reasons
- They were hard to “Get back into” - Everyone makes mistakes and stumbles when trying out a new system. If it’s hard to reset and get back into the flow when you mess up, the inertia is hard to beat and you end up ditching the system altogether.
- They were hard to tie up into other spheres of my life - Like most people, I get todo items, information etc. from various source (e.g. email, phone calls, personal conversations etc.). While your system needn’t be omniscient enough to track it all in a single place, it should be powerful enough to do most of what you need so that your mental strain is reduced. A smaller variant of this problem is the inability of most software systems to integrate with the rest of your work.
- I’m lazy, disorganised and a disgrace to humanity - No point denying this. But once I realised and accepted it, it’s given me a set of constraints to work under.
I tried GTD but the “process” doesn’t work for me (although I will admit however that it was better than the Franklin Covey strategies). It did however solidify my ideas of what I wanted out of a task tracking system. I’ll try to summarise below
- One place for to look for things. I don’t want to have to wade through sheets of paper and jump through programs just to figure out what I have to do. Did I pay this months rent? Have I paid my utility bills? What work do I have to do today? What was that website with the colour pickers that I used last week? All should be in a single place.
- Should be quick. If someone tells me something that’s I have to work on (later or immediately), I need a way of grabbing it immediately before my attention deficit addled brain discards it. If software, I want the kind of thing where I can develop muscle memory and forget about the mechanics of doing things. I especially value this given my email reading experiences with mutt which is still in my opinion the fastest way to read and reply to emails.
- Should never get lost. I don’t want to end up doing the “Did you ask me to do that? Damn. I was sure that I had starred that email” dance.
- Should be “fun”. Being a tinkerer, I like stuff that’s fun to do and with a few knobs and wheels. If they’re missing, I’ll probably get bored and give up.
- Flexible. If I want to, from tomorrow say, start tracking habits, my system should be flexible enough to accommodate that.
So I flirted with the idea of writing some command line scripts to do this kind of thing and found todo.txt which “worked” but didn’t really cut it for me.
My suite of “productivity tools” consisted of something called “gtimer” (I think) which was a simply app to keep track of time spent on projects, EmacsWiki (the precursor to Emacs muse) and TomBoy to keep notes (thereby violating the one place only rule), a notebook and pen to track todo items and a couple of ad hoc thing like starred emails etc. to keep track of “projects”. No, it didn’t work. Yes, I wanted something better.
I had used the Emacs outline mode and hated it but then came across Carsten Dominiks excellent Google tech talk on org mode. I tried it and it was love at first sight. Never looked back since.
Now, let’s get onto the meat of the matter.
Current setup
My org mode files are stored in a git repository that I keep on my private account. I don’t put it up on github since it contains a lot of personal information and I don’t want anyone to clone it and send me a pull request.
The layout of the files is as follows
.
|-- non-org
| |-- bank-statements
| `-- invoices
|
|-- official
|
|-- pycon
| |-- 2009
| |-- 2010
| | |-- IPSS
| | |-- logos
| | |-- presentations
| | `-- pycon docs
| `-- 2011
|-- specs
|-- training
| |-- business
| |-- materials
| `-- outlines
|
|-- donotdo.org
|-- habits.org
|-- ideas.org
|-- projects.org
|-- projects.org_archive
|-- reference.org
|-- refile.org
|-- scratch.org
`-- toread.org
There are a few parts that are not heavily accessed or modified and they have accumulated cruft.
The non-org
directory contains stuff like exported PDFs, .odt
files and stuff which contain invoices etc. Mostly binaries. The
official
directory contains agreements and other formal
materials. It should probably be a sub directory of the non-org
one. pycon
is a top level directory mainly because it was one of my
“big” projects and I was experimenting with org-mode features. specs
contain org-mode files which are outlines of projects I’m thinking
about. It serves as my notebook and doesn’t have anything in that I
track. A digital pocketbook of sorts. training
contains all the
stuff that I use while taking and planning trainings. Course materials
(e.g. this was written as an
org file), outlines which businesses want, different versions of my
training profile etc. donotdo.org
is a file that contains a list of
harsh lessons that I’ve learnt over time. It might seem silly to put
them in a text file and forget them but I find the act of writing it
down useful. habits.org
is a file I’m trying to use to track a few
habits I’m working on. It’s not yet “production” ready so you can
ignore it. ideas.org
is a bucket where I dump semi-detailed ideas
which occur to me. Sort of a cold freezer to search for things to do
when I have time. Not necessarily computer related. projects.org
is
my main file around which my life revolves. Most of this article
will be discussing that. There’s an _archive
version of the same
file which I use to keep older subtrees. reference.org
contains
phone numbers, links, addresses, things which I would forget if I
didn’t write them down. refile.org
is my default capture target
(I’ll discuss this later). scratch.org
is a sandbox file I use to
pimp features to people when I’m in front of them and for writing out
small things which I can export to different formats. toread.org
is
a file that stores URLs, names of books, links to videos, movies
etc. which I plan to look at. It should really become a section in
projects but like I said, the layout needs work.
The first thing I’ll discuss is the refile.org
file which is where
all tasks land up before they are moved off into the right places. The
process of putting them there is something worth mentioning and it
addresses point 2 in my list of requirements.
Data sources
Things come into my life via. email, real life (phone + meeting people), the web and while coding (Ah! I should do this, fix this later). This might seem like an oversimplification but it works.
The intention here is to capture things that come in via. these channels into our PIM. Once that’s done, it becomes a regular “item” that can be managed using our regular workflow. The capturing process has to be quick and non-intrusive.
Capturing
Org has a somewhat new system for “capturing” things into org-files. The idea here is to get things into your system quickly rather than think about where to file stuff.
The idea is quite simple. You define a bunch of templates and then globally assign a key which you can hit anywhere to “capture” something.
Let’s take email as an example. Suppose I get an email that asks me to
“do something”, I hit C-c r
and my org-capture buffer pops up
This allows me to capture the email using any of these templates. If
(for example), it’s not a TODO but just something I need to keep track
of (e.g. a phone number or an address), I’d hit r
. It would allow me
to fill some stuff extra information in, annotate it with a link back
to the email and add an entry to my reference.org
file. Now, it’s
safe.
If it was an email asking me to do something (e.g. fix this bug), I’d
hit t
and it would open a buffer asking for information. Usually, at
this time, if I can quickly think of when I want to get to that, I
schedule it using C-c C-s
and put a date in there so that I don’t
have to worry about that later. This would get dropped into
refile.org
.
If I’m working on the openlibrary code base and see a little bit of
code that I need to fix but don’t want to interrupt my current flow,
hit C-c r
and capture it using o
. It captures it as a TODO and
drops it into refile.org
. This works as a trackable /*TBD*/
in
your code. I keep this separate from the regular TODO because it’s
work related and large enough to be treated separately.
The j
is used when I want to write a diary entry. I’m probably going
to get rid of this since I can’t really track or mine journal entries
and it’s more fun writing them on paper anyway.
So, at the end of the day, the refile.org
file might look something
like this
* TODO Fix default assigneed for support cases SCHEDULED: <2011-07-19 Tue> Email from George Oates: Fwd: Re: Default assignee * TODO This task needs more logging SCHEDULED: <2011-07-19 Tue> [2011-07-17 Sun 14:33] file:~/github/nibrahim/openlibrary/openlibrary/tasks.py::@oltask
For real life things which occur while I’m at the computer (e.g. phone calls etc.), I just fire a capture and record it as a TODO. For things that happen while I’m away from my computer, I use a stack of paper pieces I carry with me where ever I go and write down what I need to do. One task per piece of paper. I have a little ritual of putting these tasks into my system every night before I hit the sack which I’ll come to later.
At the end of this process, everything is either in the refile.org
file or the references.org
file. i.e. within my control. The next
thing to manage them properly.
Refiling
At the end of every day, before I crash, I have a little refiling
ritual. The bottom line is to empty the refile.org
file. If this
file has entries in it that are more than a day old, you know I’ve
been procrastinating.
org-refile
is bound to C-c C-w
by default and can be configured to
present you with a list of possible trees into which you want to move
an entry. My projects.org
file used to be a directory of multiple
files each dedicated to a different area of my life
(e.g. personal.org
, work.org
etc.) but I moved them all into a
single file under different headings.
You can see my refile configuration here. It uses ido
to make the
refiling process smoother and more “Emacs like”. Here’s what a
refiling looks like
It’s asking me where I want to move this item to and offering me the
four headings in my projects.org
file. I select one and it gets
“refiled”.
Scheduling and agendas
Org-mode has an extremely powerful scheduling and agenda system. The basic idea is that you schedule your tasks for a specific day and/or set deadlines for them and then ask org mode to generate a view that prints out what you should be doing today, this week, this month or this year. The scheduling system is flexible enough to handle repeating tasks (e.g. pay rent on 10th of each month), effort estimates, clocking etc.
I personally use just the basic scheduling capability.
So, when I refile, I try to schedule stuff for certain dates. There are some tasks which need to be done “at some time” for which I randomly schedule them a few weeks from now and forget about them till they pop up on the agenda again. Some things are already scheduled while capturing so that’s cool. Some, I know when I will have time to do them so I schedule them appropriately. In any case, the process of refiling makes sure that scheduling is done. The dates needn’t be accurate but tasks should have some date when you’ll look at them.
Once that’s done, C-a a
lists out my agenda for the current week
(focussing on the current day) and I can get to work. Here’s a sample
of my agenda from last month (the capture templates were different
back then so it’s slightly different from what you’d see currently).
Monday 20 June 2011 W25 Tuesday 21 June 2011 Wednesday 22 June 2011 projects: Scheduled: DONE Email from George Oates: Support System - bugs/tweaks l [5/5] :tbd: projects: Scheduled: DONE Email from George Oates: Re: Email setup :tbd: projects: Scheduled: DONE Implement email system for support [5/5] projects: Deadline: DONE Implement email system for support [5/5] Thursday 23 June 2011 Friday 24 June 2011 projects: Scheduled: DONE Email from Anand Chitipothu: Account validation glitches :tbd: projects: Scheduled: DONE Fix account validation problems projects: Scheduled: DONE Mail Vikas about Org-mode information he wanted projects: Deadline: DONE Email from George Oates: Support System - bugs/tweaks l [5/5] :tbd: projects: Deadline: DONE Email from George Oates: Re: Email setup :tbd: projects: Deadline: DONE Vitalise Reassign/close case in support system projects: Deadline: DONE Change =/task= to =tasks= Saturday 25 June 2011 projects: Scheduled: DONE Integrate habits with capture Sunday 26 June 2011
Now, you just pick out things to do, do them and hit C-c t
to mark
them as done so that they move off your agenda.
Things I don’t do
- I’m not a clocking junkie who has to know exactly how much time I spend on tasks. I tried using arbtt to do that for a while and it works very well but I don’t really need or use it.
- Custom agenda views. The default view looks fine to me. I haven’t really felt the need to change it yet.
Things to do
Other things which I want to include in my system are
- Capturing directly from my browser using
org-protocol
and maybe a custome extension. Bookmark and schedule for reading rather than dive into that hacker news article in the middle of work. - Some tiny xmonad customisations to capture while outside Emacs. A popup Emacs capture buffer using emacsclient to take something down and close it.
- Integrate skype chats with Emacs using bitlbee and erc so that I can “capture” skype conversations for reference or as tasks.
- Try some effort estimation to practice my estimation skills.
Summary
So, the bottom line is that you simply capture stuff from various parts of your life into org, refile them appropriately once a day, schedule them and get them done. No more missing tasks or items.
I welcome your comments and suggestions. My Config files are on github and you’re more than welcome to cannibalise them.
If there’s sufficient interest in a formal Emacs lisp tutorial, I can take a conventional class sometime later this year in Bangalore. Let me know.
At PyCon 2011
I’ve submitted a talk for PyCon India 2011 which will discuss my Python development settings for Emacs. It will discuss mostly programming tools but I do plan to spend a little time discussing tracking stuff with org etc. so if you’re interested, you should sign up.
blog comments powered by Disqus