Guideline: Staffing a Project
Advice for how to staff a software development project.
Relationships
Main Description

Good software development teams are made up of a collection of people who collaborate effectively. How the project team is staffed, by either adding or removing people, will greatly impact the team's productivity.

When staffing a development project, consider the following advice:

  1. Include people who fit into the existing team culture. Good teams don't just appear magically one day, but instead are grown and nurtured over time. Invite people onto the team who will add value and furthermore who will not be disruptive. Similarly, you may need to invite someone to leave the team if they do not fit well with the existing team and they don't seem to be able to change.
  2. People should want to be on the team. People are far more productive when they're working on a project that they believe in and want to see succeed.
  3. Build your team with "generalizing specialists". A generalizing specialist is someone with one or more technical specialties who actively seeks to gain new skills in both their existing specialties as well as in other areas, including both technical and domain areas. Generalizing specialists add value to the team because they have specialized skills that you need while at the same time appreciate the full range of issues that a general understanding of the software development process and the business domain offers.
  4. Include stakeholders. Stakeholders, including business stakeholders such as end users and technical stakeholders such as operations staff, can add significant value to your team. Instead of just interviewing them to gain information from them, or asking them to review your work, why not include them as active participants on the team?
  5. Include specialists for short-term, specialized work. Specialists can still add value on an agile development team, particularly when they have specific skills and experience which existing team members do not have. It can often be more effective to bring a specialist into the team for a short period of time to help with a specific task, such as installation and setup of an application server, the development of an architectural spike, or simply taking part in a review.
  6. Give people opportunities to evolve their skills. At the beginning of a project the team may not have the full range of skills that it needs, or perhaps a few individuals may not have the skills required to fulfill the roles they are filling. This is a very common risk taken on by the majority of project teams for the simple reasons that you often can't find the perfect combination of people and even if you could you still want to provide people with opportunities to grow as professionals.
  7. Remember Brook's Law. Adding people to a late project will only make it later [BRO87]. The corollary is that removing people from a late project may speed things up [AMB04].

Sometimes you will need to go against some of this advice due to environmental constraints. Perhaps only specialists are available (although there's nothing stopping a specialist from becoming a generalizing specialist), perhaps there aren't as many opportunities for people to try new things as they would like, or perhaps the stakeholders aren't available to be active members of the team. The advice above is designed to lead to as high-performing a team as possible, but even partial adherence to this guideline will improve the team.