First tech job: started out as cubicle work. Got in at 9, hour break for lunch with coworkers, then completely focused with extremely few social interactions for the rest of the day.
On occasion, I would meet 1-on-1 with a coworker in their cube for an extended period of time to discuss some large technical design I wanted to sort out.
A year into this, the company redid the building into open-office space (but where everyone still had their own L-shaped desks and they were only packed maybe 20% more densely than the cubes. Now you never talk with someone at their desk for more than a minute, because while you talk you’re distracting everyone. So even less collaboration.
Second tech job: this one has always been open office. It’s packed much tighter: I have a person four feet to my left and four feet to my right, more in front and more in back. At any moment, one of them might just pipe up a relatively simple question to me (“where do I look in the codebase to find X functionality”): something he could find out on his own, but asking me saves 5-10 minutes. The 5 people around me are on my team. The people behind me are on a different team. There’s conversation across the teams at least hourly, an even split between jokes/banter and technical talk. If you overhear a conversation, you’re totally welcome to insert yourself into it, and doing so is the norm.
In this open office, collaboration is more of a real thing. If someone left feedback on your code change, half the time the discussion on how specifically to address it is done in person without leaving your desk. I’m able to identify topics that are raised frequently and recognize where the real organizational issues are, because it’s all discussed right there in the open. And I’m exposed to a diverse range of ideas and solutions just by choosing to listen. A few times a week I might even pair program with one of my teammates and learn something (vim commands I didn’t know about, a new way to use one of our in-house tools, or just practice).
The difference between these two is stunning. And jarring: I’ve gone about a year now without reaching a state of flow at work. I’m not even sure if half the people I work with have ever experienced it in their life (while programming). But I’m learning to adapt. I tend to work in short bursts of productivity throughout the day which leaves me with more energy at the end than being heads down at my desk for 8 hours. The code I write is far more reliable than what I used to write —— undoubtedly because of the collaboration.
Not all offices of a particular style are equal. I think it’s silly to label open offices as either universally good or universally evil: the ideal work environment depends on the execution, the context of the work, and the individual.