The ‘One Big Text File’ meme went around the internet a few years ago. The idea is you record all your notes, ideas, contacts and diary entries in one mammoth text file. The virtue is simplicity, but there are many drawbacks. In this article I show how to avoid those drawbacks by running your entire life out of ‘One Big Text Directory’.
One Big Text File
In 2005 there was a spate of blog posts discussing how to organize your personal data in a single text file, called the One Big Text File (OBTF). Some things that people have discussed storing in this file are to-do lists, notes, ideas, blog posts in progress, addresses, lists of books to be read, shopping lists, records of phone conversations and and web links.
The idea really is to store all of this information in a single text file. The 43 Folders Wiki does a good job of describing the advantages which include:
- everything is in one place,
- it is easily synchronized between computers,
- it can be used in any text editor,
- the format will never be obsolete.
The drawbacks can be major however:
- must be synchronized religiously,
- the file can get VERY large,
- can be hard to find stuff in a large file, even with search,
- ideas can get lost among all the other items.
Other people have tried keeping their stuff in a set of text files, solving two of the drawbacks given above. But they report that this makes synchronization even more of a pain than before.
- add version control
- move to a directory structure.
This solves all the problems of synchronization and backups in one go. You can keep as many files as you like with no problems and there is a complete history of your files which is essential if you are a packrat like me.
I have a copy of this repo on four machines: my server at Slicehost, my work machine, my home desktop and my laptop. I don’t have to worry about merging because git takes care of it almost automatically.
The Organizer Structure
Once the version control repositories were set up, the directory has to be laid out into a structure that contains everything you would put in a personal organizer.
And I do mean everything. I don’t want to have any residual paper organizers or use any form of software where I cannot conveniently archive my data. This really does have to be a monolithic, complete system.
Note that I do keep one of those achingly hip moleskine notebooks in my pocket for when I am not near a computer. This is the only paper organizer I have and everything in it gets transcribed into this organizer as soon as I have a chance.
At first I used a flat directory, but that quickly became too restrictive so I added sub-directories. I’m a GTD acolyte so the directory is laid out according to GTD principles.
Here is a map of the directory tree:
life/ . inbox . stacks/ . next . calendar . projects . someday . logs/ . 80 . 30daytrials . calendar . completed-projects . projects/ . redcar . says-who . ... . db/ . BashTips . PeopleBook . LemmingsCodes . Recipes . ... . checklists/ . daily . weekly . tools/ . aliases.sh
inbox file is my GTD inbox. It has no organization or
formatting. I just copy and paste random stuff in there whenever I
come across it and sort it out later during processing.
stacks directory is for lists that stay roughly constant in size. My
next action list, for instance, expands and shrinks but does not tend to
infinity in length.
next file is my ‘Next Action’ list and at the moment looks
something like this:
______Next Actions Get _why's sandbox working. [Wri] Finish text of Plain Text Organizer Email guys in Leicester about a visit. (out) get photo taken for passport Pay in cheque (home) Learn how to work radiators. ___done Try out the example GtkWebkit app. Try out Phusion's Passenger Sort 15 MORE items of mail.
In GTD fashion, there are separate lists for each context (out, home) and the default list at the top is ‘at a computer’. The three letter codes in square brackets indicate the project that the next action is associated with.
I move the items to below ‘done’ when they are completed. I don’t simply delete them because there’s a psychological benefit to being able to see the tasks you have completed. (The ability to cross out tasks is one of the few things I miss from paper to-do lists.)
calendar file contains my calendar in the following format:
_______Calendar April 01/04/08 Tue | Songkick. 02/04/08 Wed | 03/04/08 Thu | Songkick. 04/04/08 Fri | 05/04/08 Sat | Oxford: Wizard of Oz 06/04/08 Sun | 07/04/08 Mon | 08/04/08 Tue | Songkick. 09/04/08 Wed | 10/04/08 Thu | 11/04/08 Fri | 12/04/08 Sat | Ungraduation party. 13/04/08 Sun | 14/04/08 Mon | Start at Songkick. LRUG: talk about Rak for 5 minutes. Put out bookcases and microwave in the evening. 15/04/08 Tue | Meet dad in town for dinner 16/04/08 Wed | 17/04/08 Thu | 18/04/08 Fri | London startup meeting 19/04/08 Sat | 20/04/08 Sun | M at hen do, M at rehearsal 21/04/08 Mon | Bring in drivers license and birth certificate 22/04/08 Tue | 23/04/08 Wed | 24/04/08 Thu | 25/04/08 Fri | 26/04/08 Sat | 27/04/08 Sun | 28/04/08 Mon | 29/04/08 Tue | 30/04/08 Wed | 10am go and see I May 02/05/08 Fri | Z birthday 03/05/08 Sat | Horsham? 23/05/08 Fri | Mr. M bday 24/05/08 Sat | H's Wedding! 25/05/08 Sun | m away 28/05/08 Wed | my birthday!
For the current month every day has a line for easy visual review, and for months in the future only days with events on are visible. I have event lines that are later than one year in the future, and there is no reason I couldn’t put a note in reminding myself to do something five years from now. Try that with a paper calendar!
projects file contains a list of all my current open projects. At the
moment it looks something like this:
______Open Projects . MySpace application projects/songkick/myspace . Redcar projects/redcar . Diet . Writing Project projects/writing ___backburner . Says Who? projects/says-who . Cross-Stitch . Mastering Algorithms With C projects/algorithms-with-c . Bengali . come up with plan . Exercise . 30 day trial
I have a natural tendency to move in cycles of interest. For a while I will be super jazzed by a project, and then I will lose interest for awhile, before returning to it again a few weeks later. I’ve learned not to fight against this but to work with it. That’s why I have a ‘backburner’ project list. These are open projects that I am not actively working on at the moment. They all still have next actions defined, but it’s ok if I don’t work on them right away.
someday file is the standard someday/maybe list from GTD. Here are some
____Someday/maybe . Grapps . YamlEditor . Ruby IRC logs . Learn C# . FuzzyClock . History of Political Parties Poster . Lolrus . Pyrus . Learn to do pixel art
logs directory is for lists that grow unboundedly in size such
as my diary, my expired calendar months and my list of completed
80 contains my 80 character diary. I’m always bad at sticking
to writing in my diary, and I got the idea for this after reading
Gretchen Rubin talk about her One-Sentence
idea was to just write a single sentence, every day. Who couldn’t
stick to that?
I copied that idea and added a twist of geek to come up with the ‘80 character diary’. A slightly edited version of the top of the diary looks like this:
| The 80 char diary | 80419s |First week done! Nice weekend at home now. | 80418f |Machines arrive, but can't get Ubuntu working. Hacker meetup, second time round!| 80417t |More wrestling with MySpace. | 80416w |Third day at SK. Wrestling with bastard MySpace OAuth, got it working. | 80415t |Second day at SK. Stayed for dinner. | 80414m |First day at SK! Went to LRUG to give talk, didn't go so well. | 80413s |Cleaning up. Work on rbwebkitgtk. Have now got it working pretty well. | 80412s |Family round for party. Made vat of chili. Everyone sang "Happy Ungraduation"! | 80411f |Last day at Imperial. Sad, happy! Drank fizz at lunch. Bye all. | 80410t |Stayed home. |
At the moment there are only 225 lines in
80 because I have been only
been writing it since August. It’s an odd type of diary because
ultimately each year of my life will occupy just 6 pages when printed out.
30daytrials file contains my Steve
list of 30 day trials I have in progress and completed. This looks
something like this:
_______30 Day Trials __No Internet crack until 9pm. Sunday 10th February - Sunday 16th March [ .x..... ....... ...xxxx .x..... ..TWTFS S]
. is a successful day and an
x is a day where I missed my
calendar is an archive of my expired calendar pages and I update
completed-projects for morale.
Other logs I keep or have kept at times are:
timesheet for time
fitness for my exercise plan,
calories for when I am on
the hacker diet and so on.
Each file in this directory contains my notes about a project. A
project must be fairly involved to get in here, otherwise I just keep
a small set of notes in
The files have a rough formatting style, but I let them vary. Each one contains a what, why, when, how section that helps me work out why I am doing the project. They may also contain plan, todo, ideas and log sections if warranted. My Phd project had all of these (when I was still studying).
db directory is my Wiki. Each entry has its own file, named in
CamelCase. I’ve got my address book, phone numbers, web links, wish
lists, favourite quotes, software tips, recipes and more in here.
At the moment there is no tool for automatically linking between files, but I expect one day (as it becomes larger) to write a small server for attractively displaying the files as HTML. I am trying to use Markdown for all my entries in here in preparation for that.
The Checklists and Tools Directories
checklists directory contains a couple of checklists for
different situations. The
daily checklist is my scaffold for daily
weekly checklist reminds me to create next actions for
all my projects and review the week ahead and so on.
tools directory contains any tools relevant to working in this
repository. For instance there is a script for setting up aliases that
make searching my address book easy.
There are a couple of drawbacks of this system that I can think of: * Git doesn’t build on Windows. Not a problem right now, but I can see how this might be painful in future if they don’t sort it out. In the meantime I can shell into my server to use my organizer so it’s not a big problem. * You might think there’s quite a lot to keep track of. But I’m not religious about it, and I don’t have to update this every day. Each file is so simple that it takes only five minutes to work through my checklist and update my logs etc.
Text Organizer References
A bunch of people have done similar things to this. Giles Turnbull started off a wave of it in August 2005 with his post Living in text files. The 43 folder site picked up on that and discussed it here, and here. As I mentioned earlier the 43 Folders Wiki has an entry for this.
The todo.txt is a script for automatically organizing all your GTD to-do lists and projects in a single readable text file. I tried this for a while and it’s great for that, but I wanted a more flexible format.
The original wiki recommends that programmers keep a Programmers Notebook. Into this notebook goes everything relevant to your job and career development. (They have a ton of great articles about this kind of stuff.)
Matthew Cornell seems to have taken the idea most seriously. He’s got a great write-up about it here, where he shows off his very well structured OBTF and compares it to a relational database. Although I think it’s more like a document store with a light schema.
And if you want to hear the other side of this, try Putting Things Off, where they advocate ditching the computer productivity aids and going back to pencil and paper. And the dark ages.