At my previous job they were starting up a new project on which many different people from different locations would contribute to. To give you an idea of how distributed the team would be, it would consist of 7 people in 4 different locations. Altough we have come a long way, and communicating with people all over the world has become possible without much effort there still are some problems that could arrise.
To be able to have a team physically distributed, you need to have to tools that enable it. First of all you should make sure that all of your members have access to all required resources, this goes from the company wiki, build system to the source repository. This sounds obvious, but if all of those systems are running locally on a server somewhere it may involve opening up access which again should be made in a secure and safe way. However, setting up a VPN isn’t that difficult and should satisfy your needs.
Giving everyone access isn’t enough however, you need some additional tools to allow simple communication between your members. Where when people are in the same room, they can simply talk to eachother, walk over to someone and ask, or quickly show something on the screen all of this becomes impossible when the other person is in a different location. To overcome this hurdle, tools such as Skype, Slack or Hangouts are vital, as they allow people to communicate and keep everyone in the team up-to-date with what everyone is doing. Features such as screen sharing, file transfer and video calls are useful as well as they allow more easy communication compared to written text alone.
Sometimes however simple words aren’t enough, and you simple take out a sheet of paper and start drawing some diagram or picture to show exactly what you mean, because in the end a picture says more than 1,000 words. I find this the most difficult thing to overcome because creating creating a drawing on a piece of paper can be done quickly, but doing so digitally is a lot harder if you don’t buy a special drawing tablet.
But not only do you need the correct tools to enable people to communicate and stay up-to-date you also need the processes to do such. It is easy for people to start living on their own island do the things they are working on and that’s it. But doing so would lose the added value of having a team, when multiple people are thinking together on how to solve an issue, the arguments, discussions will all contribute to a better solution. Moreover it will avoid friction between people caused by everyone doing things in their own way.
Organisation contributes a lot as well, if you physically separate people that work on the same thing, a lot of communication will be necessary, if you however organise in such a way that people that are close together work on the same thing, and those further away on more separate parts then the communication overhead will be far less and not slow you down that much. In the end it is important to note that the way your organise your team, will be reflected in your code. So a distributed team with no decent communication will result in many different parts of the code created by different people.
So even though technology has enabled us to do many things that were impossible in the past, the distance is still not fully gone, and I believe it never will be. Even if technology manages to create a virtual representation of someone at a remote location, even if the networks become fast enough to handle that amount of data, even with all of this fixed you would still have a different culture and different timezone. But that doesn’t mean you can’t collaborate with people all over the world.