It does not take a Superstar - Developer types enumerated
As someone who more recently has taken on more of team lead duties (*cough* project manager *cough*) I've had to reflect on how to dole out tasks and my success (and some failure) at this has really caused me to refine my understanding of different developer types I've known over the years.
So I've tried to enumerate different types that probably many of you are familiar with. These types probably don't 100% encapsulate somebody - often you'll see a number of these types in one person, or one type might dominate at any one time.
Also I'll try to give each type a rough score on a few dimensions. Dimensions that help me to assign tasks or pair people together.
1) Gets-it-done: Can be relied on to get the job done, fix the critical bug and will work with whoever it takes to do so.
2) Plays-well-with-others: the phrase "team player" is over used. I'm just talking about someone who gets along with others, who people like to work with.
3) Bugs: How many bugs in their code? How serious?
4) Code Quality: Is their code readable? Extensible? Good unit tests?
and I'll rank each types on these dimensions as: fair, good or excellent
Ok so here goes
Type #1: The Communicator
This is the developer that has great communication skills - speaks really well, listens and writes well. They can communicate complex topics easily and also they're great to pair up with business analysts/product managers/business folks to help tease out requirements. Very valuable when you need to have someone work with other teams. Good code but not the greatest but often it's readable and extensible and well thought through.
- Gets-it-done: Good
- Plays-well-with-others: Good to Excellent
- Bugs: Good
- Code Quality: Good to Excellent
#2 The Diva
This is the person who can just blow you away with the amazing product they create but boy do you have to massage their egos and keep them happy. In a crunch when things *must* get done you're just not sure which side of them is going to show up.
Very valuable often in the creative design or prototyping phase when they can come up with fabulous things no-one can think of or no-one thinks is possible. On the downside, they often have a surprisingly high number of bugs often which they attribute to the (lack of) intelligence of the user.
Not someone that works well with other teams! And if they don't respect your technical acumen - BOY! will they try to run roughshod over you. And God forbid you give them a deadline or pressure - the moaning and complaining and drama! AAGGHH!
- Gets-it-done: Fair-to-Good
- Plays-well-with-others: Fair
- Bugs: Good
- Code Quality: Good (not as good as they think though!)
Side-Note: What's really funny is when you've got TWO divas on your team. They really tend not to like each other. Ironically because they think the other one's insufferable. Oh boy!
#3 The Genius
This is the one that knows the technology platform inside and out. They can come up with great solutions. But too often they come up with great solutions that no-one needs and/or the solution just doesn't work well with other teams' work.
They have great code - unit tests, readable, extensible, little duplication. Low numbers of bugs but when there are bugs it's usually a *huge* one that suggests they really didn't think through how their work would be used.
Their throughput isn't great as they tend to overthink things - so those huge bugs might take a week to address even if it's blocking everyone. They're similar to the "Diva" just without the drama and they're pretty level headed. Also similar to the Diva they don't work well with deadlines. They also have the nasty habit of checking in major things right before everyone else's deadlines - and then the fire drill that ensues . . . . . . . sigh.
- Gets-it-done: Good
- Plays-well-with-others: Good
- Bugs: Good
- Code Quality: Excellent
When it "absolutely, positively has to be there overnight". Reliable, solid people with good code, little drama. Just gets it DONE. Period. This person is the savior for the team lead or project managers worst moments.
Often plays well with others, may not be the best communicator and has a fair few bugs but you don't really care because they fix them so fast. Also when it's fixed it's FIXED! May not be the smartest one or the most creative but they don't need to be - they lack the drama and often are good learners too. Good to pair with a "Diva" or "Genius" as this person is often more practical and will fix critical bugs fast.
- Gets-it-done: Excellent
- Plays-well-with-others: Good
- Bugs: Good
- Code Quality: Good
Entrenched in the organization often through many years experience. They have some knowledge or skill that you just don't think you can replace. Not necessarily a bad or nasty person. It's just they're grouchy - you don't want to ask them a question or give them a task.
They get the job done and don't cause too much hassle outside your team. They fix bugs reasonably fast but often the code is unmaintainable or unreadable (can you say "Job Security"?) and they don't want to listen to you about FindBugs or Unit Tests or things like Refactoring - yeah that class with 40,000 lines of code looks GREAT!
- Gets-it-done: Good
- Plays-well-with-others: Fair to Good
- Bugs: Good
- Code Quality: Fair to Good
And then there are a few types that we'd all wish we didn't have to talk about but often must deal with . . . . . .
The not-so-smart one
Ouch, you wouldn't have hired this person if you had interviewed them but often you inherited them. They don't want to learn. try-catch-finally blocks scare them. They use arrays because they learned them in C and learning about a Linked List seems unnecessary (and they just love fixing ArrayIndexOutOfBoundsException).
They're just not interested in staying current or learning from others. Usually every problem is someone else's fault or someone else's responsibility. Their solutions lack any creativity or planning. They're just not cut out for this.
- Gets-it-done: Fair
- Plays-well-with-others: Fair
- Bugs: Good
- Code Quality: Fair
Yes this happens. This is the developer that throws everyone else under the bus. Often associated with "The Genius" or "The Diva" this is the one to be very wary of. If you share a boss in common you're going to need to keep your ear to the ground to make sure they're not throwing YOU under the bus.
They're often tolerated because they're really smart or they work in a culture of blame and backbiting where it's tolerated. Often it's wise to have a network of friends in your workplace who look out for each other - usually this guy (and let's be honest it's usually a guy) can be sidelined if lots of folks stick together. Another approach is to befriend this person. Really listen to them and try to bite your tongue. Get their opinion on things (as they're often high on themselves) and pretend like you care about it :-) Then they'll often go after someone else.
Also don't email them anything - they'll twist it and use it against you. However you *must* reply to them if they attack. Which they do. The hard part is when they attack without you knowing.
As the team lead I will go 110% out of my way to defend myself and my team from these ones. Boy do they irk me. Best of all they try to throw their intellectual weight around. I *love* when they try to do it with me - try, just try! Oh and when they screw up (no-one's perfect remember) the payback from all the other teams - WOW!
When they leave or are fired there's a palpable sense of relief across the organization. Often your boss knows all this well enough - they're just looking for the right opportunity to replace or neuter this one.
- Gets-it-done: See Diva/Genius.
- Plays-well-with-others: Awful
- Bugs: See Diva/Genius
- Code Quality: See Diva/Genius
Wrap-up
The biggest conclusion I've taken - and a big surprise to me - it doesn't take a Superstar! In fact I don't think such a person exists. You've got different people with different skills and personalities. No-one's got it all. Although you might think you do *cough* Diva *cough* :-)
Often you get great productivity and great product by the right pairings - the Diva with the Fedex guy/gal. The Grouch with the Communicator. As long as they're WILLING to get along you can really pull together a great diverse team of people whom it becomes a pleasure to work alongside.
Labels: code quality, productivity, programming, project management, software development process








5 Comments:
Great post! Now you have me wondering which of those I fit into?
3/31/2008 12:25 PM
Nice post Frank, great stuff.
4/02/2008 1:05 AM
A really detailed (and honest) insight into the developer psyche!
4/02/2008 6:49 AM
Hey there! You have a great blog and I do appreciate your patience, passion for doing things and for posting all the minute details. I know it consumes a lot of time to edit and post those good articles on your blog. Great job, man!..Kudos and Respect! Maybe sometime, I would ask you for the feedback for the posts on my blog (Technical blogs not updated yet). ;-)
5/15/2008 4:26 PM
Wonderful blog. I am moving into an architecture role and have enjoyed reading your thoughts.
6/04/2008 12:47 PM
Post a Comment
Links to this post:
Create a Link
<< Home