I just came across Daniel Greenfeld's post about Developer time and when I was halfway entering my reply into the comment field I realised that this might be worth a blog post on it's own. So here is my two cents:
I believe that there are good ways to maximise developer time, they might just not work in traditional office jobs. So I especially aggree to Daniel's points number three and four: "New Desk Location" and "Get a new job".
I did just that, and founded my own company: Bitmazk Pte. Ltd.. We are a team of three and 90% of our time is pure "developer time". It is the most awesome work experience I ever had and here is how we achieve this:
We are a distributed team. I'm sitting in Singapore, Tobi and Daniel are sitting in Germany... and if you knew our crazy sleeping patterns, you might as well argue that even Tobi and Daniel are living in different timezones.
The bad thing about this situation is, that it is very hard to create and maintain a good company culture. We recently bought Nexus 7 devices for everyone and use them as little windows into our virtual office. The plan is to just let a Google Hangout running all the time and whenever someone wakes up, he will join and say hi. This gives you kind of a feeling like "going to the office". We haven't been very strict about this culture, thought, yet. Turns out that even this is already too much of a distraction.
The good thing about this is, if you don't want to be interrupted, you simply quit Skype and IRC and you do your work. The key is trust. Just because I don't see Tobi being online at 1pm (his time) doesn't mean that he is slacking off. I will just assume that whatever he does is in the best interest of the company.
We use IRC as our main communication tool. Everyone is free to chose a client of choice but it is encouraged to use irccloud.com. First of all it is another program moved into the cloud. The only program left that I actually have to install from CD when setting up a new machine is Photoshop. I can't wait for this sucker to die as well (I'm looking at you, Chromebook!).
Secondly it functions as a bouncer. This means, when you close the browser tab, no one will notice it. Irccloud will keep you online forever. This also means that when you login the next time, you can scroll back all the history in all your channels and see what you have missed. It is really awesome. There even is TapChat, an awesome Android client which can connect via irccloud and will soon offer push notifications.
Our rules for IRC are simple: We do not expect anyone to look at the chat, ever. If you want the attention of someone, nudge him by writing his name. He will hear a beep or see a desktop notification and if he is free, he will answer. If he is not free, which is the more common case, he will mention your name as well, when answering minutes or hours later.
Again: The beep or notification is a minimal distraction and usually by just peeping at the message for a split second you can safely decide if the question is important and would justify a conversation or if you would rather like to stick with your code.
And of course, you can opt out. Just close IRC.
Every now and then it happens that you hit an obstacle which you just can't solve yourself. In the old office world, you would visit the nerdy genius colleague who always knows all answers to all questions and disturb him. In the new world you have to stop this task, send an email and do something else.
For things that are not of greater interest to the team, we would send an email to a person, for topics that might need a discussion or are just too cool to get lost in someone's inbox, we send a mail to our internal mailing list.
Did you know that you can start closed invite only Google Groups these days? Yep! Setting up an awesome, easy to use, easy to manage and searchable mailing list has never been easier.
Since we use IRC for "fast" communication, no one expects fast answers to emails, which again means: You can opt out. Just ignore your inbox for a whole day. Doesn't matter at all.
There is a catch: This only works because everyone is allowed to work on anything at any time. We don't have a hierarchy nor do we have job descriptions, other than "be great", maybe. Therefore, if you hit a wall, you can just turn around and walk into another direction and solve another one of our problems. We are three guys working on 23 public and just as many private repositories. There is always something that you do.
We don't do meetings. Of course we have Skype sessions or hangouts whenever we need to plan something and typing it all into IRC would just be too slow. Apart from that, there are no meetings. Ever. Meetings are evil. When I was working for a large multinational corporation for 6 years I think I did not attend a single meeting that was worth the time. Even at the much cooler, smaller and hipper company I worked for after that, basically 99% of all meetings were a complete waste of time.
Why is that? Because of the managers! In most companies meetings serve the single purpose of gathering everyone in one room for reporting their progress, so that the manager knows what is going on.
Enter trello.com for the rescue! Trello solves so many problems, but above all it allows me (as a manager), to asnwer the question "So, what are you currently working on?". The person in questino doesn't even have to be around and I don't need to disturb anyone for this.
We even ask our customers to use Trello, which eliminates the single most disturbing source of distraction: A customer calling, wanting to know about the progress.
Seriously, if I ever meet Joel Spolsky in person, I will fall on my knees and praise him for giving us stackoverflow and Trello. These are probably the two most important sites that allow me and my team to pursue the dream that we are currently living.
By the way, I believe that the guys at 37 signals and at Github work in a very similar way, they even published a book about it. Sure, that book is old news by now and in the end it's just marketing - but at the same time it is actually true and it simply works.
So far I totally agree with Daniel but here is some food for though:
I don't think that 5 minute interruptions are bad in every case. At Bitmazk we are tracking our times meticulously and one interesting pattern is clearly visible: While we have the freedom to code 10 hours without interruption, if we want to, everyone of us instinctively choses to have short breaks (5 to 15 minutes) every thirty to ninety minues. In fact, I have actively practiced the Pomodoro technique for a few weeks and I still think that those where the most productive weeks of my life. For software development, there simply isn't any better way of structuring your work time.
And by the way, the act of standing up every 20 minutes is probably saving your life, but on top of the physical health bonus, you get a huge mental bonus as well: When I really get deeply into the zone, I forget eating, drinking and moving. The result is always the same: After 3 hours or so, my thinking slows down. After 5 hours, my code is actually really bad. Try it! Compare the quality of code you wrote in the first hours to the code you wrote in the last hour of a six hour coding block.
Small interruptions aren't that bad. The problem are the interruptions that we can't schedule ourselves.