I know this may sound like a totally silly question, but here it is:
Did you meet a programmer who is running out of luck ? We have a colleague that is not getting any work done, every task that is assigned to him hits a major block (a bug or a missing piece of information). If we put anyone else on it, it just gets done. That guy didn't use to be like that at all.
It is just that the answer is right in front of him and he still can not see it. He has been distracted for a very long time now (5 months at least). We tried giving him days off and long vacations. We even let him choose what to work on.
However, we feel helpless and I am not sure how we should handle this. Firing someone is the hardest decision to make.
Any help/suggestions would be greatly appreciated.
As a manager, it is your duty and responsibility to produce with the people you have, motivate them, and understand their problems both inside and outside of the workplace, without getting too personal (unless he wants to, and I would still raise some warnings, you are his boss, not his friend) or interested in details that have no relation with the job. Yearly assessment meetings are also for this, but you can call an assessment meeting any time, with the important point that it's not for productivity assessment, rather a "mood assessment". Don't be an inquisitor. Use a relaxed setup: an afterwork, or a beer break, but still keep the fact between you and him, and at the workplace, not in a pub. Behave friendly, but without being a friend.
If the guy is in a bad period, firing him is not the solution. Firing is for people that effectively damage the company. Firing someone from a company is like killing brain cells: a fired person will bring all his knowledge with him, leaving none to you, and worst of all it will bring it to a competitor.
Allocate him to simpler tasks for a while, or propose him a part-time. Work is not the only part of life. Marriages go bust, health can go bust, parents can die or be sick, children can be troublesome. If the guy is smart and at the senior level, he is not a slacker. He probably has troubles. Unless he really hinders your productivity, I'm sure you can still have him productive somehow. Also, never underestimate that little ugly sickness called depression. It's one of the major diseases today. Having a good company shrink can be a good idea sometimes (if he is a qualified person), but remember that depression is a health issue, not a mental state, so a psychological counselor can help in recognizing the problem and providing suggestions to him, not fix it. That's something a doctor has to do.
How much should you wait? in order to obtain results, it depends on his problem. In order to act, I think you shouldn't wait for the situation to adjusts by itself. You should (must) do something, as it's your responsibility. Lower the pressure on him, have a chat, check how he behaves, and then decide how to proceed, eventually adjusting your decision as time passes. But never let him feel guilty unless he is acting in a consciously disruptive way.
A good idea could be to have him pair program with someone else. You will still keep him active (in terms of experience and suggestions) without too heavy involvement in the project. If he stumbles, there's the pair programmer who can help him out.
And another important point, keep other employees oblivious of this treatment. You must be ready to properly take decision for everybody, without being too transparent on why/how you take them, otherwise you could be accused of favoritism. If your company is new to pair programming, say to the others you are trying an experiment, and potentially also with top managers (and be ready to justify it, eventually putting some force into it). You are the interface of your team, you should protect them, defend them, keep the "upper floors" heat from distracting or disgruntling them, and direct them so that they can give the best they can. You should not let top managers mess with the private parts of your team, unless there's a real need to.
Lots of the other answers say this, but they're all too wordy:
Talk to him!
Find out if he's aware of it, what he feels is affecting him, and so on.
And above all, be supportive and a human being, not a "businessman".
I've been this person before in some jobs where what has happened is a combination of a few things:
There are 101 other things to fix but that aren't a priority and so while I have these other sucky things around it does somewhat demotivate me from doing things as nothing is being done about these things that for me are a priority but I'm not sure how to say, "IMO, this sucks and should be fixed soon," without sounding all hoity-toity. Another way to view this would be that when I start working someplace I don't see all the broken windows that may be there, but over time this can become clear and lowers how hard I work in a sense.
When I try to do things that I believe should be done, I will get chewed out for that but if I do nothing, this seems acceptable. For example, if I fix a bug that wasn't supposed to be fixed so soon and I have to go undo the fix and have been told this in front of the rest of the developers in the company.
Communication breakdown can also be a cause for some of this. If I don't have a bond with the boss that I go to and say, "This isn't working well," or "Could you give me something else to do," then I may go quiet and the quality of my work can suffer. The challenge here may be that I'm not sure what to do first or how to approach things which can be somewhat annoying I'd think.
Misguided praise. This is where I know what I did was mediocre or crap but someone else thinks it was good or awesome. When I get this, it is like a mixed message in terms of, "Well, if you like me at mediocre, why should I try to do any better?"
Note: I'm not saying this is good or proper behavior, just that I used to be a bit lackluster and these are various rationales for how I got into this situation.
Have you tried directly asking him directly about his degrading performance? There could be a number of reasons for what you describe. He may not feel challenged. Or he is unhappy with the management and no longer dedicated to the company in which case it really would be best to let him go and find some place he will be happier.
Ultimately I suggest you confront him and find out what is going on. After that, depending on what information you get you will be able to make a better decision about firing or keeping him.
Have you tried calling a priest to cast off whatever has come onto the guy?
Perhaps he is just burnt-out. I would suggest that maybe he needs a long vacation or he needs to switch jobs or career-paths.
You don't have to fire him, but instead talk with him about what it's going to take to turn things around. Moving on sometimes is a good thing, for everyone involved and maybe that needs to be encouraged. Or maybe he really just needs four weeks on the beach and a good book.
Either way, you have to set expectations and goals and checkpoints, be understanding and as helpful as possible along the way, but in the end it's a business and if work isn't getting done, then he has to go.
I've had this with developers before. Check out manager-tools.com [1]. It's a management coaching podcast/site. They have some good pointers on coaching people, giving feedback, and if necessary, eventually rolling them out of the organization.
Matt
[1] http://manager-tools.com/5 months? seems like a long time to be thinking about it, what I would suggest is:
It is a dangerous thing for a programming environment to base theories on luck
Either the employer does not know what is suitable for the employee.
Or, the employee is not up to work (at least these days).
In this case, it appears to be the latter.
It might help for him to recheck his interests and maybe change his work
(within or outside his current employment)
I don't understand why everyone is saying keep him, console him, blah, blah. After 1 or 2 months maybe, but if he has been a consist problem for 5-6 months, cut him loose. He may not admit it, but he needs to get away, for good. The best thing for him sounds like a) a wake up call (firing) and b) a new place to work.
I don't want to sound like a d*ck, especially in this economy, but (especially in this economy), your team needs to be produce. I don't care if the guy wrote the whole .Net Framework by himself, if he is not producing, he needs to go. You are wasting your time, and other developer's time, dealing with him and going back over his code.
I think the fact that he WAS such a good developer before was the reason you keep him for the 5-6 months. If he was a Junior Developer, after 1 or 2 months of no results, he would be gone. Senior Developer ... ok, you gave him 6 months, bye bye.
Well really we can't diagnose this dev's issues here but it sounds like maybe he has lost interest in the work you do (no longer feels inspired), he's not interested in being a dev any longer, he has family/personal issues going on outside of work, etc.
The first step is communication. Talk with him. Make sure he is aware of the impact he's having on the team. If he's a valued team member then put in the effort to pull him back. But it starts with communication.
I saw a very similar case. The management were clueless, they couldn't explain what's happening. The guy was just a slacker with a side job (not programming related). He was fired eventually, but he had managed to get a few month's salary for nothing.
If I were you I would:
Perhaps he has a personal problem (maybe even an illness he is not aware of), or maybe he just lost the knack [1]
[1] http://www.tv.com/dilbert/the-knack/episode/12014/summary.htmlFire him. Sorry, but I've been through this many times, and I've never seen the problem resolve itself. You'll be doing yourselves and him a huge favor.
There are no many things that I can apport to this theme. The only thing perhaps is tell you to have some patience, if this person is a really value one. It seems to be just a bad time for him. If not, just find out if there's a reason to act this way with the company. Maybe that's the problem.
Hope you fix it in a short period.
I'd recommend two actions:
1.) analyze if the workload is too high for the whole team and especially for him. If you feel like that, make meetings with your team and talk about the whole situation and find solutions to reduce the workload.
2.) if #1 does not help (or is not the real reason), talk to him alone. Maybe he really has some personal problems that stop him from doing his best (like he did before) and he has no other people to talk to. Maybe you can help him to find a way out of his situation.
Let him tell you what's wrong, don't blindly guess solutions.
Sit him down and say something like, "You've been an amazing programmer for the last X years. Remember that time you found that bug in Y? Or got Z out the door a month early? Recently I've noticed that you've been having some trouble, though, with project W. Is anything wrong? Is there anything we can do to work with you to help you get back in the groove?"
Make sure you let him know what a great programmer you think he is, and that you're eager to help him out of this rut.
Team him up closely with an enthusiastic but inexperienced newbie.
Sometimes people lose motivation, the motor to keep them going, doing things. There is no known cure. It's known as writer's block, artist's block and a dozen different names in other domains. One solution is a person to take them along on the ride. Someone who has the will but not the knowledge - the newbie does all the typing of the code, the experienced guy tells what to do, how to do it, spot errors, correct caveats, design. The newbie should be happy to follow experienced guidance and produce excellent code he would not be capable of without such help.
I myself often face a problem I spend a long time to solve, and fail until I ask for help - then presenting the problem to a colleague I spot the error and solution myself - I could talk to a janitor who has no clue about programming and it would still work.
Of course as the newbie gains experience and earns his wings, you will have to split the team and assign a fresh newbie - with a praise for a job well done for the experienced programmer of course.
If he has skills above the average, he is just looking for recognition. Otherwise you can ask him what he’d change in the environment.