php[architect] logo

Want to check out an issue? Sign up to receive a special offer.

The Number One Developer Productivity Tool

Posted by on March 26, 2010

A few years ago, Joel Spolsky wrote a great article for his blog in which he proved that not only is there a huge productivity difference gap between top-performing developers and mediocre developers but goes on to prove that hiring a lot of mediocre developers instead of a few great developers is not a feasible strategy.

At the very end, he mentions something, in passing, that I have believed and have been saying for years. When discussing the working conditions at Fog Creek, his software company, he had this to say.

“Programmers get private offices, free lunch, and work 40 hours a week.”

If you require your developers to work onsite, the number one productivity tool you provide for them is a door that closes (well, 4 walls and a ceiling to go with it).  Given control of their environment, developers can reach their peak productivity most days and sustain it. Without control, most developers will have a hard time even getting close to their peak.

The reason is as simple as it is obvious: interruptions. In an open-plan office, two people talking to each other can be enough interruption to derail a programmer and set the project back. Phones ring; people get up and walk around; all of these are enough of a distraction to keep a developer from concentrating on the task at hand.

A developer with an office can turn off Twitter, e-mail, IM and Skype to hunker down and work on something. Programmers can get “in the flow,” “in the zone,” or whatever you call it. They can control their environment and shape it to fit their work habits.

In a cube farm, or worse yet, open rooms, programmers have no control over their environment. Without the privacy that an office affords them, it is difficult to concentrate long enough to write a coherent blog post, much less a module for a complex software system.

Companies are always looking to save money—and cutting back on office space often seems a logical move to them. However, it is a penny-wise, pound-foolish strategy. Placing developers in an interruption-driven environment is a guaranteed way to reduce productivity, increase errors and increase the overall cost of producing software.

“Situation Room” environments do have their place in software development. They are useful when rolling out large complex systems that require instant coordination of a lot people and resources. However, open room environments with several islands of tables that serve as desks is the worst type of environment for any task that takes a great deal of concentration like programming.

If you want to increase your developer productivity, put them in offices. If on the other hand, productivity is not that important, by all means, keep them in cube farms or open rooms.

Photo © 2008 Steve Kelley. Released under a Creative Commons license.

Cal Evans is a veteran of the browser wars. (BW-I, the big one) He has been programming for more years than he likes to remember but for the past [redacted] years he's been working strictly with PHP, MySQL and their friends. Cal regularly speaks at PHP users groups and conferences, writes articles and wanders the net looking for trouble to cause. He blogs on an "as he feels like it" basis at Postcards from my life.
Tags: , , ,

Responses and Pingbacks

I work in a cubibcleish environment and it can indeed be pretty annonying when some loudmouths blabber in the background when you’re trying to figure out a complex issue in code.

For me, music and test-driven development help keep me concentrated. Just get headphones and play music so loud you don’t hear anything that’s going on around you. TDD on the other hand just simply helps me focus on the problem at hand better.

So true.

Except that to get junior/medior programmers to get to be great programmers they need to be able to ask questions or discuss issues.

So I’m in an office with 2 other programmers and an intern…
Hence my productivity is about 50% of what it could be or what I can do when I’m at home.

@Harro—it depends on how you measure your productivity. Hopefully, your management recognizes that you helping your junior colleagues grow is part of that.

Sounds like someone has read peopleware …..

What if developers work together on the same project? Being in the same room with the team, while costing some productivity caused by distraction, will also gain productivity by being able to brainstorm easily, help each other, pair program, etc. I think every team needs to define for itself how they like to approach this. Also, I’ve had projects where the whole ‘working together on something’ created a flow as well. I don’t think I agree to the fact that an office per developer is always more productive.

@Harro – There are communal areas, reviews and planning meet ups for things like that, also paired coding runs will help …. though for pure focus and getting the job done, being left alone is what is needed.

I agree with Marco. I “invested” a lot of time helping a junior developer grow, and in the end he became good enough to take some of my workload. Initial investment can pay dividends in the end, but when explaining this to management….put everything in dollar amounts.

@Ivo. In very few isolated situations, usually revolving around a botched rollout or some sort of temporary emergency, I will agree that having all the developers in the same room can be a good thing.

Beyond that, no, not ever. I’ve worked in both environments. My very first development job where I was on a team, there were 30+ of us programmers and each one had our own office. I was able to hunker down and concentrate without threat of interruption, intentional or otherwise. I was also able to hold private conversations without fear of interrupting others. I still functioned as part of a team and when I needed mentoring or needed to mentor, we made it happen. But I never had someone next to me on a speaker phone holding a conference call with a client, or any of the other thousands of daily things that have to take place for life to continue.
As Jeremy pointed out, this isn’t a new idea. Demarco and Lister expressed similar thoughts in Peopleware. However, my comments are based on my experience.

It’s not a matter of prestige, it’s a practical matter of productivity. You cannot focus with a lot of activity going on around you. Yes, you cna get work done, yes you can put on headphones and try to ignore the people talking next to you. However, you can’t “get in the zone”, “get your head in the game” or whatever you want to call it while there are distractions going on around you.

[…] an article title “The Number One Developer Productivity Tool” (via @weierohpinney) which refers to an article by Joel […]

@Ivo – You are assuming that everyone focuses at exactly the same time and that when one is just about to make a break though having two or three next to them “brainstorming” wont break their flow and loose the code, because it will.

Situation rooms are good, giving coders the option of a sanctuary is far better, even if they choose not to use it.

Should of posted this above :

Personally when being a part of creating vBulletin we all had our or own environments and met up to discuss, then went back to creation, hence why we could produce something like version 3.0 up to 3.8.

Being in an open plan office now, I know I’m running around 10-15% of what I can do due to constant interruptions, and I really miss the environment to be able to churn it out when in flow.

Looking for a job to get back to that reminds me of the Start Trec episode where Terrence Stamp is playing a character trying to get back into the ribbon, or what ever it was !

I do have to wonder whether a single office per developer will reduce the team mentality often required for a successful project?

When everyone is isolated in their own rooms, it will reduce the amount of communication happening between developers – especially if you don’t go to the break room for coffee and sit on your PC like I do =)

@Jeremy: it was Malcolm McDowell in Start Trek Generations 🙂
ExtremeProgramming proposes to use a open work space to improve communication in the team. At least they would be pair programming, so both of them should get distracted to interrupt the flow.

More important than offices is 2 or 3 large monitors (and fast computer with lots of memory).

[…] from those smarter than I Yet another great article by PHP Architect. By the way, this company is amaiz-iz-ing. Just thought I would point that out. See some of the […]

In my work we had a large hall where 19 programmers shared the same space, obviously the place was quite uncomfortable for a developer.

Thanks to this article i was able to convince my bosses to split this developers area into a small offices, not one box for each programmer but a small number of developer for each office(4 to 6 developers on each one).

Now we have a nice place to work, we are very happy and comfortable in our places. Tanks Cal for this the excelente post, was very helpful for us.

Leave a comment

Use the form below to leave a comment: