Having handled complex Java projects at our offshore development center at Trigent’s Bangalore Office, here’s my take on the oft-discussed topic on time difference issue attached with onsite/offshore development models. For sake of readers convenience, I have also included some key collaborative steps that can be put into practice for making smooth progress towards meeting timelines.

Below are some of the steps to be taken to make sure collaborative development work is smooth & successful in an onsite / offshore product development:
- Know your team – This is the most important first step in any collaborative development. This can be achieved in many ways.
- Have onsite team members visit offshore facility or vice versa
- Have video conferencing calls
- Share photos / pictures of the team members
- Have daily meetings – Meetings with onsite team daily will make the team understand what each member is doing
- Collaborative design – Offshore team work together with onsite team members in designing the application. To beat the time difference the offshore team can work extended hours during design phase
- Pair programming – This can be achieved by having an offshore team member & an onsite team member both work on the same module.
- Peer review – Have offshore team member’s code reviewed by on-site team member & vice versa. This can help in achieving on-site team’s expectations
- Continuous build & integration – Have a CI system in place which will make sure that clean code is checked-in at any time. The following steps can be implemented:
- Automatic build will happen whenever code is checked-in
- The CI system executes the regression test suites to make sure nothing breaks
- Notify the team on any failures so that team can act on it
- Make sure the team runs the complete build before their EOD. This will ensure that the onsite team gets clean code to work on.
- Regression test suites – Build regression test cases & integrate it with continuous build. This will make sure that the checked-in code has not broken somebody else code.
- Disciplined code check-in – The following can be enforced:
- Have visibility into what each member is working on, which files etc.
- Make sure that one does not override somebody else code.
- Always see the repository changes before check-in.
- Periodically check-in smaller logical changes
- Don’t check-in partially completed code
- Communicate – This is an important step. Following options can be implemented for effective communication:
- Create a group e-mail account which will include on-site team members
- Use Skype or other IMs and communicate daily
- Exchange each other’s alternate communication details like phone, mobile etc.
- Have contact details of all the team members in common central place & accessible to all.
- Identify offshore team member who can be contacted during emergency