March 29, 2011

Bulk view

More thoughts on time analysis: correlations and revealed preferences

People often ask about the time analyses I do as part of my weekly review. My weekly time tracking reports go back to about December 11, 2010, when I started tracking my time using the free Time Recording app on the Android. I do it because of the following reasons:

  • I need to track my project-level time for work anyway,
  • I want to see where I spend my time and if that’s in line with my priorities,
  • I want to know how much time it takes me to do certain things, in order to improve my estimates and get better at planning,
  • I want to avoid burning myself out
  • I want to make sure I allocate enough time to important activities instead of, say, getting carried away with lots of fun work and flow experiences, and
  • I want to cultivate other deep interests and relationships.

Fatigue and burnout are particularly big concerns for developers. There’s always the temptation to be unrealistic about one’s schedule, either through over-optimistic estimates or through business pressures. However, sustained crunch mode decreases productivity and may even result in negative productivity. Sleep deprivation severely cuts into cognitive ability and increases the chance of catastrophic error. I like what I do too much to waste time burning out.

Development is so engaging for me. I could keep writing code and building systems late into the night, at the expense of other things I could do. Tracking time helps me keep a careful eye on how much time I spend programming. Like the way a good budgeting system helps me make the most of my expenses and gives me the freedom to take advantage of opportunities, a good time budgeting system helps me make the most of my focused work time and allows me to also focus on other things that matter (the care and feeding of relationships, the development of new skills, and so on).

So here are some new things I’ve learned from time tracking:

  • I sleep a median of 59 hours a week, which is about eight and a half hours a day. This is more than I expected, but I manage to get a lot done anyway, so it’s okay.
  • I work a little over 40 hours each week, except for the occasional week of crunch time or travel. I don’t make a habit of 50-hour weeks, and I get a little twitchy when I work too intensely several weeks in a row (46 hours or so). This means that when I estimate timelines or project my utilization, I should assume 38 or 40-hour weeks instead of 44 hours.
  • I spend most of my time sleeping (44%), working (31%), or connecting with people (11%). Regular routines take up 9% of my time, while my favourite hobby (writing) takes only 5%. I enjoy my work and I sleep well at night, so this time allocation is fine.

In economics, there’s the idea of a revealed preference, which is basically what your actions show compared to what you might say or think you prefer. I may think I’d like to sew or learn languages or do the piano, but if I spend time playing LEGO Star Wars III instead, then that tells me that sewing, Latin, and Schumann are lower on my priority list. (Rationalization: LEGO Star Wars is awesome and it counts as bonding time with W- and J-, so it’s not all that bad.)

So, how do I really trade my time? Which activities are positively or negatively correlated with other activities? I made a correlation matrix to see how I spent my time. I used conditional formatting to make high correlations jump out at me. I found some interesting patterns in how I shift time from one category to another.

Activity 1 Activity 2 Linear correlation coefficient (r) Notes
Prep Personal 0.87 Getting things in order means I can give myself permission to learn something new
Cooking Prep 0.86 Makes perfect sense. Big chore days.
Break Drawing 0.75 More relaxing time = more drawing time
Travel Work 0.69 When I commute to work, I probably tend to work longer. Also, I needed to go to the office for some of the crunchy projects.
Sleep Break 0.67 Relaxed days
Sleep Writing 0.60 Nice to know writing isn’t conflicting with sleep
Social Drawing -0.50 The Saturday afternoons or weekday evenings I spend with people instead of sketching
Routines Drawing -0.65 Lots of chores = less drawing time
Personal Drawing -0.55 Learning other things = less time spent on drawing
Travel Cooking -0.60 Lots of travel = live off home-made frozen lunches
Sleep Cooking -0.62 Late weekend mornings = less cooking?
Sleep Prep -0.58 Likewise
Sleep Personal -0.57 More sleep = less time spent learning other things

I can guess at the causality of some of these relationships, but the others are up in the air. =) Still, I’m learning quite a lot from this exercise. For example, I thought I was giving up sleep in order to write more or draw more. It turns out that sleep cuts into cooking, prep, and other personal interests (sewing, piano, etc.), and doesn’t have much effect on work, writing, or drawing. I do sleep quite well, though, so it may be interesting to experiment with that.

