Dealing With Bad Apples

July 17, 2008

Robert Miesen sent in this story of a project pathology:

I was part of a team writing an web-based job application and screening system (a job kiosk the customer called it) and my team and our customer signed on to implementing this job kiosk using Windows, Apache, PHP5, and the ZendFramework -- everyone except one of our team members, who I will refer to as "Joe". Joe kept advocating the use of JavaScript throughout the technology deliberation phase, even though the customer made it quite clear that he expected the vast majority of the job kiosk to be implemented using a server-side technology and all the validation should be done using server-side technology.

The fact that the customer signed off on this, however, did nothing to deter Joe from advocating JavaScript -- abrasively. Every time our project hit a bump in the road, Joe would go off on some tirade on how much easier our lives would be if we were only writing this job kiosk in JavaScript. Joe would constantly bicker about how we were all doing this all wrong because we weren't doing it in JavaScript, not even bother to learn the technologies we were actually using, and, whenever fellow teammates would try and gently bring him back into the fold (usually via email), Joe would just flame the poor guy. At the height of Joe's pro-JavaScript bigotry, he would regularly belt off comments like, "Well, if we had only done it in JavaScript," to such an extent that the team would have been better off if he had just quit (or was reassigned or fired.)

After reading this story, I had to resist the urge to lean forward, hand placed thoughtfully under my chin, brow furrowed, and ask -- have you tried JavaScript?

Robert thought this story was a cautionary tale about technology dependence, but I see something else: a problem team member, a classic bad apple.

an apple goes bad

I'm sure "Joe" had the best of intentions, but at the point where you're actively campaigning against the project, and working against your teammates -- you're a liability to the project.

The cost of problem personnel on a project is severe, as noted in Chapter 12 of McConnell's Rapid Development: Taming Wild Software Schedules.

If you tolerate even one developer whom the other developers think is a problem, you'll hurt the morale of the good developers. You are implying that not only do you expect your team members to give their all; you expect them to do it when their co-workers are working against them.

In a review of 32 management teams, Larson and LaFasto found that the most consistent and intense complaint from team members was that their team leaders were unwilling to confront and resolve problems associated with poor performance by individual team members. (Larson and LaFasto 1989). They report that, "more than any other single aspect of team leadership, members are disturbed by leaders who are unwilling to deal directly and effectively with self-serving or noncontributing team members." They go on to to say that this is a significant management blind spot because managers nearly always think their teams are running more smoothly than their team members do.

How do we identify problem personnel? It's not difficult as you might think. I had a friend of mine once describe someone on his team as -- and this is a direct quote -- "a cancer". At the point which you, or anyone else on your team, are using words like cancer to describe a teammate, you have a serious project pathology. You don't have to be friends with everyone on your team, although it certainly helps, but a level of basic personal and professional respect is mandatory for any team to function normally.

Steve outlines a few warning signs that you're dealing with a bad apple on your team:

  1. They cover up their ignorance rather than trying to learn from their teammates. "I don't know how to explain my design; I just know that it works." or "My code is too complicated to test." (These are both actual quotes.)

  2. They have an excessive desire for privacy. "I don't need anyone to review my code."

  3. They are territorial. "No one else can fix the bugs in my code. I'm too busy to fix them right now, but I'll get to them next week."

  4. They grumble about team decisions and continue to revisit old discussions long after the team has moved on. "I still think we ought to go back and change the design we were talking about last month. The one we picked isn't going to work."

  5. Other team members all make wisecracks or complain about the same person regularly. Software developers often won't complain directly, so you have to ask if there's a problem when you hear many wisecracks.

  6. They don't pitch in on team activities. On one project I worked on, two days before our first major deadline, a developer asked for the day off. The reason? He wanted to spend the day at a men's clothing sale in a nearby city -- a clear sign he hadn't integrated with the team.

Let me be quite clear on this point: if your team leader or manager isn't dealing with the bad apples on your project, she isn't doing her job.

