The internet, we were told, would make location irrelevant. But it hasn’t. Some examples.
• My brother lives in the UAE so we talk by phone. We would use Skype but the local telephone company blocks Skype and various other services.
• I have several kitchen containers from a New Zealand company. I bought them in the UK and would happily buy more but they are no longer stocked in any shop I know - and believe me I’ve tried. I could order them online from the US but the American shops won’t ship outside of the USA and Canada.
• When I’m searching the web, particularly if I’m looking to buy something, and I find the kind of site I’m looking for I want to know where are they based? London? Cardiff? Chicago? Mumbai? I have nothing against India companies, or American companies (provided they will ship abroad) but when I’m faced with a site I’ve never heard of I want some kind of reassurance. Their location is part of that. OK, there are fraudsters in London as there are in Chicago, I’m unlikely to chase them myself, and they could be lying about where they are, but it all adds to my understanding.
In short: the internet makes many things possible over long distanced but location still makes a difference.
The same is true in software development teams.
You can have people located in different offices, different parts of the world, and you can use telephones, wiki’s, Skype, video-conference kit, etc. etc. to work but it isn’t the same as having everyone in the same place.
When you locate people elsewhere you incur extra costs. Obviously the cost of telephone calls or bandwidth but these are a small part. As you use more technology (conference calls, video conferencing, shared whiteboards, etc. etc.) you incur more and more direct costs. Even wiki’s take time to installl, and time to use.
You also incur costs because conversation often need to be arranged. So I might IM someone and say ‘Can you talk?’ and 20 minutes later they get back and say ‘In 5’. The need synchronise before talking slows down the process and there is a cost of asking.
Then there is the cost of missed conversations. We make small talk, trivia, at the water cooler, or walking to lunch, or because someone is there and we want to moan. When someone is remote these conversations are lost. We incur cost because we don’t get the benefits of these costs.
Then there is the cost of setting up meetings to compensate. A few years ago Lise Hvatum and myself ran a focus group at EuroPLoP entitled
‘What do we think of Conways Law now’. One of the recommendation we came up with was: when you remove an informal communication channel you need to replace it with a formal one.
So when we have lots of remote workers you need more formal, arranged in advance, meetings. This ads to the costs again.
And when you do talk the level of information transfer is less. Even with video conferencing your primary communication mode is voice. Communication is centred on explicit words. Face to face much communication is implicit, its in the tone of the voice, the facial expressions, the body language and how other react. You loose all this when you are remote.
Lets face it, software developers don’t have a great reputation for communicating well anyway so why put obstacles in the way?
Every time we put an obstacle in the way we reduce information transfer. This goes for cubical walls and offices too, open plan offices are my preference. Every barrier, cubical partition, different floors, different buildings, different continents, reduces information flow. The bigger the barrier the bigger the loss.
And for a development team - focus on that word:
team. Who ever heard of a football team which played on different pitches?
Team work is about just that,
team work. You can’t do it when you are alone. Every barrier makes team work more difficult.
It is an illusion to think that you can develop software when your team is spread around a single building let alone the world.
This is especially true for people who are in leadership positions in an organization. You can’t have a CEO, a team leader or an architect who is removed from those he leads.
Sure there are exceptions. A few companies are completely distributed,
Sleepycat software - before
Oracle bought them - springs to mind, as do Open Source projects. On the whole these work because they are born on the internet.
The other reason remote working teams work is because they aren’t so much a team but a bunch of individuals, each working on their part of the system and seldom interacting with each other. I think of these as Swordfish teams - a bunch of developers flying in formation. As a result (Conway’s Law again) you are likely to end up with a very diverse system architecture.
Don’t get me wrong, I’m a big fan of working form home once in a while. The odd day spent working at home can be really productive - precisely because I have few conversations and can focus on one or two things. Working from home is great for reflecting and preparing oneself.
And it is acceptable for large teams to have the odd person working remotely. But the smaller the team is greater the need for them to be in one place.
Maybe once upon a time developers could work alone, remotely. They could put on headphones and switch off to the rest of the world. But today developing software is a team sport and needs to be played like one.
I say that as one who has never liked team sports such as football, rugby, cricket, etc. I’ve always preferred solo sports like skiing, running and swimming. I have to adopt and change too.