The usual "Scrum answer" is to push for a co-located team and discourage virtual teams. There are many reasons behind this preference, but they are sometimes not obvious. So let's start understanding the problem from the perspective of the Values and Principles in the Agile Manifesto.
The Agile principles recommend:
- Customer satisfaction through early and continuous delivery (#1);
- Daily interaction between business people and developers (#4); and
- Face to face conversation (#6).
Note the order of priority, from highest to lowest. Reflect on what gets sacrificed and how customer satisfaction is put to more risk when you have members who are not co-located. Here are some thoughts on this:
- Face to face conversation is best because you get shorter feedback loops. Being on the same location allows you to draw collaboratively while talking, use post its or index cards, or see visual cues from people so you could quickly form consensus and decrease misunderstanding.
- There's nothing more efficient and effective than walking to someone and conversing with them to resolve a question.
- Face to face conversation is derived from lean thinking, which recommends it to reduce wait time. If a developer waits for the PO to respond to a request to review the UI of a new web page, that wait time could have been used to work on another task. But working on another task entails switching cost, too. Waiting and switching are waste.
- Lean thinking also views anything that impedes early and continuous delivery as wasteful. In some teams I've worked with, the only useful overlap was a maximum of 2 hours. Their day was ending as ours was just starting. You could take advantage of this situation by handing off tasks to the remote team -- but then again, handoff is waste.
If you're stuck with virtual teams, then the principle of daily interaction must not be violated. I would even recommend that since you cannot have face to face conversation, you must compensate by increasing the frequency of communication. Here are some rules of thumb for communication preferences:
- Prefer face to face conversation.
- If that's not possible, use Skype or Google Hangouts with video (it's important to receive visual cues, so invest in a good line that allows streaming video).
- Compensate for the lack of face to face conversations by over-communicating.
- Discourage instant messengers or email for conversations that need quick feedback. If you use email, use only one thread to avoid multiple messages that are hard to sift through for information.
- Compensate for geographic separation by using tools to facilitate virtual teams like Slack, Trello, Skype, Google Hangouts, and Google Docs. Google Docs have neat features that let you collaborate more visually while working concurrently on the same document (I've had a bad experience with Microsoft OneDrive, so I don't recommend it).
- Combine the use of these tools so that they make up for each other's limitations.
- Maximize screen-sharing. This helps you to work literally on the same page when reviewing something.
- Trust between the local and remote team members is a key factor. The remoteness and cultural differences provide invisible but critical barriers to smoother collaboration. Bring the remote member to your location so you could work together. This would be great to do for one sprint, or if budget and time are issues, bring the member at sprint review, retro, and planning time.
If you follow the recommendations above, sooner or later, the team will come into one of these possible conclusions. Either the team will get tired of overcompensating for being fragmented (in which case transition to two separate co-located self-sufficient teams), or they will learn to work remotely with the rest of the team and say the trade-off of over-communicating is worth the benefits of working with the remote members.