Lead Developer, Are You Mentoring?
Every year, the topic of NNPP's (net negative producing programmer) comes up. Though the language varies the gist is the same. Usually, posts talk about the cost and the problems with these developers and how to marginalize or eliminate them.
We all know this, we know the cost, we know the problems. However, in many organizations it can be very difficult to replace these folks.
Instead of Whining, Do Something About it
Are you a Lead Developer? Do you plan to be? Perhaps a different tactic should be taken. Look, we all write bad code from time to time (hopefully less as we become more experienced). Instead of trying to embarrass or shame these developers, take the time to mentor them. Show them a better way. Offer up embarrassing stories of your own mistakes to lighten things up a bit. Invite them to review your code and look for problems.
Yes, I said, ask your weakest developer to review your code.
One thing greatly lacking in the profession of software development is maturity. There are a lot of reasons for this (maybe to be addressed in another post), one of the first steps in overcoming the lack of maturity in our profession is to stop whining about people and help them to get better.
Anybody who's been in software more than a day knows that egos can play a big role. When dealing with a NNPP, be aware that they have an ego too. Go easy on them, especially the ones with more "experience". Their egos will be the most sensitive.
Dealing With Management
Many times, difficulty is increased because managers without deep technical knowledge are supporting these developers. This can be used in your favor. These types of managers love metrics because they help them deal with their insecurity about not really knowing what's going on. So use code quality tools like Lint, Crap4j, PMD, FxCop, etc to generate reports. Explain to the manager that you want to improve code quality and how these tools can help.
Managers love reports. Many will make group objects out of trying to reduce the defect counts found by static analysis tools. This will create a lot of frustration for your NNPP's. Use this opportunity to to mentor, to help your NNPP's get better.
Anybody who has dealt with a NNPP knows that they are very resistant to agile techniques like pair programming. One way to get them involved with a little pair programming is to "ask them for help". Ask them for help on a problem you are working on; yea I know they may not be much help, ask anyway. You are trying to get them to sit and learn your programming (and problem solving) techniques.
While doing this, be sure to LISTEN to suggestions they may have. When finished, be sure to publicly give them credit for helping. One of the obstacles to writing (and caring about writing) good code is motivation. By listening (showing interest), and giving public praise, you can increase their motivation.
BTW, be sure that you have a copy of Code Complete and the Pragmatic Programmer on your desk before inviting them over. Offer to lend them out.
Key To Success
The key to success in converting a NNPP to a productive member of the team is to work with them as much as possible. You want to create as many opportunites to work together as possible. Your enthusiasm and dedication will rub off onto the people you work with
Good luck, now go help your team to be the best it can.