People will tell us that they shipped a great product without Scrum or XP or TDD or working together. They’ll tell us that they worked 24/7 for fifteen straight months without food or water. Through six feet of snow. Uphill. Both ways.
They shipped the software, therefore what they did was best. It ain’t necessarily so.
I think we all agree that there aren’t any best practices, especially when someone tells us XYZ is a best practice and we don’t want to do XYZ. We immediately reply: “There are no best practices. Haha, go away.”
Then we go ahead and do what we think is best. Often not “in this context”, but just what we always do because, well, it’s best.
I’ll be talking about a few topics under the “Success is Best” heading. Today’s topic is co-location: working physically together.
Is co-location “best”? It depends what we mean by best, doesn’t it? Let’s try to narrow it down. What are some dimensions on which we might compare co-location with dis-location?
- Speed of delivery;
- Design of the software;
- Success of the product;
- Happiness of the workers;
- Productivity of the individual workers;
- Quality of the workers;
- Productivity of the team;
- Speed of team learning;
- Team truck number;
There are probably plenty more, but these are more than enough to confuse us. Let’s start with some easy ones.
Many of us would prefer to work at home. Most of us would prefer not to move to a new city.
For a large number of people, dis-location seems like a preferred way to live. But will we be happy working that way?
There’s no way to know, without trying it, and it probably comes down to the individual, and to the job, and to the communications tools available.
But we do hear from a lot of people who work remotely, and who prefer it. So there’s something here. At the same time, some of those people have gone from working at the office in a crappy job to working at home in a great company.
So it’s not just home > office. It’s home+great job > office+crappy job.
Will we be as productive at home, alone, as we would be in a great work area with our team?
Well, that’s interesting. For me, alone, my most productive work comes in two segments. At 3 AM, I can be pretty productive at home, sometimes. Working at home when the sun is up, not so much. There’s too much to distract me.
For heads-down work, I’m most productive at the coffee shop. There’s enough buzz to make it alive, but few interruptions.
When I’m trying to learn something new, I have two modes: sometimes it’s best alone, just typing in examples from the book or web site and trying them. But sometimes, especially when the examples don’t work (do they ever work??), it’s good to have someone to work with.
I’ve worked with the same people via pull requests (only rarely), via Twitter DM, via Skype, FaceTime, and phone, and in person, sharing a screen. I’m quite sure that together is better, for me and my pals. But together only costs us a half hour of driving and we enjoy hanging out, so it’s no big deal. If I had to drive to Centerline, over an hour in heavy traffic, well, no, I wouldn’t like it so much.
What about the overall team productivity, in some reasonable terms like features done or overall goodness of the product? If we could get the same people in a room as worked remotely, what would happen? Would the same thing always happen?
Darned if I know. But I have two examples.
The C3 team was one of the most productive teams I’ve ever worked on, in terms of getting high quality software done at a good pace. They were above average people but not the best I’ve ever worked with. They were doing full-on XP, co-located in a room. They loved it and were very productive.
When I was at Comshare, my programmers all had individual offices. We were quite productive, met at will, and got a lot done. Those programmers were all at or near the genius level and mostly had reasonable personalities. Fantastic group. One time, when we were working on something really hard, I had a “war room” built and we spent most of the day working in there for a while. Our productivity shot even higher.
So there are two interesting cases: an above-average team that became much better under co-location (and a lot of other practices), and a near-genius team that worked together well and still became much better under co-location.
Those two experiences, and many others, lead me to believe that any team that learns to work physically together will do better than when they are working physically apart.
One of the most easily seen effects of working closely together is how rapidly knowledge spreads. I worked on some node.js last night. Today, I’ll share that with Bill and Chet at the coffee shop. They’ll learn too. But they won’t learn as deeply as they would have had they been sitting with me. When I learned what that message meant, it slammed into my head. I won’t forget it. If they had been there, it would stick with them as well.
But this morning when we meet, I’ll say something like “I got a bunch of weird message and it kept quitting but I finally figured out it was a syntax error and once one of the files wasn’t there”. I won’t remember the details and they won’t be as vivid as the experience. Bill and Chet won’t learn as well as had they been helping me when the problem arose.
So … what’s best?
I hate this answer, but it depends. It depends on what you value. According to the amazing book The Nature of Software Development, value is “what you want”. Do you want to work in your PJs? Then co-location may not be your thing. Do you want to work with great people while living in Podunk, or Pinckney? Then you may have to consider remote work. Do you have trouble hiring the people you want there in Podunk or Pinckney? Then you may need to allow your people to work remotely. There are plenty of ways for those people to collaborate (see future article) and if you work at it, it can be just fine.
That said, I’d bet that if we took a group of people working remotely and brought them together in a pleasant location, they would soon be more productive than they had been working remotely – by whatever definition of productive you choose.
That’s not to say that every team would be more productive if brought together, only that it’s how I’d bet. I think I’d win more often than I’d lose.
But that doesn’t mean we should force ourselves to do that. Most of us wouldn’t stick around, even in a “pleasant location”, if we had to move away from our family, our home, our kitties.
What’s important, then?
Individuals, interactions, collaboration. Working together. Face-to-face conversation.
Collaboration. If your team collaborates well, you’ll do better than if it doesn’t. How hard you push for the last bits of juice … that’s up to you.