Chapter 5. Best Practices for Staffing the Contractor s Software Project Team


Chapter 5. Best Practices for Staffing the Contractor's Software Project Team

Software development has been and will continue to be very dependent on the caliber of the individuals involved. The reason, of course, is that software development is an intellectual exercise. More importantly, teams produce successful software development projects. The trends of outsourcing and offshoring extend this concept further by introducing groups of teams that must work well together (hence, the reason for a separate chapter covering the outsourcing organization's team). In his book Object Solutions: Managing the Object-Oriented Project, Grady Booch, one of the creators of the RUP, states, "It is time that I come clean and unveil one of the dirty little secrets of software engineering: People are more important than any process."[1]

[1] From Object Solutions: Managing the Object-Oriented Project by Grady Booch. Quoted with permission.

Successful teams are fascinating to analyze. After observing hundreds of teams over the years, I believe that good teams transcend process and technology. A successful software development team has much in common with a successful sports team. In particular, the following are characteristics of a good team:

  • Each person on the team respects his company, customer, and, especially, fellow team members.

  • Each person on the team trusts the other members of the team completely.

  • Although individuals take pride in their accomplishments, they recognize that their accomplishments are diminished unless the team succeeds.

  • Although individuals have specific expertise and roles on the team, they are quick to assist others on the team if help is needed.

  • The team has a certain "chemistry" that customers, management team members, and others recognize.

  • Major decisions affecting the project's or team's direction are not made without consulting the team.

This chapter describes the major roles on a modern, high-performance software development team. It discusses the best practices for creating a team that will eventually exhibit the characteristics just listed (but this does not occur overnight!). This chapter also discusses how these teams are best managed.



Governing Principles for Staffing the Team

The first step toward building a cohesive team is to recognize that you must evaluate a prospective team member in two areas. The first is to understand the candidate's attitude and disposition toward working on a team. The second is to evaluate the person's technical abilities for the role in question. This section considers the former.

When evaluating a candidate to join your team, focus first on attributes that give insight into the person's attitude and propensity for working on a team. Here are some suggestions and ideas for when you interview candidates:

  • When discussing the candidate's accomplishments, pay attention to whether the candidate mentions other teams of which he was a part. For example, suppose the candidate says, "In my last position, I worked closely with two other developers on a project that was behind schedule. We worked many extra hours, and as a result, we caught up and delivered on time." Statements like this are a good sign. Notice the reference to other team members and the use of the word "we." This suggests that the candidate is team-oriented.

  • Try to assess the candidate's ability to learn. Rarely can you find someone who has all the technical skills your team needs. In general, you are better off with someone who works well in a team culture and who can learn quickly than with someone who has technical skills but who doesn't work well on a team.

  • Have several team members interview prospective candidates. This has four advantages:

    • It provides multiple perspectives on a candidate's suitability for the position. After several team members have interviewed the candidate, schedule a briefing to discuss each interviewer's impression. Try to achieve a team consensus. If the consensus is negative or an agreement cannot be reached, keep looking at other candidates.

    • When decisions are made as a team, the team feels ownership of the decisions. If the team decides to hire the person, they will work collectively to integrate that person into the team, making it more likely that the person will succeed as a team member.

    • It gives the candidate a better picture of the position and the other team members. This enables the candidate to make a more informed decision.

    • Having several team members interview the candidate separately shows that you value each team member's opinion.

  • Try to assess how the candidate would respond to a recent challenge on your project. Describe a recent scenario, explain the problem, and ask how the candidate would respond to it. This gives you insight into the candidate's problem-solving ability. It also acquaints the candidate with actual issues that have affected the project recently.

The exact answers to these questions are not as important as how the candidate answers the questions.