(lightly edited copy of my usual plea for evidence on this topic ;-)
Pretty much all the evidence (rather than anecdote) I can find shows that co-located teams in a single team room environment are the most productive - all other things being equal.
(And I'm saying this as somebody who spends a lot of their time working from home, and talking to other folk over Skype, etc. There are reasons for telecommuting - personal preference, getting access to people who cannot co-locate, etc. But for business productivity I'm not seeing much, if any, evidence).
I am not saying:
* That working alone in an office is bad / will cause projects to fail
* Telecommuting is bad (I do it - I like it)
* Telecommuting projects will fail (D'oh - of course not)
* You shouldn't telecommute (of course you should if you want to - but bear in mind that the business may have good reasons to disagree with that decision)
* That telecommuting makes you individually less productive (I'm personally unsure about this. I feel more productive when working by myself, but I know that personal perceptions of productivity can be false. Measuring personal vs team/company productivity becomes hard in anything less than the short term)
* That co-location is always the best solution (it isn't - other factors like team location and skills come into play)
What I am saying is that there is a lot of research showing that co-located teams in team-room like settings are much more productive. This runs counter to many developers preferences (mine too ;-) so it tends to get ignored.
So much more productive that solutions like 'Let's fly everybody to the same place and pay their room and board for a month' can be cost effective.
Here are some references to the research (If anybody has any research that contradicts this I'd love to hear about it. Especially if it talks about actual measured metrics of productivity - rather that self-reported 'I felt just as productive at home' ones.)
----
"It doesn't take much distance before a team feels the negative effects of distribution - the effectiveness of collaboration degrades rapidly with physical distance. People located closer in a building are more likely to collaborate (Kraut, Egido & Galegher 1990). Even at short distances, 3 feet vs. 20 feet, there is an effect (Sensenig & Reed 1972). A distance of 100 feet may be no better than several miles (Allen 1977). A field study of radically collocated software development teams,[...], showed significantly higher productivity and satisfaction than industry benchmarks and past projects within the firm (Teasley et al., 2002). Another field study compared interruptions in paired, radically-collocated and traditional, cube-dwelling software development teams, and found that in the former interruptions were greater in number but shorter in duration and more on-task (Chong and Siino 2006). Close proximity improves productivity in all cases."
-- http://conway.isri.cmu.edu/~jdh/VRC-2008
"Based on the empirical evidence, we have constructed a model of how remote communication and knowledge management, cultural diversity and time differences negatively impact requirements gathering, negotiations and specifications. Findings reveal that aspects such as a lack of a common understanding of requirements, together with a reduced awareness of a working local context, a trust level and an ability to share work artefacts significantly challenge the effective collaboration of remote stakeholders in negotiating a set of requirements that satisfies geographically distributed customers"
-- http://link.springer.com/article/10.1007%2Fs00766-003-0173-1
"Our results show that, compared to same-site work, cross-site work takes much longer and requires more people for work of equal size and complexity. We also report a strong relationship between delay in cross-site work and the degree to which remote colleagues are perceived to help out when workloads are heavy"
-- http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?reload=true...
"Our findings reveal that: software developers have different types of coordination needs; coordination across sites is more challenging than within a site; team knowledge helps members coordinate, but more so when they are separated by geographic distance; and the effect of different types of team knowledge on coordination effectiveness differs between co-located and geographically dispersed collaborators."
-- http://kraut.hciresearch.org/sites/kraut.hciresearch.org/fil...
"Our study of six teams that experienced radical collocation showed that in this setting they produced remarkable productivity improvements. Although the teammates were not looking forward to working in close quarters, over time they realized the benefits of having people at hand, both for coordination, problem solving and learning.Teams in these warrooms showed a doubling of productivity" -- http://possibility.com/Misc/p339-teasley.pdf
"Despite the positive impact of emerging communication technologies on scientific research, our results provide striking evidence for the role of physical proximity as a predictor of the impact of collaborations." -- http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjourna...
"Groups with high common ground and loosely coupled work, with readiness both for collaboration and collaboration technology, have a chance at succeeding with remote work. Deviations from each of these create strain on the relationships among teammates and require changes in the work or processes of collaboration to succeed. Often they do not succeed because distance still matters" -- http://dl.acm.org/citation.cfm?id=1463019
co-located teams in team-room like settings are much more productive
Whenever I've seen this done, the very best employees leave. I am a firm believer that you can train yourself to hop in and out of a reasonable facsimile to the "zone" in much less than 20-30 minutes (I do it all the time)[1]; but the level of distraction of the warroom type environment massively favors your more extroverted engineers. My experience has been the engineers I really want to keep, the ones who solve the really hard problems, are much less likely to be in that group.
In short, you may double your productivity for building that CRUD application, but when you have to solve that really hard problem, you may find you don't even have an engineer who is capable.
1. There is a level of concentration, the "real zone" below it that most development doesn't require. However, when it does, the interruptions become catastrophic.
It depends entirely on the kind of work being done.
If you've got a super-top engineer who can solve the hard problems, then they're probably working on something of their own, and can be off in their own room / at home / whatever.
But in my experience, that kind of "hard", mentally intense, non-collaborative work makes up only a tiny, tiny fraction of commercial software development (although it contributes a great deal to the value). So it's not something to base general development practices around; it's the exception.
As you say -- "double your productivity for building that CRUD application" -- that's exactly the point, that's what most companies need, and why most companies aren't interest in remote working.
When they suddenly need a top-level engineer to solve a hard problem, they hire one who consults for three months, works remotely, and visits once or twice.
When they suddenly need a top-level engineer to solve a hard problem, they hire one who consults for three months, works remotely, and visits once or twice.
You've essentially described every job I've had since college. That's exactly my experience of how companies actually work in practice.
I'm constantly learning, and seeing when things become "possible" with the current state of knowledge. Whenever I see that, on my own, I'll sketch out how the solution would work.
Then, I look around for companies that need a problem I already have a solution for solved, and I pitch my solution to them. Sometimes, I'll take jobs to solve problems I haven't considered before, but that's rarer.
If they like my solution, I set up a contract to implement it for them.
I'd say about 50% of the time I pitch a pre-existing solution, I get work. What's great is I'm essentially picking my own work and I get paid well (because the problems are hard).
The downside is you pretty much always have to be coming up with new solutions to things, and stay very current on technology.
I'm generally into something long before the "early adopters" get there, and I'm gone by the time it hits the mainstream. For example, I was working on a Google Spanner-like database while Google was doing the same.
At the time, no-one thought something like that was possible (outside of Google -- and they didn't tell anyone). I implemented different parts of the solution with three different clients over a two year period, none of whom hired me to create something like Google Spanner, but all of whom needed one part of the whole package solved.
So, in the best interview tradition, what do you read to keep up to date with the state of the art?
I have a couple of times found myself inventing solutions to problems I had in the business, only to see them appear as cutting edge open source at the same or a little later (ie Python deployment tools)
I have always assumed one needs to be working in an area, pushing hard and then finding that "what no-one has an answer to this!?" moment.
I would have trouble believing I could find a solution at the cutting edge, and find the people who needed it, without being knee-deep myself.
As you suspected, I'm developing solutions in the areas I work in specifically (stuff I'm "knee-deep" in).
I read the usual CS papers, plus lots of PhDs thesis. I follow the references in the bibliographies like crazy, and I also look up the writer's on the 'Net and see what other stuff they've done/written.
It feels like detective work, actually: the most-cited papers are frequently not the best. There's tons of researchers working in obscurity but who nevertheless have useful results.
I see my role as taking advances from research and bringing them into practical use.
It feels like detective work, actually: the most-cited papers are frequently not the best. There's tons of researchers working in obscurity but who nevertheless have useful results.
What are some examples of the best research that is obscure?
Sven Havemann's PhD on "Generative Mesh Modelling"[0] is brilliant. At this point, it could be implemented on top of Blender 3Ds newest modelling kernel.
In general, stack languages are great for graphics in both 2 dimensions (PostScript) and 3 dimensions (GML)[1].
If you have experience solving hard problems that helps. I had the good fortune of doing so in graduate school. That lead to a job solving another totally unrelated hard problem, with a technology stack totally unrelated to my graduate work. Once I had two gigs like that, the only people who responded to my resume's were people looking for someone to work with immature technology, or had a very hard problem to solve.
Also once you decide that you want to have a professional career jumping on technology grenades, do not work as an employee. I made that mistake. The nature of grenade jumping is that your are asked to solve a hard problem that needs to be solved in a short time, if you are an employee this amounts to massive hours, (70-90 hour work weeks), of unpaid overtime. Work as a contractor and be sure to bill for every hour. Or be sure to get a very healthy option grant if it is a promising start up. My life has been much happier once I started doing that.
Also be sure to work out, this sort of work takes a severe toll on your health if you do it for 20-30 years.
I've been in more or less the same situation, but for longer periods of time.
I'm curious given your experience. My biggest issue is that I don't know what a 'hard problem' is, I know what comes naturally to me, and what takes me some time to grok, but my experience is that those problems that come natural to me seem to be extremely obtuse to others.
So what types of problems do you solve that allow you to market yourself in such a manor?
I assume you have NDA type structures in place so I expect very general responses.
Most importantly, not every project (nor startup, nor business) needs "the very best" engineers. Not every startup is changing the world, and even among the ones that are I'm sure you can pick out a few that aren't solving massively complex technical challenges that will be discussed in lecture halls for decades. The majority of good startups are just making money (sometimes not even that) until they get acquired.
Secondly, you're assuming that the best developers are going to be more introverted than the developer culture/profession as a whole, which I don't think is accurate.
> Most importantly, not every project (nor startup, nor business) needs "the very best" engineers.
This is highly underrated wisdom.
If you focus on always hiring "Rockstar developers," you'll find yourself in a miserable situation of competition and egotistical conflict. Hire your team, not your developers. Get your team working like clockwork with good systems and good relationships, and your company will be rockstar with whatever people you throw at it. Look at github, stripe, twitter, facebook—you think they only hire the absolute best developers? No, they have a top 2% just like you will—your goal should be to increase the competence of your entire company, not just ignorantly hire the best and fire the worst and hope for the best.
Spot on.
You're right about the other assumptions too (though the parent may not have been that serious about them). IMHO stereotyping introverts or extroverts as being better or worse at certain tasks is a huge --ism to avoid, especially in our field. I see 'extrovertists' and 'introvertists' battle it out all the time with their propaganda and ignorant beliefs about people, and no one wins.
It's far better and more productive to be a humanist and find a good balance. Both extroverts and introverts can be valuable to your team; both extroverts and introverts can be great programmers and workers. You should strive to hire a mix, or stop using it as a metric and naturally get a mix, since these traits like many others generally fall on a normal distribution.
Don't trust your assumptions about yourself, and don't apply them to others. They're probably wrong.
Totally agree - imagine you could hire Linux Torvalds. He is a great programmer but his best work was sending emails to others for 12 years.
This leads to an interesting thought - if you hired Linus and he started spending all his time emailing sarcastic notes to the other developers, how quickly would he get fired for "not focusing on developing code"?
Perhaps the key for CEOs is not to grow culture but to hire people who will grow it for you. You dont get to choose the culture, or even direct it. The funny Finnish bloke will.
You just pay him.
... and also he created the kernel, and a way to manage its development better.
I don't see the problem. People who make cool stuff and solve problems in their spare time are the ones you want working for you. Even if they waste time sometimes going off on tangents, it's probably honing their skills and improving something relevant to your company or their own work abilities. No problem, you want that. Trust them to do the right thing.
Exactly. This is where having good engineering leadership can come in. A "mediocre"* developer can often be coaxed into producing great product with a little support from things like paired programing and code reviews. You'll probably increase his/her value and abilities in the process.
So you need your lead to be awesome. But the rest can just be good people who know how to code.
* this would be someone who may not fully grasp all the concepts and sometimes writes bad code, but is open to learn and listen. There are developers who write bad code and are arrogant/confrontational about their abilities. Those should be identified and fired as quickly as possible. They will sink your ship.
The problem here is that the awesome lead will not stay long in a company where all other people are mediocre. Awesome people want to work with other awesome people. There should be a critical mass of them to keep them from leaving.
This is relatively true, but at a small company (< 5 programmers) some people do like the role of "lead" and will stay with it as long as the people they work with aren't total idiots.
> Secondly, you're assuming that the best developers are going to be more introverted than the developer culture/profession as a whole, which I don't think is accurate.
I don't think that's the assumption at all. My personal experience is, unless you happen to be located where one of the "best" developers is, they simply won't move. So you have your choice of them working remotely, being lucky, or not hiring them.
> Whenever I've seen this done, the very best employees leave.
I took this to mean (a) be relative to the office specifically, not the industry generally, and (b) that those very best will get sick of the required face time, quit, and get a better job (the insinuation being that that better job will likely be majority or entirely telecommuting. I may have misunderstood the intent as I commented pretty much immediately after reading it.
I believe the point was that people detest that working environment, and those with a choice will pull the ripcord, whereas people who can't get another job will stay. I've seen that happen.
I just generalized it to my experience, which is less about introvert/extravert and more about "bad conditions force good people out/prevent good people from being hired"
> ... favors your more extroverted engineers. My experience has been the engineers I really want to keep, the ones who solve the really hard problems, are much less likely to be in that group.
I, too, read "group" as "extroverted engineers," and I don't really see alternative readings.
I don't think extroverted helps in a disruptive team war room. Most "collaboration" is someone interrupting to ask a question they could have asked in email and waited for an answer.
This sort of thing is the thing I'd love to see more evidence about.
Getting interrupted kills my flow. I'm less productive as I get back into flow (although I have techniques now that let me get into flow much quicker - but that's a separate post).
However - is that drop in productivity outweighed by the increase in productivity of the interuptee not having to wait / switch tasks / fumble on and make a mistake / build the wrong thing / etc.
Times when I've been put in a war room were absolutely infuriating for me, but the tighter loops in bringing people in on what you're doing got the "why not just do X" questions answered much faster. As much as I disliked the interruption, I'm more thankful for all the code that didn't get written because we talked it over first.
If I were to estimate, this probably doubled efficacy of our junior devs while halving the (direct) productivity of senior folks. In my cases, it was immediately apparent that we came out ahead: the former outnumbered the latter by several times.
This pretty much matches my experiences. I went from a sceptic to a believer in co-located team rooms after seeing this a few times.
Did you also see the incidence of "bad" interruptions drop as the team got more experienced? That's what I've seen pretty much every time I've worked in this sort of environment.
> If I were to estimate, this probably doubled efficacy of our junior devs while halving the (direct) productivity of senior folks. In my cases, it was immediately apparent that we came out ahead: the former outnumbered the latter by several times.
I really like this. I consider myself an intermediate developer, and can't even count the times a 5-10 minute conversation would have saved me an entire day - or week! - of wasted effort. I think this is easily overlooked because its not totally obvious that interrupting a highly productive, highly skilled developer could result in higher team productivity.
Generally I think about flow in terms of setting up intermittent reward cycles where I need to put in a little bit of effort, but not too much, to get the reward.
So I think about ways I get get back into those cycles quickly. To do that I try and cut up my work into the right size chunks, have a plan, and leave work with an "easy win" so I can get back into the loop again quickly.
Some examples. Hopefully I'm not descending too far into life-hacker wankery here ;-)
* I TDD code, and always try and leave myself with a failing test. If I'm interrupted and don't have a failing test I will deliberately break something or hit undo enough times to get a fail so I have an easy win when I get back.
* I don't track time on task. I do block out time for tasks - and track non-relevant interruptions during that time and see if there are ways to stop 'em happening.
* I run a personal kanban board for stuff so I can keep that continual ping of reward happening during the day.
* I breakdown tasks as they come in so they I can get little reward pings on a regular basis.
* When I have real problems getting into flow I give myself automatic rewards (do 20m on X then you can do 5m of fun on Y). Similar to http://en.wikipedia.org/wiki/Pomodoro_Technique. Once I get started the normal task-achievements often mean I don't actually end up doing Y - it's just a personal hack to get me started.
Basically - fake the reward cycle until the real one takes hold.
The reward technique never works with me. Because, to me, there is not 5m doing something fun. I cannot have something really fun in 5m. So I rather finish all the things in limit time and enjoy the rest of the day, it's the biggest motivation.
My only work solution to get back to the flow quickly is leaving something undone. Depend on which task, it will have different ways.
Btw, I really love the idea of leaving failing test :D
Your use of "the really hard problems" is revealing. Those of us who went to engineering school know exactly what you mean by that, because it's the way we describe the most challenging exam questions, projects, or open questions in the field. We can usually figure out those really hard problems if we put our minds to it.
But for most tech startups, I'm not sure "the really hard problems" are the technical ones, because we are good at technical problems. Perhaps the really hard problems are how to get early traction, how to build something people love, and how to make the business profitable. Some of those hard problems might be easier to solve as a face-to-face team.
I think it depends on how you run the war room. The way I prefer it is no off-topic conversation, no distractions, inside voices, and a lot of respect for your co-workers. Also, you need to provide convenient nearby meeting and lounge spaces so that people who want to do those things can easily do it elsewhere. I think that's a great environment for focus.
It takes some commitment to make it happen. Without everybody committing to a low-distraction workplace, volume is definitely the default. But I think the benefits of a team environment make it worth the effort.
When it comes down to research vs. your subjective experience influenced by your personal preference and opinion, why would I put more stock in the later?
I don't think that's being fair to the parent post's point. They're implying that the research, by focussing only on a productivity metric, may miss out on job satisfaction issues that cause top performers to leave. They're not contradicting the research, just pointing out that the issue is complex.
If that's the point, then I'll agree that the issues is indeed complex. This all highlights the need for more research in an age of better tools for videoconferencing and cloud project/file management.
As a management major (do regret) I was taught that it only works when there are clear definitions and metrics for success, especially routine tasks that require less creativity. I don't see that backed well by modern research, and I wish we had better research.
I also feel the anger people (especially programmers, it seems) feel about not being able to work remotely is misplaced. If it upsets you that they want people to work face-to-face, you're probably not a good fit for the company culture that requires it anyway.
Then how do you explain the many happy teams I see working in exactly that environment, and how do you explain the research?
(Part of the confusion may be that "war room" and "open plan" are not synonyms. The former only includes people actively working on the project. This is not the environment where you have the sales guy yapping on the phone.)
I've worked in the "war-room" style environment, it's okay as long as it's only for work, and not play, because when you have the "game-room" the "work-env" in the same place, productivity goes way way down. It's hard to work when you see your co-workers playing table tennis or foosball, especially at how loud foosball is or tennis is when they laugh etc. I'm not against these things, I just think that companies might consider spending a little more money on an office or atleast put their game-rooms in separate areas, and require a library policy in open-warroom offices.
Introvert programmer here. I find the opposite to be true. In an office situation, I'm much less likely to intrude on someone I need to communicate with, and they are much less likely to intrude on me. In an open environment, I get to overhear conversations that then demand my input. Yes, on occasion, I have been interrupted while attempting to formulate a very complex solution in my head, and yes this was frustrating. However, the benefit of all those overheard misconceptions and subsequent explanations vastly outweighed them.
That is why I firmly believe that given any team, it is best to have them collocated in a large but private room.
However, we are not talking here about the optimal location for any given group of programmers. We are talking about finding an optimal group of programmers without having to exclude those outside a 20 mile radius of your geographical location.
I've seen the opposite. When the team is that close it is difficult to hide your ineptitude. Team members that don't contribute get outed pretty quickly and tend to leave. This is generally viewed positively by those that are core contributors.
Sometimes solving the hard problem means jumping into a teamroom in front of a whiteboard and doing some serious brainstorming / design. That is the one thing that is very hard to do effectively over say skype. Often with remote developers this type of problem is solved by a single person without the input of others. Resulting in a less then optimal solution that only one person is knowledgeable in.
As far as really getting into the "zone". What I do is put my headphones on, pipe some white-noise in and in a minute or two it's no different then working by myself in my home office.
I think the hardest part of product development is deciding which hard problem to solve. A team can often be better than a single very smart person at doing that, by virtue of bringing different perspectives to the conversation.
IMO the best working environment places the team in conversational proximity, but provides an option for individuals to find isolation (either in a dedicated room or at home) when it is necessary to solve a hard "real zone" type problem.
The most productive team I worked with, and one of the most senior teams within an organization of several tens of thousands with a very significant development staff, was approximately 50% remote, depending upon how one measured and when one included some remote developers and operations people (also very senior) who were intermittently present depending upon project needs. (Some of the operations people were often on site but located far enough away that much communication was as if they were remote.)
And its trend was increasingly remote. Members sought this once and as they could, because it increased their effectiveness so much. (And lowered costs and total time demands -- e.g. commuting -- in positions that were already delivering far more than 40 hours / week.)
This team outperformed the other teams by a fair margin. And some of the truly remote members were among the most efficient and effective I've seen.
Throughout my career, I've seen very little evidence that physical presence -- colocation -- makes a significant positive contribution in software development. I am biased, I will say, in that I both prefer and need a quiet work environment. I feel validated or "justified" in this need, for me at least, in that I've consistently been one of the most effective employees in the organizations within which I've worked. (And I've had numerous people in all sorts of roles tell me this.)
I don't mind colocation, if quiet offices are provided. However, cubes or worse are largely de rigueur, these days, and even in such open space environments, I've witnessed not just the destructive nature of noise and interruptions, but depending upon the staff member enormous amounts of time wasted on "socializing" of various (very off-topic and sometimes inane) sorts. Doubly bad in that context, in that it invariably distracts surrounding employees who are trying to work. And it builds a conflict between not betraying teammates and one's own need to have them quiet down or take it elsewhere.
As for who tends to "thrive" in such environments? Those who "multi-task", juggling lots of things shallowly to the point of making many mistakes and oversights. Those who are constantly "interacting", meaning most often that they are interrupting someone else to solicit knowledge that they should have or be able to look up themselves. Those who use the concept of "team" to disperse and deflect individual responsibility.
Granted, I and the people I've described may be a minority. But in my observation and perhaps in staid corporate environments, those who benefit from colocation tend to be those who need to be herded and hand-held. Those who want and are really able to get shit down, don't mind face to face but are greatly frustrated with pointless and distracting face to face.
(As an example of this latter, we got many of our meetings down to 15 to 30 minutes, when they were necessary. People knew and held themselves responsible for knowing what was up, and the meeting could quickly focus on problem solving and setting a specific course.)
Granted, I and the people I've described may be a minority. But in my observation and perhaps in staid corporate environments, those who benefit from colocation tend to be those who need to be herded and hand-held. Those who want and are really able to get shit down, don't mind face to face but are greatly frustrated with pointless and distracting face to face.
I too don't know what the numbers are like. I've seen great teams do great things remotely. I've seen great teams do great things co-located. Some of the very best teams I've seen have been co-located. I've also seen some distributed teams fail miserably. I've seen teams co-locate, try remote working, found it didn't work, and co-locate again. And so on.
I wish I knew the relative spread of how these things work out for people in different contexts and on different projects. I just find it suspicious that remote work is often presented as all upside since:
a) In my experience things are rarely all upside - I always start looking for the downside ;-)
b) For whatever reasons a chunk of the dev world tends to be a tad asocial. I know I can be like that. So when something comes up that supports that tendency I wonder if I may be overlooking problems because I would like something to be true.
I think that some in the development world may be less indiscriminately social.
I'm plenty social. And I'm not a snob -- I can talk with most anyone, about genuine interests (interests on either party's part, not just my own). Or just sit around drawing spirals in the pancake syrup, for a while.
I don't particularly enjoy discussing the latest Hollywood movies and actors ad nauseum, whose existence and which conversation seems to serve significantly to reinforce established, simplistic stereotypes. Especially when the conversation ranges in exactly that direction.
I don't enjoy conversations that "get personal", looking for ways to pick apart those not present (behind their back). Or that look for ways to pick apart those present, in active, emotionally manipulative pursuit of a pecking order.
On the team I described, we socialized, although people were on average fairly reserved. A good part of that socialization reflected people actually paying attention to and remembering what each other were interested in and doing, and what was going on in their lives.
Again, this is just an opinion, but I think some of the "anti-social" attributed to "nerds" and "geeks" is rather an active dis-interest in much of the lowest common denominator of what we consider "social".
(Some, not all. I've met plenty of intellectual assholes, too.)
Another, personal example: I rather enjoy playing sports. I couldn't care less about watching paid professionals doing it. (This does vary somewhat by sport and event. Also, if anything, I tend to find amateur games more interesting; they bear a closer relationship to my life than the over-produced, over-medicated thing that professional sports has become. Upon reflection, maybe this is a somewhat arrogant or avoidant attitude on my part; I received a lot of abuse as a kid for not being "sports-wise" -- something my father wasn't and never passed on to me.)
I've spend too much time and energy on self-doubt, as it is. A lot of places and people have told me that I'm the one who needs to change. They love my work, and how do I do that? But, you know, "We all work in cubes."
If you are outperforming your peers (and, not infrequently, management) and otherwise succeeding, then, well, who has the problem?
The following may take the interpretation a bit far, but: The bully will always insist that it's "your problem".
Not saying that you are wrong, but none of the studies you quote was done in the last five years, and most of them are actually more than a decade old.
The technologies we use to communicate evolve fast, and I would bet money on the fact that (probably because of mindset evolution and tooling) developers are now more efficient when working remotely than they were ten years ago.
Moreover, as we are on HN, we are not necessarily talking about average developers, but more about the ones that are used to Git, IRC, Trello, and other tools which make remote work more doable.
Startup environments are not average, and this must be why companies like Github and 37signals can be successful while having remote workers.
Not saying that you are wrong, but none of the studies you quote was done in the last five years, and most of them are actually more than a decade old.
Actually - several of them are. For example:
"Another field study compared interruptions in paired, radically-collocated and traditional, cube-dwelling software development teams, and found that in the former interruptions were greater in number but shorter in duration and more on-task (Chong and Siino 2006)"
This is one of the things I find fascinating. You see the same kind of thing over thirty years as technology changes radically. This makes me think that there's something quite interesting happening in meat-space.
Startup environments are not average, and this must be why companies like Github and 37signals can be successful while having remote workers.
Just to repeat. I am not saying that you cannot be successful being distributed. There are lots of good and sane reasons to be distributed.
I'm saying that there is a bunch of evidence that being co-located is more effective.
Software changes in 7 years - people don't. [I mean the average person; individuals age and get more experienced, but new ones come in.]
Today's homo sapiens brains function the same way as in 2006. Productivity of mental workers responds to disruptions in the same way as in 2006.
A large majority of programmers and other people working now in IT are the very same people that were analyzed in 2006.
They have, but if you look at it in terms of fundamental change, then of course not.
For example, a cell phone from today isn't fundamentally different than a cell phone from a decade ago. They're both computers and can be used to make phone calls. But with the cellphone of today, I can have a virtual meeting with anyone from anywhere, face-to-face. That alone is a huge improvement for distributed teams.
A lot has changed in the last few years-- with modern tools (Skype, Google Hangouts, IRC, GotoMeeting), it is possible to not only almost entirely replicate being co-located, but to even enhance productivity by spinning out ad-hoc co-located teams to solve individual problems.
Need to have a concentrated task force from 5 various departments? No problem, it's a click away-- no need to book a meeting room, take all your gear (disrupting your workspace) and try to collaborate away from your desk in a mutual location.
Currently I sit beside people working that I previously worked on the same project with, but have now slightly diverged from. Trying to come up with a perfectly co-located office plan wouldn't work, because some number of people couldn't help but be misplaced. Not to mention we'd have to do it every few days!
A lot has changed in the last few years-- with modern tools (Skype, Google Hangouts, IRC, GotoMeeting), it is possible to not only almost entirely replicate being co-located, but to even enhance productivity by spinning out ad-hoc co-located teams to solve individual problems.
The evidence from folk who study this seems to differ from this.
The world is full of anecdotes about how much better things are with the newer technologies - yet I can very little evidence that this is true. I know I'm really good at fooling myself about my own productivity. I don't imagine I'm unique there ;-)
And my personal anecdotal experiences over the years (including recent ones ;-) is that you can really ramp up productivity by getting everybody on a distributed team in one place. Even when everybody is normally skyping / IMing / whatever.
This really is the most important facet to this discussion. Virtually all arguments against remote work seem as if they come from the archaic past. If people being physically separated actually hurts communications, you are doing communications wrong.
Not to mention that most productivity studies are bunk.
The real reason many so many managers resist remote work is because, effectively, they want a fiefdom, and the exercise is often about empire building. An empire of a bunch of Google Talk connections isn't as impressive as a bunch of huddled seat warmers.
Is it churlish to suggest that the most clear counter-example
to "all in same room" is http://git.kernel.org/
However with a cursory glance over the references, they seem heavily biased towards a "crunch time, in a war-room" scenario.
This can lead to large productivity gains for reasons unconnected with physical location
(Clear short term goals, only the best get invited into the war-room, daily distractions and resposibilites are lifted, a fostering of elitism compared to the outsiders)
However I cannot see a long term study on this (I may be wrong).
My "gut feeling" is that regular funded sprint meetings plus remote working is an area of research that may well yield best long term trends.
"Is it churlish to suggest that the most clear counter-example to "all in same room" is http://git.kernel.org/ "
Not churlish - maybe misguided ;-) I'm really not trying to suggest that distributed work is bad / evil / fails. Just that - all things being equal - colocated teams win. That there is a substantial body of evidence that not being colocated carries a substantial productivity hit.
My "gut feeling" is that regular funded sprint meetings plus remote working is an area of research that may well yield best long term trends.
But wheres the proof :-)
Indeed! It's the complete absence of "distributed teams do X and Y better" research that I find fascinating. Unless it's hiding in a corner that I've not been able to find.
I'd be curious to know if any of the quoted research looked at open source projects. In addition, I'd be curious to know if it included organizations such as GitHub and 37signals, especially given how old it is.
Very few pieces of the kernel were actually developed by teams. One guy writes this subsystem, another writes a driver. The interactions between components are well established. Approximately 0% of the linux kernel consists of interdependent components simultaneously developed by different people.
I think he's implying the kernel as a whole. Clearly, the whole kernel is developed by a very distributed "team".
That said, you get right to the heart of the matter: the interactions between kernel components are well established. Sufficiently so that one person can work independently on a subsystem and another on a driver.
In my own personal experience, designing component interfaces is the most important aspect of building a system, especially when you are working with a team. Very often, I have found that the "all in one room" development model is implemented because the team lacks the ability to define those interfaces first. They are very fluid and so it's necessary to be able to lean back and yell at the guy working on the driver or subsystem and say "yo, I need this additional parameter". On a distributed team you need to write that in an email and that extra effort is often seen (rightly or wrongly) as a major bottleneck.
Where I have seen companies fail to work successfully with geographically distributed teams, it has generally been because their "all in one room" culture has allowed them to establish an adequate process/culture around designing quality component interfaces in an efficient manner. This inability to define quality "contracts" is typically what leads to slipped projects and missed expectation. Often times, it is what plagues teams that are co-located.
If you can do a good job at defining system components and their interfaces, doing the development independently and distributed is easy. You can write test harnesses and stubs around those APIs. The question is: can you work on that design process in a distributed manner as well?
In my experience, it doesn't matter, local or remote. Designing component interfaces is hard work and hard to get right. But it is essential.
In my own personal experience, designing component interfaces is the most important aspect of building a system, especially when you are working with a team. Very often, I have found that the "all in one room" development model is implemented because the team lacks the ability to define those interfaces first.
Whether or not there are some measurable benefits to the company for telecommuting does not matter.
What matters is this:
(1) The software company needs your software skills more than you need the company.
(2) You decided and plan your life around telecommuting.
(3) So telecommuting is non-negotiable.
Non-telecommuters tend to be wary of remote workers, not because they are any more or less productive. There's an underlying fear and a need to control risk. A manager who is not used to this want to reassure himself that things are going smoothly. You address that, then things fall into place.
In other words, the managers, speaking for the company say they want more "productivity". What they really need is more control and reduction of risk. They feel a certain level of assurance when they can see people walking into the office on time, every day. It assures themselves of their own continued employment. Give the manager what he needs (the assurance), and this conflict goes away.
As for recruiters, at the end of the day, they are salespeople trying to close a commission. There are only a few exceptions where a recruiter acts more like an agent, rather than trading you like a commodity. Obviously, such people are worth keeping contact with.
Whether or not there are some measurable benefits to the company for telecommuting does not matter.
I don't think that it's always this clear cut.
In other words, the managers, speaking for the company say they want more "productivity". What they really need is more control and reduction of risk. They feel a certain level of assurance when they can see people walking into the office on time, every day. It assures themselves of their own continued employment. Give the manager what he needs (the assurance), and this conflict goes away.
This isn't always true - or necessarily often true. Most managers I've deal with over the years are much more focussed on productivity than control. Some maybe think that control is the best route to productivity - but that's a different problem to solve.
For a start - everybody here who's building a startup. As soon as you get employee #1 - congratulations. You're a manager. Are you suddenly unconcerned about productivity ;-)
As somebody who is considering non-founder hires in the next year I'm thinking about ways that I can have them be local and co-located. Despite the fact that this may involve getting an office for the first time, possibly moving locations, hiring newbies and training up rather than hiring for skills, etc. Because, in my experience, the productivity gains could well be worth it. I'm going to experiment at the very least.
Productivity is what employees generally want. For every want, there is an underlying need that may or may not match that want.
If you only address that want, then you are not addressing the underlying need.
Lots of people say they need to get stuff done, but that is not the true underlying need. These are usually driven by deeper motives, generally relating to need for parental approval (fame, glory, success, achievement, etc.), need for security, and need to eat.
Why do you really want to build a startup? If you're honest with yourself, you'll generally find that your want and need don't match. (And if you are impeccable, and your want and need matches, things tend to go smoother).
While I agree that it's not as cut-and-dry "driving to an office in an anachronism!" as most on HN would like it to be, you're not going to win any converts by quoting studies from 1972 and 1977.
I think its a measure of the paucity of Software Engineering as a discipline that a intelligent and motivated person as the parent, is unable to find any research later than the 1970's
(It seems to me that most software research stopped as the PC revolution took off)
It seems to me that software research moved out of the Hallowed Halls of Academia and into the nasty pizzabox-laden basements of geeks' parent houses, where thousands of people hacked (no chicken involved) on massively capable inexpensive hardware.
Yeah the biggest difference here is that this is about software development. A room full of people is great when you all need to talk a lot and discuss things and plans and exchange info really quickly and casually.
But for programming, I find the best environment is an empty room, no distractions, headphones on, and NO ONE bothering you. That's not gonna happen at an office. Programming requires intense concentration, hard to get in a room full of people.
That's not gonna happen at an office. Programming requires intense concentration, hard to get in a room full of people
I'm willing to believe that, for some people, this is true. That they cannot work outside of environments like this.
There are also people who believe that they cannot work well outside of environments like this - but are incorrect (I used to be one of these).
There are also people and organisations who are very successful great developers who love and promote team room environments.
a) I'm not sure of the relative numbers of those groups
b) If the team room environments are a lot more productive then developers of the first sort are going to have long term problems getting work on projects that involve teams of developers
One thing this does not account for is that your potential developer pool increases by orders of magnitude with remoting. So, while a team might be more productive co-located, your ability to get much higher quality individuals working for you increases dramatically with remoting.
It appears that the gains from team dynamics (packs) outweigh the average individual quality (lone wolves) for most tasks. The optimal solution in finance, at least, is having the bulk of work done with co-located teams with telecommuting being an option when recruiting niche geniuses for specific tasks.
Point taken. I imagine much depends on the domain and deliverable, as to what that ratio might look like. As someone stated above, not every company is doing ground breaking work which needs the "best and brightest". But some companies might, at least in niche areas as you mentioned.
However, I know from attempting to hire even entry level engineers in sub-250k population areas, it can be very tough to even find a bare minimum candidate. I would jump at the chance to hire a rock-solid developer in a nearby city, state, or even country.
Agreed completely. I'm sorry - I thought I had expressed this in the original post when i said
"Pretty much all the evidence (rather than anecdote) I can find shows that co-located teams in a single team room environment are the most productive - all other things being equal."
If you can think of a way I can express that opinion better I'd appreciate it (This isn't sarcasm - it's a genuine request. Judging by many of the replies here I'm expressing myself badly ;-)
You potentially drive prices down, too, by exploiting cost of living outside your location.
There are plenty of good programmers living in relatively cheap places (Like the Midwest, for example). Pay someone in Minneapolis $10-15k less per year than what that same person would make in Palo Alto and that person could still end up above market for Minneapolis.
It's my experience that most people are simply terrible at communicating remotely. So this is what gets reflected in studies done on co-location.
After all, traditional interviews bias for those who are good at face-to-face communication. There is basically no filter for those who suck at remote communication.
It's exacerbated by the fact that it takes more than one to communicate. If you work remotely, it's not sufficient that you are capable of writing an intelligible email. Everyone you interact with also needs this ability, which tends to be rare in companies that are not purely remote workers.
I've worked on two fully distributed teams, and I can assure that it is was a part of the interview process to determine how well the individual could communicate remotely.
If scheduling our call was difficult, or if you were hard to understand on the phone, or if there was excessive background noise, I'd hold that against a candidate. If your emails were not clear and intelligible, that counted as well.
People who communicate well remotely stick out like a sore thumb when you are interviewing for those types of roles and if you value it. If you are just looking for warm bodies, I can definitely see how it would be problematic.
After all, traditional interviews bias for those who are good at face-to-face communication. There is basically no filter for those who suck at remote communication.
That's a really nice point that I'd not considered before.
It's exacerbated by the fact that it takes more than one to communicate. If you work remotely, it's not sufficient that you are capable of writing an intelligible email. Everyone you interact with also needs this ability, which tends to be rare in companies that are not purely remote workers.
The problem is that, from what I've read, the productivity advantage that folk get isn't through the sort of good communication you get from writing effective emails. It's the more ambient communication you get from noticing your coworker has been staring at the screen without typing for a few minutes, or from hearing and correcting a mistake automatically.
A reduction in health risks and distractions are two of the noted benefits. If productivity depends highly on teamwork, telecommuting may not be ideal, but it should improve individual productivity for the right employees.
1. How do you define group productivity?
2. I'm willing to bet that most of those studies looked at what happens when you take some "on-site" positions and simply hand them to remote team members. Why? Because that's what usually happens. Companies do not want to alter any processes, team structures or responsibilities to explicitly deal with remoteness. Naturally, if you pretend that someone from another state is sitting in the next cubicle, bad things will happen. Companies that embrace remoteness from the start (like GitHub) seem to be doing fine, precisely because they treat remoteness as an asses, not a minor concession someone had to make to workers.
* I'm willing to bet that most of those studies looked at what happens when you take some "on-site" positions and simply hand them to remote team members.*
You'd lose that bet. There are a variety of different methodologies and areas studied.
Companies that embrace remoteness from the start (like GitHub) seem to be doing fine, precisely because they treat remoteness as an asses, not a minor concession someone had to make to workers.
Again - not trying to argue at all that people cannot be fantastically successful as a distributed team.
What I am saying is that every single piece of research I can find says that colocated teams are more effective. This is... interesting... to me.
How much of that research includes open source projects and companies like GitHub and 37signals?
How much of it was looking at teams that are "super distributed", for example, between the US and India, where major differences in time and culture can play a huge role compared to say, a team distributed between Chicago and New York?
"interruptions were greater in number but shorter in duration and more on-task"
Given recent studies on multitasking, and the time it takes to get back on task, this does not sound like a positive thing.
"an ability to share work artefacts significantly challenge the effective collaboration of remote stakeholders"
Most "work artefacts' in software development are digital (and easily shared with the modern internet), and thus distance doesn't matter. This is obviously different from when this study was published in 2002.
The delay mentioned in the 2001 ieee article is virtually non-existant in modern work-from-home settings, where people are constantly connected by DVCS, screen sharing, skype, google hangouts, etc.
Yes, I'm cherry-picking problem quotes from your cherry-picked quotes, and don't have any studies to back up my beliefs (other than my own experience, which is frankly enough for me). That said, most of your citations are old, don't take into account research into human multi-tasking on complex projects, and don't take into account the tremendous advancements in remote communication that didn't exist as little as 5 years ago (github, google+, skype group calls, Trello, Bitbucket, Facetime, etc.)
Yet another anecdote: the last open office I applied to was definitely a war room... Warmachines, that is. I can't imagine getting anything of value done in that kind of environment.
Given recent studies on multitasking, and the time it takes to get back on task, this does not sound like a positive thing.
The question is when does an on-task interruption stop being something that switches modes. Also while the cost of task switching for an individuals productivity may be bad - it may be a net good for the team as a whole.
(BTW which recent studies? Interested in this since most of the multitasking research I'm aware of is pretty old and has the same general message of "it sucks". Would be interested in newer angles on this. Been away from academic cog-pych libraries for a while ;-)
Yes, I'm cherry-picking problem quotes from your cherry-picked quotes, and don't have any studies to back up my beliefs (other than my own experience, which is frankly enough for me).
My experiences have been mixed, but much more positive for co-located team rooms as I've seen folk try different alternatives.
Personally I'd say that the most productive teams I've seen have been co-located - and I've seen several teams who have deliberately moved (temporarily in some instances) to co-locate because they find it works better for them.
That said, most of your citations are old, don't take into account research into human multi-tasking on complex projects, and don't take into account the tremendous advancements in remote communication that didn't exist as little as 5 years ago (github, google+, skype group calls, Trello, Bitbucket, Facetime, etc.)
Most are old - but not all. I also think we tend to overestimate how much things have changed technology wise. I was using video chats, distributed source control, etc. five years ago. What we have now seems to be incremental improvements not game changers.
When I first started looking at this sort of thing six or seven years ago people applied the same arguments about email / internet / web....
Yet another anecdote: the last open office I applied to was definitely a war room... Warmachines, that is. I can't imagine getting anything of value done in that kind of environment.
My experiences have been different. An anecdote battle would probably be pointless - but some other folk in the thread seem to have had similar experiences.
I find it interesting that there's been no newer work showing clear benefits - which is why I'm looking.
This has been very true in my experience. Even having the team in the same room and the same space, but with individual cubicles can be insufficient. It is really hard for people, especially developers, to let go of their personal space. I know it was for me during the transition.
Working on many different teams in numerous cities over the last few years, the bullpen and shared space is one of the best ways to remove silos and promote organic conversation (kill meetings). Pairing instead of code reviews (or gated checkins), talking instead of team meetings, one on ones instead of political games and going out for coffee to think through a hard problem. With the right team, you show up at 9am and leave work at 10am (really it is 5pm, but it feels like 10am).
I tried quite hard in my post to say that I thought there were valid reasons for doing remote work. Just that the balance of evidence that I can find is saying that co-located teams are more productive.
I'd appreciate it if you could let me know if I've expressed myself badly - and any suggestions on expressing myself better are would genuinely be appreciated.
As I said in my post - I telecommute a great deal myself. For pretty much exactly that reason you outline. I am really not trying to say that telecommuting is bad ;-)
I really like the "all things equal" part. Usually all other things are far from equal. You have companies having the entire culture of remote work, availability of skills that's not willing/able to relocate to wherever your company is located etc. etc.
Pretty much all the evidence (rather than anecdote) I can find shows that co-located teams in a single team room environment are the most productive - all other things being equal.
(And I'm saying this as somebody who spends a lot of their time working from home, and talking to other folk over Skype, etc. There are reasons for telecommuting - personal preference, getting access to people who cannot co-locate, etc. But for business productivity I'm not seeing much, if any, evidence).
I am not saying:
* That working alone in an office is bad / will cause projects to fail
* Telecommuting is bad (I do it - I like it)
* Telecommuting projects will fail (D'oh - of course not)
* You shouldn't telecommute (of course you should if you want to - but bear in mind that the business may have good reasons to disagree with that decision)
* That telecommuting makes you individually less productive (I'm personally unsure about this. I feel more productive when working by myself, but I know that personal perceptions of productivity can be false. Measuring personal vs team/company productivity becomes hard in anything less than the short term)
* That co-location is always the best solution (it isn't - other factors like team location and skills come into play)
What I am saying is that there is a lot of research showing that co-located teams in team-room like settings are much more productive. This runs counter to many developers preferences (mine too ;-) so it tends to get ignored.
So much more productive that solutions like 'Let's fly everybody to the same place and pay their room and board for a month' can be cost effective.
Here are some references to the research (If anybody has any research that contradicts this I'd love to hear about it. Especially if it talks about actual measured metrics of productivity - rather that self-reported 'I felt just as productive at home' ones.)
----
"It doesn't take much distance before a team feels the negative effects of distribution - the effectiveness of collaboration degrades rapidly with physical distance. People located closer in a building are more likely to collaborate (Kraut, Egido & Galegher 1990). Even at short distances, 3 feet vs. 20 feet, there is an effect (Sensenig & Reed 1972). A distance of 100 feet may be no better than several miles (Allen 1977). A field study of radically collocated software development teams,[...], showed significantly higher productivity and satisfaction than industry benchmarks and past projects within the firm (Teasley et al., 2002). Another field study compared interruptions in paired, radically-collocated and traditional, cube-dwelling software development teams, and found that in the former interruptions were greater in number but shorter in duration and more on-task (Chong and Siino 2006). Close proximity improves productivity in all cases." -- http://conway.isri.cmu.edu/~jdh/VRC-2008
"Based on the empirical evidence, we have constructed a model of how remote communication and knowledge management, cultural diversity and time differences negatively impact requirements gathering, negotiations and specifications. Findings reveal that aspects such as a lack of a common understanding of requirements, together with a reduced awareness of a working local context, a trust level and an ability to share work artefacts significantly challenge the effective collaboration of remote stakeholders in negotiating a set of requirements that satisfies geographically distributed customers" -- http://link.springer.com/article/10.1007%2Fs00766-003-0173-1
"Our results show that, compared to same-site work, cross-site work takes much longer and requires more people for work of equal size and complexity. We also report a strong relationship between delay in cross-site work and the degree to which remote colleagues are perceived to help out when workloads are heavy" -- http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?reload=true...
"Our findings reveal that: software developers have different types of coordination needs; coordination across sites is more challenging than within a site; team knowledge helps members coordinate, but more so when they are separated by geographic distance; and the effect of different types of team knowledge on coordination effectiveness differs between co-located and geographically dispersed collaborators." -- http://kraut.hciresearch.org/sites/kraut.hciresearch.org/fil...
"One key finding is that distributed work items appear to take about two and one-half times as long to complete as similar items where all the work is colocated" -- http://www.computer.org/portal/web/csdl/doi?doc=doi/10.1109/...
"Our study of six teams that experienced radical collocation showed that in this setting they produced remarkable productivity improvements. Although the teammates were not looking forward to working in close quarters, over time they realized the benefits of having people at hand, both for coordination, problem solving and learning.Teams in these warrooms showed a doubling of productivity" -- http://possibility.com/Misc/p339-teasley.pdf
"Despite the positive impact of emerging communication technologies on scientific research, our results provide striking evidence for the role of physical proximity as a predictor of the impact of collaborations." -- http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjourna...
"Groups with high common ground and loosely coupled work, with readiness both for collaboration and collaboration technology, have a chance at succeeding with remote work. Deviations from each of these create strain on the relationships among teammates and require changes in the work or processes of collaboration to succeed. Often they do not succeed because distance still matters" -- http://dl.acm.org/citation.cfm?id=1463019