There is a long held belief that developers hate interruptions, people laugh at how cross we seem to get when you tap us on the shoulder when we have headphones in. The reason we get cross is because it is annoying. I think it is pointless trying to explain why being interrupted when you are in the zone to someone who interrupts is pointless, if they got it they wouldn't do it. In this post I am going to explore some pragmatic ways we developers can attempt to get stuff done and be more resilient when things do distract you from your flow.
Obviously the goal here would be to always be interruption free and whilst this is probably an unachievable goal it is something we should shoot for.
Explain to people why interruptions are bad
This sounds obvious but have you actually explained to people why interruptions are bad for programmers/developers, Paul Graham does a really good job of explaining the difference between a manager's schedule and a maker's schedule. Essentially what you want to be telling them is that because of how development works it isn't easy to context switch between tasks and a lot of what you are doing at anytime could well need to be stored in your head. Some sources would suggest that after an interruption (so lets say a five minute phone call) it can take as long as twenty five minutes to get back into the flow. If we are more conservative and say it takes five minutes after the initial interruption then we are saying that six five minute interruptions could lead to an hour of lost productivity, going by the twenty five minutes estimate it would only take two to drop an hour. Don't be afraid to say to people, and if needs be escalate the issue up towards management, at the end of the day they are going to want you more productive and if something as simple as telling people not to bother you will increase your output they will be keen to implement it.
Remove all non-human interruptions
It is incredibly hard to control when people will want to interrupt you, but depending on the method they use you should have some elements of control here are some things you should do off the top of my head;
- Turn off e-mail notifications.
- Turn off Twitter/Facebook/etc notifications to your computer/phone.
- Put your phone on silent.
- Close all programs you don't need for the current task.
- If you need your browser open only have relevant tabs open (especially sites that auto-update number of unread messages in the title).
Move somewhere else
This might not be a long term solution or even feasible in your current working environment but maybe something as simple as moving desks to a quiet office or meeting room for the day might give you the breathing room you need to get some real work done and at least you will know that people that take the time to track you down probably need to speak to you more than someone who gives up once they see an empty desk. An extreme version of this would be to work from home, I think every developer should have this option in their working environment so that they can go completely underground and get some work done, assuming home isn't more distracting than the office that is.
Limiting the damage done by interruptions
As I say ideally there would be no interruptions when you want to get stuff done but there will always be something, so here are some ways I think you can help mitigate the time spent on interruptions.
Plan your tasks out - properly
Most people have an overarching plan for what they are coding and might have it written down, but a properly planned out task will have all the discrete tasks that will need to be complete before you can call the main task done, this set of tasks will allow you to do two things.
- Jump right back into a task after an interruption without trying to think what you were working on.
- Potentially pick a smaller task to work out since interruptions have eaten up your day.
Don't commit to doing something right away
If someone drops by your desk and asks you to do something small for them, instead of asking when they want it for tell them when you will be able to do it, it is bad enough that people take it upon themselves to decide that what they want to complete is more important than what you want to complete, but they can't also dictate when you do it. Take a note of what they need done, commit to a time when you will do it in the future and then get back to the task at hand. Having it written down means you will not forget it and your brain can concentrate properly on completing your current task.
This is a more extreme version of not doing something straight away but if someone asks if you have five minutes to look at something it is OK to say no, you could ask them to email you or alternatively just apologise and get back to work.
Hopefully these suggestions prove useful to someone who has issues with things interrupting them when they are trying to get stuff done. There are a few places you can get in touch if you have anymore suggestions;
As well as the articles I have linked to in the body of this post I would also suggest reading;