I respect Joel for sure and he's got way more experience than I do, but I strongly disagree with private offices for developers. I had that while at MS and at first I thought it was just amazing. It didn't take long before I realized how much it stifles communication and even how territorial it can make people. Sure cubicles or even big rooms with open desks aren't nearly as glamorous or prestigious, but in my experience they foster teams that talk to each other, constantly, about the product. The overall team knowledge goes up dramatically. It also fosters an environment where people are more on the ball and productive, instead of sneaking off to some vice website every 5 minutes.
At GitHub we use conference tables that everyone sits around, along with a couple of couches if you wanna chill out somewhere else. We spent our first two years working out of coffee shops, so we replicated that environment without all of the additional noise and distractions.
If there's something that truly requires uninterruptible concentration, you just stay home and work there, or put in your noise-canceling headphones and zone everyone else out at the office.
When you work with people you consider friends, the last thing you want to do is sit in an office. For that reason alone, I'm not convinced offices make people more productive. I'd rather keep people happy and the productivity will follow.
In my experience, private offices foster increased communication because a small gropu can get together and talk without having to get a conference room or pissing everyone else off.
A lot is going to depend on how really difficult the work is. If you must establish and maintain flow then you need a quiet, no distractions environment (unless you're one of the rare sort who can ignore your environment ... I can when I'm doing intense debugging).
I hope you're statement is based on more than your experience at Microsoft or at least them as of late, it's pretty clear that they've become seriously dysfunctional.
Open spaces "foster teams that talk to each other, constantly, about the product".
Well, that's nice, but when does the actual creation of the product occur? And how truly difficult are the products developed in these sorts of environments? E.g. are you just bolting together existing "parts" and the user visible stuff is overwhelmingly critical? ADDED: or are you doing something like ViaWeb (the extreme level of store customization that was never replicated in C++).
If you have people who absent a panopticon are "sneaking off to some vice website every 5 minutes" then you've got much greater problems than anything related to your environment. They're not dedicated to the project, perhaps because they don't have what it takes, perhaps because you've failed to create the necessary conditions. Either way, I don't see any good alternative to solving the root problem (and if your company is a really bad and dis-motivating place, why are you still there???).
These are all good points. Perhaps the reality is something like physical layout of the office doesn't influence things as much as the team itself. However, something as simple as physical layout still will affect things at least to a degree.
I know that there's a well established rule of thumb that states close collaboration just doesn't tend to happen beyond 30??? feet or a single staircase (i.e. people further apart just don't tend to collaborate). This is of great interest to universities and other places that do research, you should be able to find something, maybe in Peopleware (which if you haven't yet read you want to anyway).
True. However they also say: "...enclosed offices need not be one-person offices. The two- or three- or four-person office makes a lot more sense, particularly if office groupings can be made to align with work groups."
I think there needs to be a balance between private/semi-private team space and individual private space within the team space.
Indeed. It was, however, written in a very different period of software development and one could argue that it may be less applicable to the the "bolt things together", MVP consumer product/site sort of project that is the greatest?/primary?? focus of HN/YC/today's angels funding.
(To emphasize how different, we can be pretty sure that very few if any of the programmers studied had a memory budget even close to what's been in mainstream CPU caches for some years.)
For another example, see MIT's termination of SICP/6.001/Scheme with extreme prejudice and replacing it with Python based "bolt together" course(s) (I don't know anything about 6.02, but the initial 6.01 robot project is just that ... which is not to say that it's easy, e.g. it requires the use of differential equations and its labs are very instructor intensive, to the point the department is recruiting upper-classmen to help).
MIT believes that things have fundamentally changed....
I prefer an office, but for those without I think there should at least be "quiet time" or consideration given to where different types of workers are located.
This helps avoid the "talkers vs. typists" problem--don't mix the two. For example, don't put me near the support guy who has loud and frequent speakerphone discussions about resetting passwords, his personal doctor visits, etc. ;)
The 'we have no heirachy - the owner doesn't have an a office' open cubical farm where you are stuck between chatty secretaries and shouting salesmen.
And the private offices where one office = one person = one module and the only way to talk to somebody about 'their' part was a request up the management chain.
Best was a 'programmers only' room with one huge desk for three programmers on the same project.
I used to think that programmer needs to work in a very quiet room because they need ultra-sharp focus. Turned out there are bad side effect from this situation.
This is one of the reason why programmers tend to be weirdos and outcasts.
This is also a reason that you often found crazy complex code. As you mentioned it before, they become territorial. I often met with programmers whom you can't just disagree with. It's like they live in their own world and everything they do is right according to them. Coincidentally when you write your own program, you're a god in that universe.
The stories of "a small group of great developers working together on a great product" were often being told in HN threads. Please understand that we should emphasize more on the word "group" and the phrase "working together". They don't work alone.
By the way, I had experienced private office too before. Boring.
The more I think about it, the more I'm starting to believe in shared offices or small, isolated cube farms. Noise is minimized and there are people around for ease of communication.
I worked for a fairly large company (Gemalto). Developers had shared offices, two to an office. The office had a partitioning wall through the middle, but it did not extend the whole width of the room, so it was semi-open space. There was also a fairly strong open-door culture, so you could hear, softly, the conversations happening in the other offices. That really worked for me. When I needed serious focus time, I just popped on some headphones.