You should never be afraid to remove -- or even fire -- people who do not have the best interests of the team at heart. You can develop skill, but you can't develop a positive attitude. The longer these disruptive personalities stick around on a project, the worse their effects get. They'll slowly spread poison throughout your project, in the form of code, relationships, and contacts.

Removing someone from a team is painful; it's not fun for anyone. But realizing you should have removed someone six months ago is far more painful.

Posted by Jeff Atwood
146 Comments

I posted this on Joel on Software as well, but I'll repeat it here:

IMO its this herd mentality that's wrong with software development. People who voice concerns or suggest alternatives that the rest of the team aren't aware of or don't understand (and trust me, it happens more than you think. A lot of teams get into the assembly line mentality where its We do it this way because we've ALWAYS done it this way) get labeled bad apples and let go, when in reality they're the RIGHT ones and everyone else is doing it wrong.

Let's take this one step further and change the circumstances. Say you're on a project where nobody uses Source Control, and thinks it's a waste of time or doesn't see the benefit, and Joe is the one guy pushing hard for them to use Subversion. Or Unit Testing. Or whatever. Is Joe still a bad apple?

Wayne M on July 21, 2008 9:41 AM

The word bad entered the programming lingo the moment VB came off the presses. It encouraged all kinds of wrong choices in programming and created a low entry bar for wannabe programmers. This in turn created a need for bad apple recognition. It also created legions of self-proclaimed code policemen who knew all about bad coding but could not code themselves.

Classic ASP was no better. It was even worse than VB.

And then, there is a dude syndrome and jock syndrome on the teams (you know the guys who have to jog between two builds :)))) to get it right.

Cultural fit in programming is fairly easy. Hire geeks. Don't mix them with jocks and wannabes.

BugFree on July 21, 2008 10:34 AM

she isn't doing her job.

Got anything against women????

Alletha


Yeah that struck me as odd that you generalized all bad team lead/program managers to be women. Did you have a bad experience or something?

Joe Beam on July 21, 2008 12:19 PM

Are you a bigot? Do you despise masculinity? Don't ruin your excellent thoughts by using she as a genderless personal pronoun. It's pedantic and trite.

Hulk on July 21, 2008 12:23 PM

Perhaps sometimes you are not the bad apple, but you are surrounded by bad apples.

Rubem Azenha on July 21, 2008 12:47 PM

This entry isn't about dissenting views, nor is it about promoting the idea that a team should be a bunch of sheep. The bad apple is a bad apple because of a couple key factors that have nothing to do with the fact that their viewpoint was different than the rest of the group. Jeff could have re-worked this same example to make the Bad Apple *right*, but have the same destructive behavior in a team environment.

