Incoming instant messages almost always fall into the "urgent, but not important" category. This is a tripple whammy: a single IM can simultaneously destroy a developer's mental context, give him/her a "reason" to procrastinate, and accomplish nothing in the process.
The proper way to use IM at work is to set it up so that you notice you have queued messages, but this doesn't distract you enough to leave the zone.
This needs to be coupled with a policy that truly urgent AND important requests or questions come via phone or in person, and that there should be no expectation of an immediate response to an IM even if the person's status is "available".
But, as usual, the good programmers have already figured this out for themselves. The rest of your programmers (the ones you need to worry about), aren't going to figure this out for themselves and probably won't follow the policy when no one is looking.
I'm not saying "down with IM", but it can be a REAL time-waster.