Something new, every day

Last December I went to to StarEast in Orlando because my fiancee is a tester and I well, I like sun. While there I picked up the book Practices of an Agile Developer and was particularly struck by the practice to keep a “Solutions Log.”

The way a solutions log works is simple. Every time you find a solution to a problem you write it down, and later when you are confronted by a similar problem you have a reference.

“Gee Whiz what a great idea!” I thought to myself, because I think to myself like Beaver Cleaver, “this way when Jim asks me about that bug I solved two weeks ago, I’ll know exactly what to tell him, instead of saying “uhhh, err, yeah I sorta kinda remember…”.

It really was an amazing revelation, seeing as how I hadn’t met Jim yet.

Then I got home and subscribed to Venkat’s blog where he recommended TiddlyWiki for keeping this list. If you’re unfamiliar with TiddlyWiki it’s an extremely cool browser-based personal note-taking tool that works entirely via JavaScript and CSS.

You fire up your personal version of the HTML file, double click, and viola! there you have a note saved into the very document. Best of all it’s searchable even via regular expressions and plain text. With this tool I was gonna be a solution mastermind!

People will ask me for that bug I fixed 14 years ago and I’ll be right there with my genius hat on and everything. You do have a genius hat don’t you?

How did it work out? Roughly 18 months later I have a whopping…16 solutions, most of them written in the first week. You know what I learned from this? I suck at keeping a solutions list.

The thing is I have no idea something is a solution to a recurring problem, until I come upon it a second time! What I need is a way to psychically determine what the solutions I’m going to need in the future are, and identify them.

I’ve decided on a different option, which I think fits in well with the craftsmanship approach of perpetual learning. Since joining 8th Light I’ve been lucky enough to learn enormous amounts in a short amount of time, with more on the way, but of course none of this is in my solutions list.

So instead of catching the realization that something is a solution, I’m going to write it all down. I’ve created a new list, and instead of calling it a Solutions List, it’s my LearnANewThingEveryDay list. Every day I’m obligated to write a new note with something I’d learned that day.

If a day goes by and I haven’t learned something, I have to go learn something. I’ll read a book, find a great blog posting, try out a coding exercise, whatever. For example today I have written down some things I didn’t know about routing in rails.

Mundane stuff that people more experienced with routing already new such as the :path_prefix parameter. What would be an otherwise fruitless day debugging now has a few little things I’ve learned from it.

Will I ever search for that item? I don’t know—but the point is I can, so when Jim asks me how to get eric/is/the/coolest/blogger in front of all his links, I won’t stand there scratching my head.

Eric Smith, Software Craftsman

Eric Smith has been programming since he started a web design company in college.