What made the Bad Apple bad is their constant I told you so... reminders and constantly using excuses of why their performance is bad (I could have been done already if I'd used... ). They don't need ego-stroking (i.e., your skillz are gr8!), they need to grow up. Whether or not JS is the best technical solution to the problem is irrelavant; in my experience these types of people are never hppy in a team environment. If it wasn't JavaScript, they'd read an article on an exciting new technology and want to use it, and it would be Technology X instead of JavaScript in the story. It's not about being right; it's about how you treat those around you who are wrong.

RE: We get paid to solve problems. Sure we do. But if I hire someone and put them on a team, I hire them to solve problems *as a team member*, not as some Prima Donna who constantly has to be ego-stroked. Relying on hot shots for success is like letting your attention drift when your spouse is talking to you... you might get away with it once or twice, but sooner or later it's gonna be painful. Teams are a far more sustainable way of running IT projects than indivduals.

RE ..to solve *problems*. Presumbably , the avoidance of JS in this example is *part of the problem definition*. I call this out because I've been on projects where using Technology Y was a part of the problem that we were trying to solve (right or wrong), in addition to the business value. In this case, Bad Apple was being paid to solve a problem alright, which included not using JS. If its an external choice and your team has no say in the matter, as suggested in the story, it's time to play the cards you're dealt with professionalism.

That's the worse thing about this industry. It's not sheep mentality. It's a lack of humility (NIH, Bad Apple, all caused by pride). Humilty is what makes a senior developer a senior developer.

HAL on July 21, 2008 12:48 PM

As an interesting tie in, on July 14 you gave a story about Cofax:
After two months of the team pushing numerous releases thought to resolve the issue, to no avail, we came back to my original arguments.

Are you advocating he should have been fired even though he was right?

Chris Lively on July 21, 2008 12:51 PM

Bad Apple said it nicely. Broken organizations (and teams) are just as common as broken individuals. In fact, working solo rather than as a part of a team has become norm. If you are not pitched against each other in your team, you may not be working on bleeding edge projects. I work with so many organizations whose developers are so isolated from each other (in terms of true collaboration), that team work practically does not exist. In that environment, you need to be extra productive to survive. And that's all that matters to CEO/CTO. Teamwork is often a nuisance for management, interested in results only even if team does not function.

BugRree on July 21, 2008 1:00 PM

Cultural fit? That's great provided your own culture isn't pathological. It's also a fantastic way of ossifying that same culture.

Michael T on July 21, 2008 1:02 PM

It's always possible that the bad apple is just a jerk, but maybe his complaints are a symptom of an uncaptured or unexamined requirement?

The point being that if everyone understands all the requirements, then β€” at least in theory β€” they ought to agree on the relative merit of proposed solutions to those requirements. If people disagree, then it may be because someone's analysis of the solutions is wrong, but it may be that the set of requirements is incomplete or poorly understood.

Here is the requirement in question: the customer made it quite clear that he expected the vast majority of the job kiosk to be implemented using a server-side technology and all the validation should be done using server-side technology.

Now some developers may be happy to live with this kind of instruction from the customer. I'm not: customers don't always know best. So I would be keen to understand this requirement in more detail: is the customer specifying server-side technology *only*? Or are they sensibly concerned to ensure that server validation is performed on the server in *addition* to any client-side validation? (To avoid being hacked by someone who can bypass the client-side validation.) If they are specifying server-side processing only, then *why* are they doing so?

Maybe it's a sensible reason β€”for example, the site must be compatible with particular browsers that don't support JavaScript. (Even then, client-side validation could be turned on in browsers that do support JavaScript; but maybe the customer is rightly concerned about the extra workload involved in supporting two different site configurations.)

But maybe it's a poor reason β€” the customer's last contractor used lots of JavaScript and delivered behind schedule and over budget, and the customer incorrectly believes the one caused the other. In that case, maybe the bad apple has a point and the issue needs to be revisited.

Gareth Rees on July 21, 2008 1:14 PM

Hey, how do you deal when the cancer developper is one of your boss ? (sorry if someone already asked this)

We can't touch his files because it's too complicated but in fact it's just a bunch of copy-paste from his last year pages ...

He makes files of 800 lines with no comments, some variables are used, some not.

Sometimes you have to open 5 files to find the variable that is used in the file your debugging and there's no comment/reason about it...

etc...

some1 on July 21, 2008 1:52 PM

BUT

Stop using that word!!! Very bad, particularly if you use it with male listeners. They hear nothing before the BUT and everything after it. When I was being trained as a kayak coach it was the most useful lesson I ever learned.

Also works with children too.

And don't forget the old adage you have two ears to listen with and one mouth, use them in that proportion.

Francis Fish on July 22, 2008 4:28 AM

This got linked over at Joel on Software, and I responded over there, but I think it also belongs over here. I was reading a book [1] over the weekend and one passage (pp 122-123) in the book struck me as very relevant to this post:

At a meeting a few months ago I witnessed such constructive anger. Five of us were planning a research project. John objected to our plans, telling us we were being naive, reinventing the wheel and were, by implication, poor scholars. Ralph replied, noting what we had indeed taken account of, and the discussion proceeded. John again interrupted, repeating more forcefully what he had said earlier, as if he had not heard Ralph's answer. We tried to proceed without answering him directly, but he would not let us. Ralph then interceded, telling John that we had heard him, that we disagreed with him, and that we could not let him interfere anymore. He could stay if he either would be silent or wanted to help, but if he couldn't, he should leave us alone. I listened carefully to Ralph's voice and watched his face [2]. I saw and heard firmness, strength, and determinations, perhaps just the slightest trace of impatience, a trace of anger. There was no attack on John, no mention that he had become obstreperous, which indeed was the case. Not attacked, John did not defend, and in a few minutes, left the room, seemingly, from his behavior later, without any resentment. Ralph told me later, when I asked, that he had felt mildly angry. He said he had not planned what he said; it just came out that way. Ralph's specialty is teaching children how to deal with anger.

Everyone has a harder time controlling their anger when they are in an irritable mood. When we are irritable, we become angry about matters that wouldn't bother us if we weren't irritable. We are looking for an opportunity to become angry. When we are irritable, something that might have just annoyed us makes us angrier, while something that would have made us just moderately angry make us furious. Anger felt in an irritable mood lasts longer and is harder to manage. No one knows how to get out of a mood; sometimes indulging in activities we really enjoy can help, but not always. My advice is to avoid people when you are feeling irritable, if you can recognize that you are in an irritable mood. Often that isn't obvious until we have the first angry outburst, then realize it happened because we are feeling irritable.

I have seen folks with Ralph's skill at defusing anger, and it is one I don't have at this time. However, I need to cultivate it. And Paul Graham pointed out:

You need to be able to watch your own thoughts from a distance. That's not a radical idea, by the way; it's the main difference between children and adults. When a child gets angry because he's tired, he doesn't know what's happening. An adult can distance himself enough from the situation to say never mind, I'm just tired. I don't see why one couldn't, by a similar process, learn to recognize and discount the effects of moral fashions.
http://www.paulgraham.com/say.html

As another poster over at JoS pointed out, cranks (or bad apples, if you prefer), seem to think something along the lines of they don't get it, I have to make them understand. And if we had Ralph's skill at defusing the situation, we could make it very clear to the cranks that yes, we hear you, and no, you can't have a pony [3].

Notes:
1 - Pages 122-123 of: http://www.amazon.com/Emotions-Revealed-Second-Recognizing-Communication/dp/0805083391/
(If you want to read the section on google/amazon books, search inside for ralph).
2 - This is a book about facial expressions and the emotions behind them.
3 - I think my campaign slogan for this November is no you can't have a pony. Far too many people want me to make irrational and ludicrous promises if I get elected, and they get really bent when one points out the impossibility of their wishes. And I can see how politicians just take the easy path and promise everything to everyone knowing full well of the dishonesty in doing so.

Peter on July 22, 2008 9:08 AM

Sometime, it is more complicated. Example : the client has choose a framework (say Castor-JDO) and if you want to deal with him, you have to use it (he doesn't want or can't change that choice). You, has a team manager, and all of your team members, know that XXX (say Hibernate) his much better.

It is really hard to say to your teammates: I don't want to hear anymore it would have been easyer with XXX. Use YYY and shut up.

You deal with the money part (get the contract).
They deal with the technical part in bad conditions.

So, sometime the whole team can be considered has bad apple ... as I experience it.

ECC on July 22, 2008 10:26 AM

Come on guys, how hard is it to just do YOUR job and if the other person doesn't want to, then you pitch in and do it until they get left behind? Its a choice, you either want to pitch in or not. It's not compilcated at all. You guys all sound like you depend on management to do their job. I can take management or leave em, makes no difference to me... unless the manager can't get me enough to work on. Then I've got a real problem.

car on July 22, 2008 11:04 AM

she isn't doing her job.

Got anything against women????

Alletha

Ah come on, be fair now. We've been (well other women have been) complaining about male-oriented language. So here you've got a guy who consciously avoids that and you ding him because there's a negative situation around it? I don't think using male pronouns in negative stories and female pronouns in positive stories is very nice, do you?

gex on July 22, 2008 11:45 AM

I am a bad apple.

When does it happen? As a previous poster pointed out, it happens when people hired to be smart are frustrated in their attempt to contribute constructively to the team.

This can have a number of causes. The least common denominator among these causes is a culture that values consensus over correctness and is unable to understand the difference between petty sniping and constructive criticism. The central flaw is intellectual insecurity -- in particular, the fear of being exposed as a fraud.

The idea that having a second opinion also implies that a Plan B exists in case Plan A doesn't pan out as expected doesn't occur to people who are more concerned with covering up their ignorance than getting the job done. Since the bad apple isn't on the team, it is inconceivable that they might actually be trying to help, and their contributions are discounted. Needless to say, this rapidly leads to a death spiral...

Anonymous Cowherd on July 23, 2008 2:02 AM

Going to have to jump on the why in the world did you use 'she' here? bandwagon... it's really not necessary. he is our gender-neutral pronoun, use it! saying 'she' in such a situation draws unnecessary attention to that phrase and immediately sets off everybody's thoughts about feminism, bigotry, etc. It's the same when you use it in a positive context.

Claudiu on July 23, 2008 2:23 AM

You know I had similar experiences and wrote about the same sort of thing but in a different way, I call it Follow the leader, meaning, once the leader (your boss or whoever) makes a decision, go with it!
http://www.sharpdeveloper.net/content/archive/2008/07/17/follow-the-leader.aspx

Sameer Alibhai on July 23, 2008 8:53 AM

Managers (should) have the responsibility to bring their team up to the skill level appropriate to getting the work done. Many in the IT industry don't have the skills to teach effectively. Of course teaching perl to a Unix C++ programmer is easy compared to teaching team effectiveness skills to people whose cultural differences make it hard for them to fit in with a functioning group. But if you have to fire someone it is a black mark on your management abilities. That extends all the way up the chain. A company president who doesn't find a way to productively use their employees and instead sends them off implementing money losing initiatives should be canned instead of being rewarded for cutting overhead when the initiative fails. In the small world of the programming group it is as important to review the group functioning and guide/correct is as it is to see that code is checked in. Maybe even more so. In most situations not checking in code will not cause a project to fail, but not handling interpersonal problems will often cause failure. Firing someone may be effective in the short term, but reliance on it will cause less productivity in the long run than proper management.

Phil on July 23, 2008 10:51 AM

JavaScript is a beautiful OOP language. Integrating client-side JavaScript with server-side applications using AJAX or similar constructs is extremely simple and efficient.

Being a team member implies that an actual team exists, and that every point of view is being considered. Not doing so is essentially throwing away someone's expertise in a particular field. Such non-teams exist all over the software engineering world. And it sucks.

Anonymous on July 27, 2008 2:05 AM

Damn, this reminds me of a dude in downtown Chicago who kept bragging about JQuery every fing day at work as if he's the only one on earth who knew of JQuery and it's purpose.

There was not one thing you could not do with it. Hell, you could code up a hot babe for how much JQuery this dude talked. Yea, totally can relate to cocky SOBs like this and that's one of the reasons I cannot stand IT after being in it for 10 years and I am only 32 and burned out because of abrasive idiots like this in the work place.

Just JQuery it in MVC he'd say. There isn't anything I don't think JQuery can do he would say and that was word for word. IDIOT.

anonymous on July 28, 2008 7:07 AM

There isn't anything I don't think JQuery CAN'T do. Hip Hip Horaay, it's JQuery fing day. SHUT UP.

anonymous on July 28, 2008 7:08 AM

If you tolerate even one developer whom the other developers think is a problem, you'll hurt the morale of the good developers. You are implying that not only do you expect your team members to give their all; you expect them to do it when their co-workers are working against them.

That reminds me of a boss I just had who let that kind of cost to the team happen day in and out. This dude would talk Apple IPod, XKCD, FAIL BLOG, Parallels, and JQUERY ;) all fing day long and challenge every line of code you tried to talk to him about.

