views:

398

answers:

6

When doing an in-house IT project, such as in a bank, it's very common to have a team with significant differences in both skill and talent among its members. As the biggest factor in project success is usually the people, this is a major project risk, and needs to be managed appropriately.

What useful strategies have you found for dealing with these big skill/talent disparities?

A: 

Pair programming is really good for this.

Keith Nicholas
Same comment for you... Pairing high performers with low performers is "regression to the mean" and annoys the high performer. If low performers need training then train them, don't drag down the high performer by making them do it while trying to make a delivery.
dacracot
If you are making people pair program, you have a problem! If there is an urgent deadline a high performing programmer needs to meet they wouldn't CHOOSE to pair up with someone who will slow them down. If you are making people do something against their will its whole different ballgame!
Keith Nicholas
+5  A: 

My biggest suggestion is to try to pair people up so you have your stronger people to help lead, teach and guide the weaker. Try to have an environment where people do not feel ashamed for asking for help or advice. The less talented and skilled people will learn and become better at what they do, and the stronger people will inevitably learn something new from the less skilled individuals as well.

jschoen
This is a nice idea, but a bit tricky to implement when time and budget is scarce. Hmmm...maybe the time and budget needs to be factored into the original project estimates.
RoadWarrior
That would be my approach. I am still fairly new to be honest, and wish I had more talented and skilled individuals to go to. But our team was all hired straight out of college at the same time. So we learned early on to lean on each other, and the importance of asking others ideas on problems.
jschoen
Pairing high performers with low performers is "regression to the mean" and annoys the high performer. If low performers need training then train them, don't drag down the high performer by making them do it while trying to make a delivery.
dacracot
I disagree the whole "regression to the mean" theory. I find to often we sit in our own cubes and not communicate with fellow developers when we run into a problem. Even though someone on the team may have the solution.
jschoen
I beleive in experience not training. Training is good for nothing more than an introduction to a topic area. Experence is where you actually learn more about the topic.
jschoen
I'm all for communication and freedom to ask questions, but sit that junior programmer in my office all day and make me pretend like its not an annoyance... please.
dacracot
chakrit
@chakrit I actually agree with you, and I think it is all about finding a balance and knowing when enough is enough. If you have low performers that have been given the guidance and are not improving they need to be let go.
jschoen
+3  A: 

Assign work according to abilities. Most projects have a mixture of work that is "hard" and work that is "easy", so if you can give the easy stuff to the less-skilled people, they can contribute, learn things, and feel challenged, and the more-skilled people will appreciate not having to work on stuff that bores them.

Kristopher Johnson
I agree (and see comments above). I would emphasize the "feel challenged" aspect. Make the low performers stretch for higher ground. If they make it, keep them, give them raises. If they don't perform, remove them or relegate them to repetitive tasks.
dacracot
A: 

The only truly effective way I've ever found of dealing with team members' disparate abilities is to work by myself. Since that by definition is not an option when dealing with teams, your best bet is to parcel up the work so that the most important pieces are done by the most capable developers. I think this happens a lot, and is one of the reasons that software tends to look so awful aesthetically: the user interface is often relegated to least-important status and given to the least-capable developers.

MusiGenesis
+2  A: 

The single, biggest, most critically important thing is for the less-skilled people to know that they are less skilled and for them to respect the opinions and guidance of the more skilled people. If the less skilled people think that they are equal to or better than the more skilled people, then they will tend to argue for stupid ideas rather than learning, and that will damage both productivity and the product.

Glomek
This is so true. I'd like to upvote this multiple times!
FRotthowe
+2  A: 

While it is important to recognize expertise and defer to that expertise, you also need to determine what strengths each team member has. Like it or not, you have to ensure that each member contributes productively to the project efforts. This means you must motivate them to contribute, and in a sense, find a place for their sense of importance to be recognized.

Your challenge is to not let the superstars overshadow the other members in a way that reminds the lesser skilled people that they are not superstars. The trick is to not slow the project down by worrying about the emotional state of each team member while maintaining morale.

If you have good designers, let them lead the design, but you may want to consider including the non superstars backup for the A-team. Have them help Q/A the design, keep up documentation. You can also assign people who do have great design skills as part of testing team. The is a good position for the old school folks - let the non-OO people do black box testing, and in some cases when time permits, let them participate in white box testing.

You'll need to remind the less experienced team members that they have a great opportunity to learn from some skilled people. They may not get to do the things that they want, but they will have the opportunity to participate, and when possible, take direction from the subject matter experts. Real life projects with real stakes will give the junior members great experience.

In the end, you'll need to service the project, and you will have to nicely but firmly remind the team what is at stake, and seek to give them meaningful duties that demonstrably contribute to the success of the project. Good luck.

David Robbins
"non-OO" people... lolz ... ooops, Im sorry :(
chakrit