There is a colleague who seriously knows his stuff, he is one of the brightest I've ever worked with, but he:
- works in his own little area of his home directory rather than in the common CVS repository
- doesn't document his code
- doesn't comment his code, e.g. 3,500 SLOC of C with no comments and no blank lines to break things up
- often overcomplicates things, e.g. uses three shell scripts that call one another to do the work that one simple shell script could do.
Maybe this possibly is one of those people who thinks "if I'm the only person who knows this, they can't get rid of me"?
Any suggestions on what to do?
BTW Management knows about the situation and are trying to change things.
Code documentation is over-rated. CVS training is easy.
A good class should reveal its purpose through its methods and properties.
Documenting the model outside of the application is also easier to flow and comprehend.
I would bring it to his attention, if you can't get it resolved looks like you will be losing a star developer.
Edit: Oops - used CSV instead of CVS, to many imports and i use svn heh.
I agree with most people on this thread. One way to put him on the hot spot is to have Team Code Reviews.
For the first code review meeting choose code from a team member that is open and will accept the recommendations. The "star" developer will have the chance to see how the code review works and then you can schedule his code to be reviewed next. Give him some time to prepare for the next meeting and by then he should be at least commenting his code.
The intention of code reviews is not to put shame on people but rather to collaboratively identify issues and places for improvement, but it will be a good way to put the star developer on the hot seat.
Talk to him?
If he really is a "star developer" he'll take note of what you say.
It may not change him overnight but it might be that he is just completely unaware that other people dont get it quite like he does.
Edit:
It's probably a bit late to change now, but more information is needed in working out a solution. It's impossible for anyone here to actually suggest letting the guy go based on these points alone. If you've been telling the guy every day for the last year that he needs to change or he's out of here, then you can let him go. However, I see no evidence of that.
A brilliant developer can be taught to use source control, comment and document. If you spend the effort here then you truly will have a star developer.
I think this is pretty typical in any environment. How do you get someone to do what you want? This is exactly what "How to win friends and influence people" is all about. Dale Carnegie was not about manipulation, but managing people.
It sounds to me like he's just inexperienced and needs some experience and guidance.
Do you think you can sit down and talk to him about these issues? Telling someone they're doing something wrong often seems like the wrong thing to do (especially in today's western society where we don't want to hurt other people's feelings) but I think you can get very far by calmly and honestly explaining the issues and talking them through. It helps if the person respects you and your opinion, which is a whole other issue and is talked about in the book mentioned above. Make sure he understands that these are serious issues. Also, that in any future development jobs he'll be expected to do these things too so it's a good idea to practice them now.
I don't think waiting until the next performance review is a good idea. Piling up a bunch of negative feedback and delivering it all at once is just a bad idea and I really disliked it when that was done to me.
From what you describe, this fellow is distinctly not a star developer. Programming is a team sport, and those who do not play well with others do not add much value to a project.
Personally, I might not remember code I wrote 6 months or more ago, and very much value a history of the changes in some sort of Source Control.
If you had regular code reviews with this guy I think you would see that he's not as stellar of a developer as you think he is.
Sounds like a star programmer who's bored of his job and is over complicating things to make it more of a challenge. He'll find something better soon enough.