Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I work as a team lead in a fast-growing services company. There is one developer in my team who's not performing well, and unable to solve even the simplest of the problems without being spoon-fed.

I have held multiple meetings with him and even sat next to him while coding to understand the root cause of the problem. He has very good grip on Java, however he lacks the analytical skills and IQ to understand the problem at hand and arriving at a solution. When I sat with him while coding, I noticed that he has good domain knowledge, awarness about the code base, but he cannot think and get solution to the problems and was unable to fix the bugs. He's also a comp sci., graduate. He knows that he is not performing well and I have tried motivating him, punishing him etc. He does spend a lot of effort and he is also focused. But there is no improvement in his performance.

Now, he's asking me for suggestions about what kind of job should he go for. He's very hard working and focused, it's just his inability to solve problems that is preventing him from performing. Should he be sent into software testing projects? Should we suggest him to go into technical support? What suits him the best based on the problem he is facing? Perhaps a technical writer job or something like that.

Please let me know your opinions on this, so I can advise him appropriately.


migration rejected from Oct 19 '15 at 14:58

This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

closed as primarily opinion-based by MichaelT, Ixrec, gnat, durron597, Snowman Oct 19 '15 at 14:58

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

Convince me that he indeed does have poor analytical skills. Provide a couple of examples please. Maybe your messy code base is to blame. I am not trying to be a dick, just want you to question your assumptions and explain to us why you think of him a certain way. How can one suck at programming and yet be familiar with Java code base well? Has he survived schooling due to excellent memory? If so, then he might do well in QA. – Job May 25 '11 at 20:12
what have you tried to do to motivate/punish him? I think the answer lies in motivation if there is an answer, but I am having hard time seeing how "punishing" could ever be beneficial. Is this programmer a dog? (If so I would be pretty impressed with his/her performance thusfar!) – Morgan Herlocker May 25 '11 at 20:18
+1 @Job - It is difficult to imagine a person who 1) has a good grip on Java, 2) knows the codebase, 3) has good domain knowledge, and 4) is unable to solve the simplest of problems using Java in said codebase in the said domain. I can imagine someone getting through school with flash cards and luck, but that person would be extremely unlikely to be able to have any of the positive traits the OP listed. Something seemed fishy the second I read "lacks the...IQ". It sounds like the OP dislikes the developer to me. – Morgan Herlocker May 25 '11 at 20:28
@ironcode - I disagree. I feel the OP presented a balanced view and sympathetic attitude toward the developer. He mentions his strong points and that he works hard and is trying. His tone doesn't suggest to me that he's got something personal against this person. – pthesis May 25 '11 at 22:30
Perhaps he just needs a better mentor? – user1249 May 26 '11 at 6:46

12 Answers 12

I had a similar team member working under me at my last position. He was a very hard worker and was great with ASP but leaving him with an open ended problem would eat hours and cause headaches.

One day in a ticket I gave him I outlined every step I wanted him to do, and guess what? It worked. He did every step in order and gave me a perfect solution that passed testing the first time through. From that point on I made sure that every ticket I gave him had steps to perform and things to check before committing. It took me some extra time to create the tickets, but in the end it was very much worth it.

I would suggest trying the same thing. If he is a good developer who knows your code base well, why throw him away? If you can find a solution that will work and will help him learn then you will both benefit in the long run.

+1 for recognizing skill threshold – user1249 May 25 '11 at 20:36

Have you thought that it may not actually be him, but you? The fact that you referred to "punishing" him seriously makes me think that there's something foul in your mentoring methods.

Take a step back. If this developer has a CS degree, he has already proven the fact that he possesses the ability to learn. It's your job as lead to figure out how to explain things to them to allow them to learn and progress in a professional environment.

