Loosely-coupled design to the rescue!
This is the time to ask your in-house project leader, “Is it possible to split system development into independent chunks that could be implemented in parallel?”
If the answer is anything but “yes” – it’s a cause for concern. “No” likely means that system components are very dependent on each other, thereby making the system tightly-coupled. And a tightly-coupled system is an unscalable, hardly maintainable, inflexible system.
One of the key factors driving this grim reality is that Object Oriented Programming is, by nature, tightly-coupled. To meet this problem, the software system architect (project leader) has first of all to employ loosely-coupled design techniques to achieve system scalability, maintainability, flexibility and testability. If this task is solved – incremental and independent development will come by itself.
The main point is this: a properly architected system consists of fairly separate and independent modules or classes that have little to no knowledge of each other. Given such an architecture, it becomes easy to split the work by components and avoid interference amongst team members.
An optimized distributed team development process can be boiled down to the following 5 points:
1) Define task, describe, discuss and estimate it
2) Define team (project) roles and agree on formal communication paths
3) Balance implementation efforts of one portion of the team with code reviews from the other
4) Demonstrate (ongoing) results to the project stakeholders
5) Retrospect and review: what went well, what went wrong, identify points for improvements.
And there are many smaller, but still important points that will enhance the remote team’s output:
* Trusted engineer is interested in remote team’s success
* Both sides understand and appreciate a transparent and tailorable development process
* Trusted engineer provides feedback to the remote team regularly
* Use technology to improve collaboration (screen sharing, video conferencing, etc.)
* Leaders of both teams meet in person to align their vision on project goals, create an achievement roadmap, and, ideally, build the project backlog together.
If you decide to use an “external muscle” to strengthen your product development, don’t forget to ask the remote team for their “user manual” and development process before things get going. Then make the investment to move your system towards loosely-coupled design principles and practices. If these things are done right, the “trust gap” will be bridged very soon, typically in 5 to 10 sprints. And it will result in a pleasant sensation as you lay down to sleep each night, knowing that your project keeps growing and moving in the right direction while you are sleeping.