My dictionary defines the term gentrify as the process of renovating property in order to improve one's way of life. I work in Chicago and watch this process on a daily basis as the final vestiges of one of the larger low-income housing complexes disappears with earlier buildings having been replaced with quaint brownstones. Just how much this has improved some of the former residents life is questionable but one can't argue that the former living conditions were not ideal for building healthy community. As a software developer, watching this reconfiguration of space makes me think of much smaller scale changes that need to occur in many corporate software development environments.
Most corporations use the office cubicle to provide a controlled and quiet working environment for their knowledge workers. After all, the company has made a significant investment in all that brain power and wants them in a distraction free environment so they can work at peak performance. But software developers do not peak when working in isolation. The research is clear that software developers are more productive when pair programming. So why not create a physical environment that encourages them to do so?
There are two commonly heard arguments against removing the cube walls and creating a shared work environment. The first is the fear of taking away something from employees, in this case, their cube. The second is that an open environment would be too distracting and developers won't be able to concentrate on their work. Having worked in multiple of each environments and helping to facilitate the transition to shared spaces, I can say that these fears are "mostly" unfounded.
I said "mostly" unfounded because there is a good chance that you will lose a developer or two. Why? Because an open work area generates inherent pressure to produce. It now becomes uncomfortable for those developers that have quit caring about their craft and are simply collecting a paycheck. Over time, no matter how strong the friendships, the team will grow weary of their lack of discipline and commitment, making it difficult for those developers to continue on as before.
Combatting Noise with the Private OfficeIf you spend any time researching the ideal work space for developers you will find respected resources touting the move from cubicles to private offices. Most of these are based on research that noise decreases productivity. I won't argue this when looking at the impact on productivity for the solo developer. This doesn't apply to developers who spend their time pairing, which is one of the main motivations of the collocated space.
The main reason for creating a colocated work space is to increase productivity. By some measurements (see references), simply moving a small team to an open space can improve productivity by 100% . While each team's mileage may vary, even a much smaller increase in productivity should quickly recover any costs incurred in the process and will achieve our goal of increasing velocity.
Another reason high up on the list for renovating your work space is to encourage and facilitate pair programming and with pairing comes a higher degree of focus. Those mental lapses that would send us off to check personal e-mail or make a quick call are no longer easy to act on when another individual is depending on your immediate involvement.
When developers are working alone, they are highly susceptible to external interruptions from business users who happen by or even their own team members who are between tasks. When developers are actively engaged in a pairing session, those social visits become more obviously intrusive.
While not intuitive, a big benefit of an open space is the increased communication that occurs on the team. With all of the conversations going on at the same time, you would think no one would be able to concentrate, but the reality is that we are extremely adept at filtering our environment. I'm always pleasantly surprised when I'm focused on a problem with my pair and a word or two spoken by a different pair nearby will trigger some synapse that allows me to surface from my current train of thought, provide them direction, and then re-enter my work with the help of my pair (see "Cocktail Party Effect").
The open work area makes it much easier to determine the health of the team. Now, every member can see both the good and bad practices that occur as part of the team. Are developers pairing? Jumping on stories as soon as they are available? Or are they dragging their feet and spending time alone working on lower priority tasks that interest them? Increasing the visibility of current activities helps keep the team on track at all times.
Research says that knowledge workers are most productive when working about 35 hours a week, yet most of us are still working the standard 40 or more hours that were created as the norm for industrial workers. An open work environment can stimulate creativity in a social environment which helps us keep work flowing when we begin to stretch our limits. In the end, it can ultimately make returning to work each day something we enjoy.
There are a few logistics to keep in mind when setting up a shared space for your development team. The following the guidelines will help avoid unexpected roadblocks on the way to maximizing productivty.
One hard rule I have seen for how much space to allocate was 50 sq. feet per developer. In addition to the developer work stations, this included private meeting space and storage for personal belongings and team documentation, etc... A "rule of thumb" approach is to provide each developer with a large work table, roughly 5' by 3', and set the tables back-to-back in one or two rows. Keep in mind that you want to make it easy for developers to sit alongside each other and code. A mistake is to build a space out with just enough room to comfortably sit each developer. This will cause scenarios where pairs cannot easily sit next to each other to access a shared keyboard or monitor.
Place one large monitor per table and give the developers laptops to work from. The goal is to make it easy for a developer to pick up his work and move to a new pair. Yes, pairing typically means working on the same box but the flexibility that comes with being able to quickly reconfigure where members are sitting can enhance productivity.
Setup wireless internet access and provide wireless keyboards and mice. Again, the idea is to remove clutter and make it easy for team members to quickly reconfigure to work with each other. Anything that inhibits developers easily working together should be eliminated.
With all of this talk of open spaces, there is a need for walls. Moving your team to a large room with outer walls helps separate them from distractions not related to their work. More importantly, it provides them with space to hang information radiators such as burn up/down charts, action item lists, and/or design diagrams, all of which help keep teams focused.