Sometimes (although it's rare), someone is simply a bad hire. Without knowing him personally, it's impossible to recommend an avenue that he would excel in. In over 10 years of experience in an industry with a fairly high turnover rate, I've only seen this occur once. I'd take a look at your onboarding/mentoring methods prior to writing him off.

Commenters: comments are meant for seeking clarification, not for extended discussion. If you have a solution, leave an answer. If your solution is already posted, please upvote it. If you'd like to discuss this question with others, please use chat. See the FAQ for more information. – user8 May 26 '11 at 14:01

Just sounds like you have a junior programmer doing a senior programmer's job. I think what you call spoon-feeding is really explaining to a junior what needs to be done step by step. more you do this, more this guy will understand your style and start filling the blanks when you give less direction. it's part of growing him as a developer.


Provide a good analyst to the team. Not everyone does everything well. To the contrary.

+1 This is a great suggestion, and can help some developers focus on what they do best, coding! – Marcelo May 25 '11 at 20:37

He knows that he is not performing well and I have tried motivating him, punishing him etc

This really is not a good sign.

I'm intrigued that you sat beside him while coding to try and figure out the root cause of this problem. I think a better approach would have been to sit beside him while analysing the problem to be analysed and coded. Forget about the code for the time being and concentrate on the analysis. I'd also add, incidentally that I wonder how someone doing so badly at their job gets to write very good Java, get very indepth knowledge of your domain and codebase. Did this developer work for anyone else before he got to you?

You say you have had many meetings with him - have these amounted to you asking "why are you so bad at this?" It sounds at this stage to me as though the problem is irretrievable because you have put so much effort into making him recognise that he is bad at this, shot his confidence to pieces, haven't discussed the matter with him in a constructive manner - anyone who tries punishing him (god only knows what you did to achieve this) - is clearly not looking at this laterally. What it boils down to is you have a problem and you are failing to solve it. I suspect elements of it involve a complete and utter failure to communicate.

Given your description of how things are/have been, in his position I too would be looking for a new job. The difference is I don't think I'd be asking your advice for what sort of job that should be.


Fire him

I mean seriously. As you're describing him, and irrespective of his (hopefully awesome) coding skills, you'll need to be directing him step by step for pretty much everything he does.

That guy would have no place in my own team... He'd require that I spend more time on him than i'd take to code things myself.

And never-mind the specs, manager competence, problem solving skills and what not. If a coder can't code without you needing to spend more time managing him than it takes you to code it yourself, fire him.

This will get down-voted to oblivion irrespective of its relevance (this being a coders site after all), but heck.

Regardless... If I can code faster than it takes me to manage him, I don't need or want him around. – Denis de Bernardy May 25 '11 at 21:00
Oh sure, Donald Trump makes it sound easy on TV. In the Real World, however, there are, hum, other considerations. Besides, it's a poor manager who blames his staff. – Christopher Mahan May 25 '11 at 21:03
I think the coder is being blamed for the lack of a technical specification document. – Christopher Mahan May 25 '11 at 21:20
Every coder should have good problem skills. In so far as I've experienced it, problem solving skills makes the difference between a coder you want and one you don't. I'm aware problem solvers don't like boring tasks but they'll still be better at it than a code grunt. I'm also aware this answer will get down-voted to oblivion irrespective of its relevance. (This is a coder site after all...) – Denis de Bernardy May 25 '11 at 21:34
"A good coder should have an IQ high enough to google his way through any problem." This made me chuckle because of how untrue it is and how grossly it misunderstands the ability to problem solve. If all programming was was Googling for answers, there would be computers that could write programs for us. – Jimmy Sawczuk May 25 '11 at 22:45

Consider the context in which you're exercising his problem solving skills. It could be that you're right, that he lacks the intrinsic ability, and that you have to repurpose him to a less cerebral task. I find that unlikely, however.

Test his problem solving ability in different contexts. Problem solving is more an attained skill than some special power, and it takes time. Give him ever more opportunities to wrack his brain over things, and be supportive - don't pose a threat or make him question his own ability. If things still aren't working, give him easier problems and let him build experience and confidence.


Perhaps what he needs is some time in tech support where he can develop his his personal troubleshooting and problem-solving skills. Or perhaps have him split his time between programming and support. A few years of that added with this obvious existing academic knowledge of programming, should make him a decent programmer.


Recharacterize the Problem

Some people think differently than the norm. It could be that you need to characterize the problems in a different way, or using a different modality. He may be a visual thinker, someone who has to prototype his way through problems, and needs a metaphor to determine direction. Or maybe he has a totally different process he goes through to figure things out.

Has he done it before?

It could be he hasn't actually had to do real analysis or critical thinking. Maybe he needs guidance and direction in picking up these skills. It is not uncommon to find people fresh out of college with a distinct lack of critical thinking abilities or basic analysis skills.

Current Role Not a Good Fit?

Or maybe it's something about the work environment. The speed of development and decisions, the style or process used, or it could all be very confusing.

On the one hand if you have someone who has demonstrated ability in one area and familiarity with the codebase you want to do as much as possible to find a good fit for him in the team. Maybe he can transition to a role different role. QA/SDET, support, etc.

On the other hand if he isn't capable of doing the work required he may be taking up space better suited to someone who is capable of doing the required work.


[I don't have enough reputation to comment, so I'm posting my questions as an answer.]

  • What is his approximate experience level? Just graduated? Seasoned-professional? We'd expect a new programmer to require more "spoon-feeding" than an experienced one.
  • Does your role of Team Lead include the power to make demands of him, and ultimately fire him if it comes to that, or can you only recommend that he follow certain practices, and advise your management about his performance? We'll give you answers based on your ability to actually implement them.
  • Are you comparing him to other team members with similar skill levels, or is he the new guy on a team of veterans?
  • Do you know his actual IQ score, or are you just very frustrated with him? Be nice... we'll be more sympathetic to you.

Get them to play Tetris on a regular basis. It will really improve their analytical skills. Next play strategy games like Starcraft. Seriously. Then, poker. If (fail); coder>dev/null


Code reviewer or maybe an integration (or whatever you want to call them) tester/writer.

Making him "Code Reviewer" is like making an under-performing journalist the editor of the newspaper. – Morgan Herlocker May 25 '11 at 20:14
First reviewers/testers I have worked with don't change code, they simply point out what is wrong. The developer responsible figures out how it should work. Even so there are plenty of people that can tell you if a sentence is technically wrong and even be able to give a explanation of what is wrong. They can create technically correct sentences but they cannot create prose that conveys meaning. So you make him a copy editor. – ElGringoGrande May 25 '11 at 21:07