Monday, February 04, 2008

Getting Things Done: a perspective from a work at home programmer

While I like to automate repetitive tasks (server deployments, builds, tests, etc.), I also enjoy "tuning up" my personal work habits, tweaking them to get things just right. Hopefully, you will find something useful here (and please add comments on how you "tune up" your own work flow):
  • I keep three lists of things to do: tasks for today (I include errands to run in the same list as work tasks), things to get done in the next week, and long term things that I would like to do, but might not ever get to. I work on a MacBook and use the "Stickies" Dashboard widget to keep these lists.
  • I schedule a break every 20 minutes using the "3-2-1" Dashboard widget. These breaks last a few minutes and give me an opportunity to walk around, get a glass of water or a coffee, step outside, etc.
  • Control interruptions: my wife does not work and is at home with me for most of my work day. Whenever my "3-2-1" 20 minute alarm goes off for a short break, my wife knows that she can talk with me without interrupting my work flow. Also, my parrot has become accustomed to the sound of my 20 minute alarm and gets excited when it goes off: he often gets his head scratched when I get up to walk around. I also like to avoid reading email more often than a couple of times an hour: unless I am on one of my short every 20 minute breaks, I prefer to not interupt my train of thought. I also have my wife screen my telephone calls for the same reason.
  • Use a pad of paper and a pen/pencil: for me, this is a great way to think, work on algorithms, etc. Computer science does not always have to involve using a computer :-) A pad of paper can save time, delaying coding until I have really thought about the best way to solve a problem.
  • Keep a detailed work log for each project or customer: it may seem counter intuitive, but I find that the 10 minutes a day that I spend maintaining detailed work logs makes me much more productive, long term. Having notes as text files, that you can quickly search, saves a lot of time the "second time" that you need to do something. I have work logs for a few projects that have been actively used for years, and no matter how large these work logs are, I can quickly find information about why decisions were made, how a particular server was set up, etc. -- saves a lot of time!
  • Start work early in the day: I know that this does not work for everyone, but my best work time is early in the morning. I believe that one of the best strategies for getting things done efficiently is taking sufficient breaks. However, as a consultant, I only get paid for the time I spend working with my pad of paper and laptop. By starting work early in the day, I can afford to take longer breaks during the day that keep me efficient. My favorite things to do for long breaks: take a long walk on the hiking trails behind my house, take my wife to a matinee movie, and have a picnic lunch down by Oak Creek (short drive from our house).
  • Don't drink wine every night: I find that I do some of my most creative work later in the evening, an hour or two after eating dinner. For me, working a few evenings a week, sometimes on fun educational projects instead of paid for work, gives me a different perspective. Adding a few evenings a week to my available work time obviously lets me clear more "to do" tasks and allows me to take longer breaks during the day to stay efficient.
  • I vary my work location: this goes against advice from other people to have one "work room", but I find that rotating between three locations inside my house and my deck, that I stay fresher mentally and this helps me relax while I work. When I used to work in an office, I found that I could increase my productivity by having "meetings" while walking around the block; this obviously works best for only 2 or 3 people. Breaking out of your normal working environment is stimulating and short "walking around" meetings can be very productive.
  • Appreciate the value of your work: I find that if I momentarily reflect on how my work helps people, then I can then stay focused on tasks that might not be intellectually interesting to me. In a similar way, I find that taking a few minutes, once or twice a day, to reflect on the blessings in my life, helps keep me in a grateful frame of mind, and be much happier and productive.
  • Tailor eating habits with your work schedule: small meals and healthy snacks are better than eating just a couple of very large meals each day. You will get tired after a very large meal, reducing productivity. Small and healthy meals and snacks keep your energy level up and keep you mentally alert. Avoid eating sugar; having a desert a few times a week is fine, but eating sweets every day is unhealthy, reducing efficiency. Like drinking wine, eating a good desert is more enjoyable if done only occasionally.
  • Try to eliminate things that cause you to worry. Worrying can be a real productivity killer. Two common things that people worry about are health and finances. We can not (yet) control our genetic makeup, but a healthy lifestyle yields a healthier life. Many financial problems can be eased by simply spending less than you earn and have a savings/investment plan. Time not spent worrying can be spent earning money or enjoying life with family and friends.
  • And, saving the most important for last: have a career that you love. It is much more important to work on things that you enjoy than to maximize the amount of money that you earn. You will get more things done if you (mostly) enjoy your work. If you enjoy your work then you may need to spend less money on material things to cheer you up and temporarily make you happy. Remember: there are two kinds of people in the world: consumers and investors.

5 comments:

vahid said...

Hi Mark,
WOW! Worthy of praise experience and schedule...I printed your post to investigate it more. Inasmuch as you work as a consultant(freelance type),you have absolute control on your time.
My GTD style is a bit weird.My daily schedule is divided into two main part;before 6PM and after that.I get up early in the morning (5AM) and go for work at 7AM.In this period of time, I study mathematics every day. Math is a daily exercise for my mind;it keeps my brain fresh :)
I come back home at about 5PM to 5.15PM, and after a 30-45 min break, I just work on my own projects. This process is continued to 11.30PM. During the work, I have some short breaks (1min for every 30min). Interestingly,I regulate my cell phone to notify me! I also use pen and little papers as well, and write tomorrow works last night. This procedure ,as least for me, has increased my productivity unimaginable, because I just have to concentrate on one task in every part of day...

Shawn said...

Mark,

This is a great post. I am going to print this out and put it on my wall next to other sources of motivation/task management that I read on a daily basis.

Thanks for this great advice.

Shawn

Demetrios said...


> Keep a detailed work log for each project or customer: it may seem counter intuitive, but I find that the 10 minutes a day ....


Would you please detail (or even post a complete example) of how a "work log" looks like?

I tried to do such a thing on serveral projects (with various improvized fromats), but even if I'm a very fast typer, 10 minutes to do something detailed was never enough.

Or are there any best practices, or standard formats for such work logs (that might simplify and meke the task faster)?

I think this might be very interesting for many developers - most of those who I know don't use one for the reason I mentioned above.

Thank you,

Demetrios.

Mark Watson, author and consultant said...

Vahid: it sounds like you have a long work day!

Shawn: being my friend, your comments might be a little positively biased :-) Thanks!

Demetrios: I use a plain text file, one per project (or customer). I start each day with a header that looks like this:

Tuesday, Febrary 5, 2008 0.75 hours
------------------------

1. xxxxxxx

a. xxx
b. xxx

2. yyyyyyy

Each activity gets a new number, and as I work, I update the hours worked on this project today. I break down long activities using a., b., etc.

vahid said...

Yes Mark.
But please attention that I have some break times beside 1 min for every 30 min. This consumes a lot of energy. That's why I printed your GTD style :)