On productivity, flow, and the "big block"
Posted Tue, Jan 15, 2008 in:The “Big Block” Method
Joshua Clanton posted a guest post on Jarkko Laine’s blog yesterday, talking about how to get into a state of “flow” to increase your productivity.
I commented that I seem to be able to get into a state of flow better when I have a large chunk of time allocated to work on a task.
To me there’s nothing worse than coming back to something I had to stop in the middle of. It takes far too much time to get back up to speed on what I was doing, and often I’ll have forgotten about something essential, which results in bugs.
Joshua pointed out in another blog post that it helps flow to have not only big blocks of time but also to have your tasks divided into big blocks as well.
I definitely agree with Joshua on the “big block method,” though this is the first time I’ve put much conscious thought into it. Looking back, it seems that I’ve done better work when I’ve used this method, and I’ve always hated working in short bursts, since it feels like I’m wasting too much time in “context switching.”
How big of a block?
There’s one question I’m not really sure of the answer to yet: How big should a big block be?
The first answer that comes to mind is “Just big enough, but no bigger” (a modified Einstein quote)
So far my technique has been to just pick what seems to be a single functional unit, or perhaps a piece of functionality that all belongs together.
I suppose that different people will have different definitions of what a big block task is, but to me it works out that it’s something that is a complete unit. A complete unit can be a full module, or one step in the implementation of a full module. The key is, though, that there is a clear stopping point and something isn’t left unfinished.
For example, working on my browser, I have index cards (old business cards, actually) which each have an individual task on them. I sort these cards by the order I plan to do them in. These cards contain something like “Implement DOM 2 HTML” or “Rendering Engine support for inline elements.”
The former is a complete module which could (and was) finished in one big block section of time.
The latter won’t result in the final version of the layout engine, but it will get it to a point where it is functioning, and then the next step would be to support block elements. Absolutely and relatively positioned elements would be yet another separate task.