From my experience while working with multiple distributed Agile projects, following things are very important:
- Frequent collocation (every quarter at least) with clearly defined goals to achieve from each side. At the end of collocation it’s important to do a retrospective on the effectiveness of collocation based on goals achieved or over/under-achieved.
- Scrum Master at customer location
- Distributed standup every day on Skype or with some other video-conferencing tool
- Good microphones for distributed group conversation (for instance http://www.samsontech.com/products/productpage.cfm?prodID=2010)
- Good bandwidth for Skype video conversations
- Good headphones for each individual for distributed pairing
- Distributed pair programming and if required distributed knowledge sharing sessions
- Pre-planning meetings to understand user-stories better
- Peer to peer communication between distributed teams
- Local retrospective if required.
- Prepare for distributed retro and demo before doing it
- Define a slot for technical discussion after standup is over.
- Some time overlap ( due to timezone difference ) between distributed teams for better communication. This increases productivity for sure. If time-zones are completely different, teams have to shift their work timings.