This week is the one year anniversary of my move from the Fargo, ND office and the Business Framework team to the Durham, NC office and the Team Foundation Server Version Control team. I’ve spent the last few days reflecting on the last year. This is one of those reflections. It was written for myself but I thought I’d share it – my blog is a glorified backup system if nothing else…
It seems that every work-day ends just a little too soon. I’ve spent all day getting into that zone where I’m the most productive. By now my door is closed and Molly Hatchet is pouring out the speakers. Inevitably I’m about an hour from being “done” when quitting time rolls around. The desire to finish the task is strong but I’ve finally hit that point where I’ve come to understand that it’s important to leave on time when you can – there will be plenty of times when you can’t.
The problem with breaking away early is that it took half the day to get into that zone. My mind works differently when I’m in the zone than when I’m not. My understanding of the code is fresher and more accurate. I have ideas coming into my mind that seem like they should be easy to remember. I’ve mentally mapped out the next 45 to 90 minutes of work – I’ve written the code in my mind but my fingers haven’t caught up yet.
I used to just walk out of the office knowing that the ideas would retain in memory until tomorrow. Surely when I look at the code again I will remember where I left off. Right?
About 35 seconds after leaving the office my mind is a blank slate. I start trying to figure out if I should take I-40 or US-55 to get home. Is there an accident on Davis today? Does it look like the freeway is moving slowly? Why doesn’t 96 Rock give me the traffic report every 5 minutes instead of every 10? Oh – and the kids! How do I get Big B to scouts at 7 when Little B needs to be at Taekwondo at 6:30 and Big C needs to be at school by 6? What about dinner? And homework. And did I remember to setup the DVR to record Heros? Oh shoot... Now I’m stuck in traffic. I knew I should have taken Davis to 55.
I’ve been out of the office for all of two minutes and I’ve already forgot every detail of that algorithm I was working on.
When I arrive the next day I go through some email, pick what will be my life’s sound track today, check for a quick update on that news story I’ve been following … pretty soon 30 minutes has passed. I know I should be working on something but I can’t remember exactly what. So I open the source code editor and build. It succeeded so I run a test pass. If something breaks – that must be what I’m working on. If nothing breaks I get the latest code and try again. Still nothing broken? Then I get to decide – bugs or features? What am I working on today?
I played this game for years. I would wager that over the last 7 years I’ve wasted at least 10% of my time by not knowing exactly what I should be working on because I didn’t have a system to remind myself. That doesn’t even begin to account for how much time I’ve lost by not being able to quickly get back into my effective work “zone” – that mental state in which I am most productive.
But now it’s different. I’ve developed a few simple techniques that make it so I can leave on time, forget everything I know and still get back into the zone quickly – picking up where I left off the night before.
It’s a simple three step process that I perform before I leave:
1) Write a brief summary of what you are working on before leaving.
a. I open notepad and write up a few sentences about what I am working on, what the core problem(s) is and what the next steps are. I think differently when in the zone then when not. I need to capture not just the problem but also the next steps otherwise I will approach them differently tomorrow.
b. I maximize notepad on my primary monitor (it has to be primary to ensure I see it if I connect from home using remote desktop).
c. I do not save notepad. I want it to complain it I try to close it so that I don’t accidently dismiss it.
2) Email that summary to myself with a red flag or high priority.
a. Most get deleted without being read. But sometimes at night I want to see the list. If I emailed it to myself all I need to do is check my mail – 15 seconds of time. Otherwise I’d need to use the VPN which means about 15 minutes and that means I won’t do it. The only thing I’ll remember the next day is that I had an idea – not the idea.
b. Sometimes SMS patches my machine and reboots me. I want to make sure I’ve captured the notes in a way that I will notice. By emailing it to myself I will notice a new email and read it.
c. If I read the email before arriving at work I mark it is unread so I don’t forget to read it at work.
d. I only delete the email when I’ve completed the tasks in it.
3) The last line of code I write each night is almost always the same thing.
a. throw new NotImplementedException();
These three things take about 2 minutes per day but they save me about 30 minutes the next morning – more if over the weekend or when I’m taking vacation.
I no longer forget what I was working on and I am able to get back into my productive zone much faster – and if I’m not in that zone then nothing important is getting done.
What do you do?