Some people just do not have a life.

anonymous2 on July 28, 2008 7:13 AM

You missed some very important signs

1) Members that are every other day too abrasive and errogant

2) Members who need to have their EGO stick stroked almost every day and cannot shut the hell up and work with the team in a patient and respectful/polite and helpful manor. They don't learn from you, but they are ALWAYS RIGHT, or ALWAYS HAVE THE ANSWER FOR EVERYTHING

3) Members who ignore people on purpose as to make them feel unimportant as compared to the way they interact with the rest of the team members. They act as they they are above you even when you suggest anything, whether it's code or not

4) Members whose time is never for you, no matter how careful you are to ask questions when you are stuck because their time is more important at all times

anonymous2 on July 28, 2008 7:23 AM

I fully agree that a team lead, who is not getting rid of a bad apple, is not doing his job.

But dealing with a bad apple is not only concerning the courage of the team lead, but with the courage of the other team members, too.

From my experience people like to complain, talking behind the back of someone or making wisecracks. But whenever asked to talk directly to the bad member they are switching to silent mode.

What I want to say is that we are adult peoples and professionals. Therefore we can first start to deal with bad apples by ourselves - just using common sense. If this does not work, we can raise the problem to a team lead.

Juergen on July 30, 2008 3:54 AM

@anonymous2 - Bad apples don't learn from the group. I think that's the best (meaning most universal) characteristic you could possibly look for to weed out bad apples. I'm really glad I came back to reread this post.

