Rants
Questions
Soapbox
Best Practices
Apply today for a FREE subscription to CIO Magazine!
Tue, Dec 2, 2008 14:23 EST

|
Posted by: Esther Schindler in Questions Topic: DevelopmentBlog: You're the Boss
Current Rating: |
I bet you could point to the weakest software developer in your department with little hesitation. But if I asked you to identify your criteria, it's unlikely that "metrics" would play any part in that judgment.
Since the earliest days of software development, the Suits have grasped at metrics to evaluate programmer performance. They started out by looking at the number of lines of code generated, and then the methods got even sillier. Every discussion about programming metrics begins by saying, "We know this is only slightly useful, but...."
The purported goal in collecting such measurements is to judge team members' production. With the best of intentions, a manager wants to use that data to strengthen and reward top performers, and also to identify weaker team members so they can be trained and improved. (Right. Its usefulness in "Who to fire or lay off" would never be relevant, I'm sure.)
The problem is... the metrics don't really help managers accomplish that. Just as you shouldn't confuse the map with the territory, looking too hard at metrics—any metrics—causes you to put your attention on the ruler, not the object being measured. Looking only at the yardstick makes you lose sight of the mission, which is probably something like "create happy users" or "deploy useful software on time and on budget."
I do understand the goal. Nobody wants to work with someone who is bad at what they do. Managers want to be fair and... well, not dispassionate, exactly, but at least even-handed. But judging a team member's contributions isn't easy. It's even harder if you're not looking at the developer's code day-to-day, or if your lack of technical expertise keeps you from understanding what you're looking at. (That's okay; you're a manager. Developers don't always expect you to write code anymore.)
Yet, I think you could do a quiet survey in any programming shop, asking everyone who the weakest contributor is—and probably get the same answer from most team members. (My gut tells me that you'd get less consensus from "Who's the best programmer?" but that's another discussion.) This all came to mind recently when, in the comments to James Turner's When Agile Projects Go Bad, a few Agile un-fans recommended that companies just "fire the bad programmers." Okay, maybe—but how do you know who they are?
That was the question I posed on LinkedIn and almost immediately I got a few dozen responses. You can read through the entire discussion if you like (I think it's fascinating), but in the rest of this blog post I summarize the wisdom I gained from some very smart software developers, and then follow with a few thoughts of my own. You'll notice one important thing: metrics aren't part of the criteria.
Developers whom others label as bad:
Attitude matters a lot to team members, much more than does technical skill. (Ignorance is curable, after all.) "There is a difference
Hi Esther,
I'd like to add a few (mostly qualitative) metrics to your and "LinkedIn's" set of criteria. These are what I use:
• She never asks inconvenient questions and always agrees with concepts that are descended on her from above.
• Any new thing is a pain for her. For example, she very reluctantly switches from one part of the system to another
• She prefers working by herself. Other folks prefer not to take her as a programming pair
• The amount of refactoring her code needs to go through is huge
• When you consider assigning a tough task, her name isn’t the first that comes to your head. It’s not the second either.
• Your key developers are very careful selecting the words while qualifying her work
• Her salary is below average in your team (I firmly believe that if you are letting go your highest paid guys, this just means you are poor manager and must be let go first)
Please note that I do not talk about personality misfit. This goes without saying. I also don't talk about the amount of work since this has already been covered.
I would add that I saw two types of bad programmers. One type is shy and quiet: they know what they are and try to get under the radar. Another type has absolutely inadequate self-assessment – those are easier to weed out.
Truly,
Eugene Nizker
Evident Point Software
I enjoyed Ms. Schindler's article very much but somewhat disagree (or at least need to qualify) her final example about the programmer who writes very "tight" and "optimized" code which is "difficult to read and understand".
In truth, easy-to-read and understand code almost always trumps tight and optimized code, especially in the context of who is the "best" programmer on the team.
Many programmers have an internal need to be clever and write the "best" code, when in truth, "good enough" but highly maintainable and understandable is usually better for the overall project.
Stuart
Boy, I can't agree w/ Stuart more! I have been a developer (and team lead and manager) for about 25 years, and there is nothing that makes me cringe inside more than seeing a block of code where the programmer was being 'clever'. It usually means that they exploited a unique characteristic of the target processor (i.e. the block in not portable), or a unique characteristic of the compiler de jour (again, NOT portable), or they are so full of themselves why not use 3 levels of indirection when one would do?
I just reviewed a block of code where the developer used an specialized assembly instruction which replaced a few others. The reason for doing this was to save memory, so on the surface the choice was justified. However, by doing so the developer failed to realize that the replacement code didn't actually work. For their particular use case it happened to work because it was a test that was being optimized to if(1) and the code that would have failed was skipped. The danger in this is that this developer could have taken this and put it into their 'bag of tricks', and used it in the 99% other cases where it would introduce a bug.
Clearly understandable and maintainable code wins hands-down in my book.
I think a development process may help a lot at identifying fast bad practices by team members (developers or managers). If these problems are not addressed, the badness virus will spread, even to the best programmers. They will start to care less and less and try to leave.
Agile processes produce work in short iterations, so they will highlight weak spots in the projects very fast, whatever their level is (dev, management, design, ...). In Scrum for example, teams meet daily, so trashing (be stuck on a problem for days) can be avoided. And Iterations post mortem is the place to wrap up what has worked great and what has not. Lessons are learned from each iteration.
What is interesting is absolute stereotypes are hard (if ever) to find. Between absolute black and white, there are many shades of gray and developers generally have combination of good and bad traits. This is what confuses non-coding managers big time identifying the bad apples or the weakest link.