As we all know, Scrum teams work best when they are co-located and within koosh-ball-tossing range, not when they are working at disparate sites. We also know that teams who have not worked together before can come up against challenges with communication, unmet expectations, productivity and quality, among others. Both of these conditions can significantly increase risk on a project. Throw them into a consulting environment on a fixed-bid project and the problems can increase dramatically.
To some degree, this is the norm for IT consulting companies. Teams are transient, and are assembled from the best - and available - resources for a specific project. Perhaps some of the team members have worked together before, but it's likely there will be some that haven't. There may be subcontractors working on the team because they have special skills, but no knowledge of the company culture or of the client's business. There also may be team members who have to work remotely for various reasons. These things can make creating a high performing team a real challenge.
The two biggest challenges we have faced with this type of team and Scrum, are:
- Keeping people honest about their progress. Let's face it, people want to look good in front of their peers. Sometimes this makes them exaggerate the progress they've made, or makes them minimize issues they are having. In Scrum though, team members have to be brutally honest about where they are and if they're roadblocked so the team can help them get back on track. It can take awhile for a new team member to feel comfortable with that level of honesty, but on most of our projects, we don't have time to wait.
- Having developers stay true to the architecture of the product they are working on. Almost all developers and architects who have been around awhile have their preferred way of doing things, and their own ideas about the best architecture to solve a particular problem. New team members - especially when working remotely - have a tendency to isolate themselves and create 'architecture drift'. This can result in quality issues, problems with extensibility, less reuse, and increased development and maintenance costs.
This technique is working for us, but I'd like to know how others are solving this problem. Share your ideas!