Some of these factors are:
* Gathering the team in one place and ideally at the same time. Standup meetings do this, as well as catered breakfasts and lunches.
* Open spaces that provide ready access to other folks, engineers, designers, product owners. It's amazing how high the hurdle of having to get up and open a door can be and how amazing the cost of inferior decisions made by coders is when asking someone requires overcoming hurdles. Remember that the desired behavior must also be the easiest behavior.
* No employee-specific workstations. The easier it is to move around and the more common the computer setup the better collaboration can ensue.
* Subdued noise levels. This can be accomplished through white noise generators, Dj Tiesto, sound swallowing wall fabrics and carpets, etc.
* Systems that capture project data in structured ways, minimizing the need and role of email.
* Separate gathering spaces for socializing, ping pong, lunches, meetings, phone calls to not disturb the main work area.
* A prevailing practice of pair programming and TDD.
Interestingly, some of the most successful development shops like Pivotal Labs and Hashrocket do exactly that.