Best practice guidelines for mastering the remote challenge in distributed software development. By Marko Djuric, Managing Partner, InterVenture Nearshoring GmbH, Switzerland.
The right Team Spirit instead of “Us” and “Them” Building a talented and strong distributed team from various disciplines is in any new project or venture a challenge. But the most difficult thing to find is, not necessarily people with certain skills, but an organisational and management style which allows distributed team members to develop their full potential and remain intrinsically motivated over a long period of time.
What never must happen is that your people feel disconnected and that needs a very coordinated effort for open communication and platforms that stimulate a feel of being in this together. Let people share their work openly to create a true engaging environment where the individual contributes to a team, distributed teams contribute together to the company goals and create an “Us” and not a “We” and “Them”.
Following are practices from our own experience which can help to overcome the challenges of distributed software development. They are meant as general guidelines as every distributed team has its own specifics and needs a tailored organisational setup.
1. Support regular Communication
Open communication is the key to successful distributed teamwork. You should minimize the overhead by having a conference room easily available for all teams. Video conferencing is a better option than voice conferencing and in today’s times technical equipment for video conferencing is in terms of price really not a big deal.
You can let your team members choose and even vote for the most practical tools like Google Hangouts, Lync, Skype and different instant messengers and social tools. Email communication should remain the core tool for formal written communication.
We also suggest that you include regular communication as an explicit part of the local Team Lead’s function. This helps to catch up with the missed hallway communication and ensures that all team members are up to date with the relevant information.
2. Use face-to-face Meetings
Our experience shows that regular face-to-face meetings constitute one of the basic success factors for nearshoring. Team members can get to know each other and build mutual trust which is important for many key decisions that need to be taken. At the beginning we suggest that you give each team member the chance to spend a few days on your collocation for an efficient know-how transfer. Personnel bonds can be refreshed by periodically bringing the whole team back together on a regular basis, which can be combined with social events. We suggest face-to-face meetings at least four times a year for ongoing smooth releases and shipping process.
3. Appoint a local Team Lead as the Single Point of Contact
Distributed teams encounter more organisational challenges and need a clear communication and line management structure. Having one local Team Lead on the team as the single point of contact is vital in keeping a distributed team on the right path.One of the main responsibilities of the Lead is to manage and control the work load locally and to find the right mix of programming development practices: Sprint plannings, estimates, pair programming, code reviews, story cards and so on.
The Team Lead’s role is to remind the team of the underlying principles and help guide them to adapt their practices when the temptation might be to abandon them. He takes responsibility for the overall performance of your nearshore team and should have the necessary decision freedom and support.
4. Acknowledge outstanding Performance
It is important that your distributed team or individual team members receive a recognition for good performance. We encourage your to reward individual results with a compensation mix of: Year-end bonus, salary raise, additional days off, promotion in terms of responsibility and role within particular project. Our experience shows that recognition for particular performance stimulates your employees to give their best and to go the necessary extra mile, by e.g. coming in on weekends to finish work and meet tight delivery deadlines.
5. Distribute Work smartly
One of the challenges when the team distributes work is not to do so according to location. Our experience shows that the architecture will begin to reflect the team’s geographical distribution and different locations will become over specialized in particular components.
6. Reason technical Decisions
Good engineers give well argued suggestions when it comes to software design, architecture and development and there is often disappointment if these suggestions are not accepted, in particular if proper explanation is missing. This is usually part of the daily business and most likely has a direct connection to business aspects developers are not aware off: Budget restraints, framework agreements with customers and other partners, time limitations and similar. We encourage you to take time to transparently explain why a particular decision was made as this will give developers the relevant other (business) perspective, take out the “natural bitterness” and keep them intrinsically motivated.
7. Cultivate Documentation
Maintaining valuable documentation will also improve distributed team collaboration process while using agile practices. We encourage you to provide user stories with use case diagrams in globally accessible backlogs to reduce misunderstandings and improve team collaboration. Various tools like issue tracker (e.g. Jira), project management tool (e.g. Scrum works) also help in maintaining documentation and good transparency. Our experience shows that investing in quality documentation pays off quickly as it goes in line with high development efficiency.
8. Keep up the Feedback Loop
Give your distributed team members the opportunity to comment on things like, motivation, satisfaction within the technology stack they work with, factors which influence their performance both positively and negatively and future ambitions.
This allows you to discover early warning signs, which can often easily be corrected. It is important that distributed employees receive a formal slot to outline positive as well as negative aspects, suggest improvements and give information about their everyday work. Our experience shows that semi-annual employee satisfaction surveys contribute significantly to the overall team atmosphere, intrinsic motivation and employee retention.
9. Use the right Tools
Agile teams cannot rely on sticky notes on a task board or a burn down chart on the wall for project tracking if they are not in the same room. Similarly designs and diagrams need to be shared across multiple locations.
Your decision to distribute a team needs to be coupled with the commitment to provide the team with the tools it needs to maximize communication and the expectation that it will take them some time to optimize around them.
The complete development environment should from our experience include the following integrated tools:
- Project management
- Bug tracking
- Issue tracking
- Documents collaboration
- Source code and repository insight
- Code review system
- Release management (continuous integration)
- Version control system (source code repository)
As mentioned earlier, every team is specific and this requires a specific and individual set up of the environment.