Keeping all the balls in the air

A while back Carson asked me how I managed to keep track of all the projects that I was working on; I said that I had practiced being productive over short time periods, tried to stay focused on one thing at a time and not to switch projects too quickly. There’s more to it than that though as I found out recently…

Recently I’ve been busy. Too busy. I managed to maintain the pace for a couple of weeks and then ended up wasting a couple of days thrashing as I needed a bigger time slice than I had available and I kept trying to use the time I had to do a task that required more time and that had to be done in one go… Note to self; try and spot that next time and use the small time slots for more appropriate work.

I’ve spent a lot of time practising being productive in short time slices. I can get productive work done on a project in a 1 hr time slice. I find I can hold project state in my head so that I can just drop in, do an hour of productive work and then switch to another project. Obviously I don’t run 10 projects at once, but if you need to be on a client site from 10 until 3 it’s useful to be able to be productive between 9 and 10 or 7 and 8.30 or whatever. If I’m not switching to another project but just stopping to make dinner or get some shopping then I find that I can work in even shorter time slices; peel potatoes, put them on to boil, set timer for 12, write code, start veg, set timer, write code, etc.

The client that I’m refactoring for had several staff members taking holiday and they wanted to keep the releases flowing so that their users were happy. We refactored more and got more of this code tested and into production, including adding some simple user requests. It worked well, but meant me doing more days for them than I would normally do.

We finally got the go ahead to complete the free software integration project and the client was keen to see some interim results.

The online game stalled due to client issues for a week or so and then came back with a vengeance - we’re near the end, they want to step up the pace.

I’ve been trying to cut down on my workaholic tendancies and spend more time with Michelle. This reduced the number of hours that I wanted to spend on projects that were being done from my home office.

So, lots to do and lots less time that I needed, but plenty of small time slices. Things were fine for the two weeks of additional work on the refactoring project. I’d swapped out the online game and the integration work was such that it was a well defined task using code that I knew very well. The refactoring project is easy to mix with other work as it tends to follow a pattern of being a day or so’s refactoring, manually eye-ball testing the stuff that doesn’t yet have unit tests, followed by a release, rinse, repeat.

When the latest online game requirements came along it was a big deal to swap the project back into my head. The week and a half of no activity on the project had been enough for me to page it right out…

The way it seems to work for me is that if I’m working on several projects at the same time and I’m working on all of them regularly there’s no problem. It doesn’t even seem to matter how complicated or different the projects are. As long as I do at least a little on each of them often enough I can keep all the state in my head and the context switches are fast. Once I stop working on something I start to page it out. This takes time, but eventually all of the project state is gone and from that point on the first switch back to that project incurrs a massive start up penalty. Once that penalty has been paid things are fine again…

The problem I had was that I didn’t recognise that I needed to spend more time getting back up to speed. I’m not talking about a lot more time, but it’s the difference between being able to use a 1hr time slice or not. It seems that I can’t get up to speed using several short time slices. I need to spend a decent amount of time, 3-4 hrs, deep in the project to kick start it again. I didn’t recognise this and wasted several short time slices on the online game when I should have found a slot that was big enough and used the smaller slots for other things.

Everything’s loaded again now and we’re multi-tasking well again. It’s useful that the integration project and the game are based on a common code base and that I know that code base inside out. Working on these projects together allows lots of cross pollination of ideas as each project pulls at the common code in slightly different ways.

It seems to have been mainly my blogging that suffered from the loss of a few one hour time slices. The client’s weren’t really affected. The time slices that I wasted trying to swap the game back in would have otherwise gone on blogging or Bluetooth and OBEX. I continued to elicit requirements for the online game; I just couldn’t knock up any prototype code to help me quote faster. It’s annoying though, I hate wasted time. Next time I should try and spot this situation in the first wasted time slice and then put off the project until I have a larger slot in my schedule.