Of course I missed it the first time in the post (Item #1), too busy thinking to actually listen/read I guess :)

SteveJ on July 30, 2008 10:09 AM

You have to understand, Paul, that programming is not a science, like chemistry. It is perfectly normal in a project of this size for 90% of the code to not be working at any given time.

I'll save the background of this quote for another day, as it is such an intriguing tale of horror it deserves more than a quick footnote. It says a lot by itself though.

I think my big challenge for the year is to not let these things get me down so that I don't become a bad apple myself.

Paul Coddington on July 30, 2008 10:45 AM

This is a really good article Jeff. I wrote a follow up article underscoring how important it is to deal with bad apples in Agile workplaces.

http://geekswithblogs.net/starr/archive/2008/08/01/scrum--agile-development-and-team-consciousness.aspx


Jonathan Starr on August 2, 2008 7:37 AM

This is a really good article Jeff. I wrote a follow up article underscoring how important it is to deal with bad apples in Agile workplaces.

http://geekswithblogs.net/starr/archive/2008/08/01/scrum--agile-development-and-team-consciousness.aspx


Jonathan Starr on August 2, 2008 7:48 AM

I feel that tolerance is a great weakness amongst our profession, I'm not sure advocating intolerance is a great idea.

If the guy can't get what we're doing fire him, problem solved. Sounds a lot like : Look if the guy doesn't just get our religion hang him, problem solved. It's easy to deal with uncomfortable emotions by removing the seeming 'cause' of our difficulties.

I find that most folk in IT have a hard time dealing with everyday emotions, myself very much included so if anything your colleagues in IT need even more tolerance - then one day when we're deemed the 'bad apple' people may tolerate us. And who knows by practising tolerance we'll be less likely to become one of these 'bad apples'.

Glad to see one or two voices in the barrage of comments advocate tolerance, tolerance in IT feels like water in a desert at times.

Wishing you all the good fortune of being a harmonious team and the better fortune of creating harmony in a disharmonious team.

Bad Horse on August 7, 2008 2:36 AM

Interestingly, an exact copy of this article (same graphic, same links back to the codinghorror blog) was posted at http://cyberwforum.com/cyberwblog/dealing-with-bad-apples on 7/27/08, but attributed to someone named Pat. Does Jeff have an evil twin?

greenyoda on August 7, 2008 8:30 AM

One bad apple or several bad apples?

I'm working in an environment with no standards, no real structure or organisation. Sometimes I feel I'm the bad apple. Is it me?

I'm working on a project working with a single analyst. I do the programming, they do the analysis.

Nothing gets written down after any discussions. Nothing ever seems to be formally agreed. It is all verbal - do this, do that! All seems to be ad-hoc and made up as the project moves along although there are a set of briefly described requirements that may as well be written on the back of a cigarette packet. The requirements never clarify what needs to be done and are always open for debate. Even after the debates, the requirements never updated.

All discussions are about components, parameters, and batch files. If we are talking about the application, then we have various calculations that have components and parameters. If we are talking about functionality then it is batch scripts. Any file of the system is a component. Any part of the file is made up of components! It is a little like saying XML is not made up of nodes or elements - it is made up of components. Now if I was a technical analyst, surely I would need to understand the technology and how it could be used to produce 'requriements' for a system?

Is it wrong to push for some sort of formal requirement specification?
Is it wrong to push for some sort of process flows in the system?
Is it wrong for me to get wound up? Well maybe.
Is it wrong for me to push for meeting minutes?

Everytime, my requests are met with heavy resistance.

I've had plenty of arguements. Other members of the team have had arguments - both on and off this project.

How can a project - or even a person survive like this?

Ranting Rover on August 9, 2008 4:29 AM


Ah come on, be fair now. We've been (well other women have been) complaining about male-oriented language. So here you've got a guy who consciously avoids that and you ding him because there's a negative situation around it? I don't think using male pronouns in negative stories and female pronouns in positive stories is very nice, do you?

gex on July 22, 2008 10:45 PM

Why use gender at all?...that person isn't doing their job would suffice and be gender neutral!!Not so?

Alletha

Alletha on August 12, 2008 8:39 AM

Are you pat? What gives?

http://cyberwforum.com/cyberwblog/dealing-with-bad-apples/

Whatever on September 1, 2008 3:28 AM

Old Russian saying: The fish rots from the head.

Truer words were never spoken.

After over thirty years' experience in IT, I've rarely seen bad apples at the level of the rank-and-file. I won't say I never see them, just that it isn't the norm.

I've rarely seen a place that didn't have bad apples among the management, placed where they could do the maximum possible damage to everyone who has the misfortune of their acquaintance.

If you are a team member and you do everything you can to follow all the rules to the letter, to be as helpful as you can to your team members, to do the best work that can possibly be done under the circumstances, and you nonetheless find that someone above you is making it absolutely impossible to get acceptable work done in a timely manner - guess where the bad apple is.

1389 on September 12, 2008 11:28 AM

I have such folks all around me. And, I'm also in the process of writing a post on my blog about a really annoying character.

Elroy on September 16, 2008 3:17 AM

What is worse
a warm body (a person whose contribution to a project is in doubt),
a bad apple
or a faux system architect (and manager of the team) ?
My boss is only an average programmer, but he is always right; discussions are not allowed.
Fortunately he is the manager of some other teams, too, so he doesn't pay too much attention for us.

ajs on February 20, 2009 9:08 AM

Thanks, Jeff.

peacefullyspeaking on February 22, 2009 11:17 AM

So Jeff, how's that project with Joel working out?

(I kid, I kid.)

Anon on February 6, 2010 10:37 PM

So Jeff, how's that project with Joel working out?

(I kid, I kid.)

LMAO. But seriously, makes you wonder what sparked this entry.

Aston on February 6, 2010 10:37 PM

Bad pecans make bad pecan pie. Whether you're working on a hobby project with friends or work-buddies, it is really difficult to deal with people who want it THEIR way. When you get bad pecans sometimes you just have to burn them.

Roger Wilson on February 6, 2010 10:37 PM

And how many team leaders, managers are bad apples? How many product managers, sales people are rotten apples?

Ambitious managers, self-important sales people have such a cancerous effect on a company's team spirit that it is hard, if not impossible, to contain.

At team and company briefs I have heard praise, from the CEO and their ilk, for sales people for making sales of a product but not one word for the people who actually create the product. And these people talk about teamwork!

They do mention outsourcing quite a bit.

Anon on February 6, 2010 10:37 PM

I am a bad apple along with the rest of you! It could be inferred that Jeff Atwood is a real bad apple only because he felt he had to start up a blog to get things off his chest. Makes you wonder what he's like to work with doesn't it?

Jeff - Don't *ever* work for someone else where the coding standard uses #region's - Njy

We interpret words and infer from them without a second thought. The scenario given by the quote from Robert Miesen, which I have not bothered to verify, is only one person's view of events and one particular person. May be the person who is being branded a bad apple had family troubles etc. I do not know all the pertinent facts here. It could be that Robert Miesen has a pathological hatred of JavaScript and persuaded the customer that it was not the way to go just because that the bad apple, who, assessing that JavaScript was the best language to use for this project, was seen as a brilliant programmer making everyone in the team look bad and feel incompetent.

I have found that all people, including myself, are sensitive to 'comments' about their work even if the 'comments' are given in jest.

Think about the poor old bricklayer who's work is on display to the whole world. No wonder most are generally professionally competent. If developers' code was always on public display then maybe we would have professional quality code. H'm, maybe I'm wrong considering the website sources I have looked at.

The best bricklayers in the world are British!


Anon on February 6, 2010 10:37 PM

Knowledge giving Article! I appreciate you. I completely agree with you. If we talk about current scenario then it is must be update. I enjoyed reading. I would like to visit more for more queries.
http://www.business-energy.com.au/

amit on May 24, 2010 11:50 PM

Jeff, I really identify with observation you made, about the "blind spot" of management in not identifying non-contributing/self-serving team-members. I'm faced with a similar situation at work (A MNC, whose products you have purchased and blogged about !!) :

I've been working in a core component of the SW stack for about 2 years now, making me the most knowledgeable member of the team about that particular component. Understand one thing - in our work, experience scales really well as the code base is huge, and even when broken down into components, is pretty complex. Since I'd been hired fresh out of graduate school, the kind of work I first got was mostly debugging/refactoring, something I felt was a 'rite of passage'. In the meanwhile, I also had to "guide" a new guy in our team - he was assigned to my component, and though he had more years of experience under his belt, is an absolutely dependent worker - (of the variety that Joel Spolsky so aptly described in the following scenario : Mutt can't remember the name of the Unicode version of the strcpy function. He could look it up, which takes 30 seconds, or he could ask Jeff, which takes 15 seconds. Since he's sitting right next to Jeff, he asks Jeff. Jeff gets distracted and loses 15 minutes of productivity, to save Mutt 15 seconds). Apart from getting bugged out of my mind, it gets worse - he'd absolutely leave by 5 PM (arrives at after 11, if not later), no matter how urgent/critical the project is at the moment.

Since I'm the guy with most experience, all bugs in my component are raised against me - EVEN THOSE WHICH MY "COLLEAGUE" HAS PUT IN. He's always "busy", though the number of bugs closed/check ins made never corroborates that.

On top of that, the final straw came this Friday - it was decided in the higher-up management that this guy wasn't getting any "motivation" in the tasks assigned to him, and so, voila - the project which I'd been specifically requesting for the last 2 months (writing a totally new "extension" of the component for the company's latest product - which I'm sure you'd be blogging about as well), has been given to him !! I'm frustrated beyond words over the entire weekend, and also terrified of sitting next to him while he "codes" this project - as he doesn't know nor give a damn about the component as a whole, I'm preparing to get inundated with his queries !! I'm debating whether I should go for a mature discussion with my manager(who has been really fair to me, uptil this point), or suffer silently....Lets see what happens !!

Shan on February 27, 2011 7:38 AM

«Back

The comments to this entry are closed.