The two main ideas being bandied about these days in regards to the best environment for software developers are private offices and open bullpens. Both these extremes are being promoted heavily in the industry. The likes of Spolsky and Microsoft are into the private office thing (or so I’ve read) and most agile methodologies such as XP necessarily require non-private offices and shared workspaces because of the whole pair-programming and collaboration thing.
So why is it that I’ve experienced both these approaches and neither worked out very well, at least for me.
Quite frankly, times when I’ve had private offices have felt isolating. Maybe this was because my longest experience in a private office, with a door, was in about a 7′ x 7′ covered cube, with no windows to the outside world and given a 6′ x 3.5′ desk, not much room for visitors, even if they did come. I always thought I wanted a private office before this experience but I much prefer to be in a room with at least a few people and some windows to the outside. I think my attitude would change here if I had an office like Spolsky has for his developers. It was definately quiet in the office I had, but it was difficult to work with anyone in person.
I’ve also been in large cube farm scenarios where there were many people in a huge room. There was no privacy, lots of noise, it was generally a big pain in the ass to get things done. And in some agile practices, people don’t even have cubes. All the programmers are just plunked down around a large table with computers (1/2 as many machines as developers, don’t you know) and they are told to work. I can’t imagine not having my own space and computer. I need to have a place that is my own. I’m not opposed to working with others, in fact I quite like it and like I said, lack of collaboration was one of my main complaints in the private office situation. But there needs to be a balance. There is a time for collaboration and a time for alone work (or alone non-work as the case may be). Giant bull-pen style spaces just don’t acknowledge this requirement and just throw everyone into a big pit of chaos. Maybe some like the chaos, but not me.
So what do I think is the best physical environment for software development? Here’s a list of things I’ve experience that have worked particularly well and generally made work not a large pain.
My office space requirements (no order):
- Individual space for everyone. (the space does not necessarily need a door)
- Individual computers for everyone – everyone has their own setup they like to use.
- Room for two or three chairs around each work station, as well as room for several standing people.
- Natural light – I really can’t stress this enough. I’d want to work outside if there wasn’t so much glare
- Collaboration space (meeting rooms, white boards, floor space etc) – this applies especially to private offices. There should be lots of space directly adjacent to individual’s work space.
- No more than 9 or 10 people in an area and a developer shouldn’t be able to see more than 4 or 5 other people they are not currently working with.
- Normal ceiling level – i.e. not a 30′ cavern
I’m sure many people will disagree with me as usual. While I do have elements of both extreme approaches in my list, I have a hard time believing that the majority of developers actually prefer one of the two extreme office approaches. Like many issues, I think the “best” solution lies somewhere between the extremes.