I’m also happy to see I don’t give up too much because of travel – a median of 3.4 hours / week, much of which is spent reading, brainstorming, or listening to audiobooks with W-. Travel time reduces cooking time, but that’s okay because we batch-cook in order to minimize weekday cooking. It’s good to see that it doesn’t affect my other activities a lot.

The same dataset lets me analyze my sleeping patterns, report project-level breakdowns at work, and review quick notes on my day. I’m in consulting, so I need to track and bill my time per project. Time Recording makes it easy to do that, and I’m thinking of tweaking my workflow further so that I can use task-level times to improve my estimates.

So that’s where I am, tracking-wise. It takes me a few seconds to clock into a new category, and the habit is handy for making sure I know where my phone is. Tracking my time also helps me stay more focused on what I’m doing. If you’re curious about the idea and you have a smartphone or other mobile device, find a time-tracking application and give it a try. Have fun!

2011-03-29 Tue 21:54

Helping kids learn about automation

J- shuffled in and out of the living room, listless and bored. As part of a 9-week simulation of real life in school, she and her classmates had been assigned jobs. Her job was to be an accountant, and the tedium of checking dozens of pretend tax returns had long sunk in. W- had encouraged her to use a calculator, so at least she didn’t have to multiple all those figures by hand, but there were still so many numbers to verify.

My geek sense tingled, as it does whenever there’s an opportunity for a quick win through automation. I coaxed her back to her homework. “Come on, let’s set up a spreadsheet,” I said. “That way, you don’t have to redo each of the calculations or worry about getting things wrong.”

We brought up OpenOffice.org Calc. She was still lackluster, so I took the lead in creating the spreadsheet. I asked her which tax return we could use as a model, and she picked hers. We started filling in the formulas, checking her work along the way. (We found and fixed an error in her tax return, too!) Then we tested the spreadsheet on a few other tax returns she had manually done, and she used it to check the rest.

Result: Not only could she verify a correct tax return in less than a minute, but she perked up and started having fun with it. She made a pile of correct tax returns and a pile of incorrect ones, with sticky notes pointing out the deficiencies. She still doesn’t want to be an accountant again, but at least she knows that tedious tasks might be automated away.

The next time J- finds herself doing tedious calculations or verifications, I hope she thinks about how much faster, more reliable, and more enjoyable the spreadsheet was compared to calculating things step by step, and perhaps invest time into learning how to automate whatever she needs to do.

How do people learn how to automate? It’s such a time-saving skill, but it doesn’t seem all that common. Maybe people are intimidated by spreadsheets and programming languages, and that fear of losing more time keeps them from gradually building the knowledge they need to save lots of time. If we can show J- and other kids the benefits of automating, maybe that light at the end of the tunnel will encourage them to learn. If we expose them to the methods for automating tasks, such as putting calculations into a spreadsheet, creating keyboard macros, or writing short programs, maybe they’ll realize it’s not scary – and maybe they’ll start modifying or creating new tools.

In my experience, working with new automating frameworks is always slow and somewhat frustrating in the beginning. It helps that I don’t usually need or want to automate everything right away. I break things down into small things, small wins. I might start by figuring out the most time-consuming parts and automating that 10%, or automating the most common operations. As I become more familiar with the tools and the process, I automate a little bit more, and more, and more. Eventually I might even create a tool that other people can use, like the way my Community Toolkit for Lotus Connections is off and running.

The hardest thing, I guess, is knowing where to start. I run into that problem a lot, because I work with lots of different technologies and frameworks. It’s like looking for the end of a tangled piece of string. That can be hard to find in the confusion, but once you do, you can start unknotting the mess. I want J- to be able to think: ah, this has to do with calculations, maybe I can get a handle on it by using a spreadsheet, putting in manual steps if needed.

How do you use teachable moments to encourage people to automate?

2011-03-29 Tue 21:09