Putting Multitasking In Its Place
A co-worker passed me a copy of Joel Spolsky’s blog posting Human Task Switches Considered Harmful.
There are a lot of people these days saying that multitasking is inefficient for software developers, but Spolsky has made it really clear with pictures and numbers.
What’s striking about his example is that he shows how even a computer, given common software project constraints (two equally difficult tasks that both must be completed), will produce results sooner, on average, with sequential tasking.
That’s a bit of a surprise to our intuition, since multitasking was invented for computers, wasn’t it?
What was multitasking designed for?
While not the earliest computing example, the one most familiar to end-users is multiple windowed applications.
In CPU terms, as in Spolsky’s article, that means multiple tasks where most are expected to be idle.
Why are most Windows application tasks idle? Because the user is single-tasking. S/he can only work on one application, such as word processing, or spreadsheets, or e-mail, at a time. Multitasking is a good strategy for the computer since it needs to prepare several applications to run, and be ready to put up the right one at a moment’s notice.
Coming back to people, it’s often pointed out that multitasking is an essential ability for managers. And sometimes those managers wonder, “If I can do it, why shouldn’t developers?”
When is multitasking appropriate?
My wife keeps reminding me that once I’m at home with the family, multitasking is where it’s at. I admit I don’t adjust too well. But how else to attend to kids’ requests, ever-ringing phones, and visitors at the door, while trying to enjoy dinner together?
The work of running a home is supportive and ongoing. Not long tasks to finish. Nothing gets finished. Rather, lots of existing activities have to be pushed along, and preparations have to be made for upcoming activities (e.g. phone the friend’s parents to arrange that sleepover next week).
Managers also push many activities forward, never get to finish anything, and are always looking ahead to prepare the next activity. Management, as modern literature reminds us, is a supporting role. This is the kind of job that requires multitasking.
(Lest anyone think that’s devaluing managers or parents, remember that the other part of those jobs is leadership. More about that another time.)
In summary, multitask where appropriate: multiple ongoing activities where none finish and many must be idle.
That does not sound like the job of a software developer.