We carefully study and generalize these patterns - I would call them foundations of a distributed development here in this post.
I believe these foundations span through 3 dimensions: project infrastructure, development process and participation culture.
Let us look into details of each one.
Project infrastructure
First foundation is to build unified project infrastructure to be used across all of distributed components of a project team. Wherever the team member is located, she should have access to the same project systems as the rest of the team.
As a minimal set, project infrastructure is based on the next systems:
- Version-control system - to manage project code-base
- Knowledge-management system - to manage project requirements, team profiles, process description and the rest of project documentation
- Planning, task, resource and issue management system
- Communication tools, including email, video, voice, chat and conference call systems
- Continuous Integration and Continuous Delivery system
Development process
Having a holistic and unified software development process for the whole project team is second foundation of a distributed team success.
This process needs to be agile and, as our experience shows, it should implement agile principles via the next key characteristics:
- Utilize either Scrum or Kanban as a project management framework. We at Cogniance have studied carefully applications of both Scrum and Kanban approaches and we believe that either of them may be equally effective depending on project team preferences and product owner needs
- Utilize Continuous Delivery approach as an enabler for all of project practices - as mentioned above.
- Build a culture of Continuous Communication - which includes (but is not limited to) daily scrum team meetings, iteration-based heartbeat sessions, different 1-to-1 and 1-to-many communication channels organized with the goal to make information flow within the project team maximally effective.
Participation culture
This third key foundation of a distributed team success is, of course, about having the right people in the project.
But "right people" is a way too broad term and I believe the key soft skill ingredient for success is specifically ability of each team player to participate effectively in project activities across different time zones, geographies and cultures.
I would decompose this complex skill into the next aspects:
- Command of English - English knowledge evidently is indispensable for any multi-national distributed team
- Pro-activeness - this, in its broader sense, also includes accountability, ability to make decisions and implement actions self-dependently, high self-organization and self-discipline
- Cultural awareness - cultural differences may become a significant stumbling block on a road to project success and the best way to overcome this difficulty is to raise cultural awareness within the team, which helps mutual understanding and collaboration.
grow the culture, do not build it from scratch - you cannot build a culture from scratch, you can only grow culture, so getting onboard people with the right participation skills from the very start is really important
get people to meet each other in person - no matter how effective is your distributed team setup, getting people to meet each other in person brings huge positive impact into the way team collaborates. The simple rule is to meet as often as possible, more specifically, team should try to meet in person at project pivotal points like elaboration of a new development phase, product road-map discussion or yearly all-hands meeting.