We’ve got a problem.
These days, there are no shortages of interruptions. Cell phones, pagers, email, IM, RSS feeds, blogs, and now twitter.
As a developer in a rather small team, at any given time I’ve got several projects I’m working on. Each with a relatively significant duration. In other words, I’m busy, and I don’t expect to complete any of my current projects for at least a week or so.
Fast forward a little to a typical work day for many of us.
9:00am: Arrive at work
9:05am: Check email
9:15am: Finish filtering our spam, reading emails in inbox
9:20am: IM comes in from co-worker, go help co-worker
9:35am: Return to desk, check email
9:40am: Start a reply to some of your inbox messages
9:50am: IM message, some funny youtube video
10:00am: Finish responding to new email
10:05am: Begin work for the day
10:15am: IM message, BC Place roof has collapsed
10:30am: Meeting to discuss team goals for upcoming year
10:45am: Return from meeting, check email
10:50am: Check RSS feeds, read up on some new posts
11:10am: Go to kitchen and washroom for a break
11:30am: Get back to doing work you’re supposed to do
11:50am: IM from a co-worker, need to discuss an issue with Project X
12:00pm: Check email, new message from boss. You need to create several new reports ASAP
1:00pm: Reports finished, going to lunch
While it may be slightly exaggerated, it’s definitely not unheard of for a typical work day in a software shop.
All this context switching is harmful. We need to tune out once in a while so we can get some real work done.
One thing I try to do is stay out of IM and shut down my email client for certain parts of the day. It works well when you are trying to get work done, but doesn’t work well when your colleague is sitting withing earshot and keeps asking if you got the joke they sent you, or saw the episode of Jon Stewart last night. Not to mention, did you get the request for those mission-critical reports your boss wanted that – just so happen to not be mission critical.
Joel Spolsky wrote a while back on this topic specifically. From the “you call this agile?” department
management has a responsibility to provide an abstraction layer for programmers, so programmers can pretend that the outside world doesn’t exist while they work on code
Joel also wrote an article titled “Human Task Switches Considered Harmful‘
Most people’s gut reaction is that multitasking is better
when you manage programmers, specifically, task switches take a really, really, really long time. That’s because programming is the kind of task where you have to keep a lot of things in your head at once
Ok, so in terms of projects and tasks, it seems pretty clear that task switching isn’t a great thing.
But wait a minute?
What about those tough problems that you occasionally get stuck on. Sometimes it’s a good idea to drop a task that you have become stuck on, to make some progress elsewhere. This is a good idea, and it keeps your morale up.
So, some multitasking is good, but it has to be very carefully managed.
Now, we haven’t really addressed the issue of the email, IM, RSS feed and even twitter interruptions you receive throughout the day.
Besides cutting yourself off from interaction with your team members, does anybody else out there have some good suggestions?