views:

832

answers:

9

Just to clarify - I'm talking about a Scrum or Extreme Programming Team here not the old-fashioned command-and-control team from the waterfall era.

These are what Fred Brooks would call have called "democratic teams" in the 1970's and what Scrum people today call "self-organizing teams".

... one of the most difficult things to deal with on a project is the "know it all" developer.

Often they say things like "oh, I know" and when you look at the reams of code they've committed - you're sure you've seen enough evidence in there that they don't.

There's a particular problem when these over-confident people guess answers and assert them confidently - because it forces us address dead ends.

Two problems arise:

  • How do you encourage them listen if they think they know it all?
  • How can you encourage them to participate in teamwork rather than just insisting on their own way?

I'm looking for constructive solutions. Often these people are smart and would be worth collaborating with - if only they were playing the team game.

+1  A: 

If they don't know (as stated at the beginning of your question) find out why/how they do the things they do, maybe then they can see why they're wrong.

If they're possibly right, a quiet conversation from a superior (or respected team-member) can do wonders.

KevinDTimm
+2  A: 

Do you do pair programming enough? Team dynamics are not right, and other members in the team should be able to stand up to them.

This can only happen in a team where the know-it-all is accepted as such. You might want to ask all team members individually about the four values of the agile manifesto, and how they interpret them as they apply to your project. There might be interesting differences in response.

Stephan Eggermont
I have seen know-it-alls disrupt pairing... whenever they hear something they don't like. I saw one know-it-all that brought pairing to a grinding halt - and decisions in the team got made in secret meetings between people... wow that was messed up.
cartoonfox
+1 for cartoonfox. I see the same thing on a daily basis. Our know-it-all hijacks entire meetings with repetitive spiels of blame-shifting and justification whenever his decisions/methods are called into question. I have seen a 10-minute catchup session last close to an hour, and he probably waved his arms and talked for 50 minutes of it.
Quick Joe Smith
Know-it-alls think pairing is a device only to be used to tell other people how to do something... like a kind of training... not actually every day development, because naturally nothing could be done better than the way they'd decided to do it individually.
cartoonfox
+7  A: 

I'm dealing with a similar personality type at the moment. We've coped thus far by taking advantage of the fact that 90% of the time spent during our average meetings are wasted anyway, and having little informal "meetings" in the tea room and other places to agree on what to do and then just go off and do it.

The same tactic extends to directives from higher ups when it's clear they're wrong or just plainly don't know what they're talking about. For instance, we're constantly told not to fix or refactor anything in our apps no matter how bad it is, in order to concentrate on new features and pandering to important personalities. But, wherever possible we just extend our time estimates and fix it anyway. Management don't want to hear it, but this has saved them from looking foolish on many an occasion.

So, for me, the pragmatic approach is to accept that you're never going to make a dent in a know-it-all's armour of self-absorption and self-deception, and even if you do they're just as likely to try twice as hard to compensate, so just go around them quietly and without fuss.

Quick Joe Smith
Yes. Sometimes just silently working around the issue is the easiest and sometimes even the most effective approach. It has downsides.For the case where a member of the team is so difficult that the rest of the team constantly works *around* his or her intransigence then the company is wasting money paying someone whose contribution is, at best, dubious.For cases where managerial priorities are being over-ridden (perhaps with common sense or even of by matters of necessity) the risk is that managers can retroactively, selectively and punitively use this against you.
Jim Dennis
A lot of those are things I can happily categorise as SEPs. If the company is wasting money employing dead weight then that is their cross to bear, not mine.
Quick Joe Smith
It may be possible to think of this as "SEP" - somebody else's problem, at least for a little while. The trouble is that it's really difficult to do your best if you believe that your work is being wasted. Coasting is a short-term coping strategy and a step on the dangerous road to being fired. Most people want to do a good job and need to feel there's a point to what they're doing. It's mentally harmful to work somewhere where you believe your work is pointless... **I'm saying people need to feel relevant and listened to - not just for the company but for their own mental wellbeing.**
cartoonfox
@cartoonfox - I don't believe that my work is being wasted or pointless. I was saying that if the company chooses to pay somebody to achieve very little and even make my life just a tad harder, I don't mind all that much. I still get paid.
Quick Joe Smith
+7  A: 

In Scrum/Agile terms, this person is causing blocking issues, so the scrum-master needs to resolve the issue (i.e. the person) and ... get them off the team.

If the scrum-master doesn't have the power to reassign this person, then they should raise the problem with someone who does.

Removing them from the team should, in theory, be fairly straightforward. Collect evidence that illustrates how they are blocking progress: this could be the inability to pair effectively, poor code quality, refusal to adhere to proper process, and so on.

The downside is that during the evidence collection process the team will have to work fairly closely to a standard well-defined set of rules. This is rather against the Agile spirit, but if you really have a toxic colleague of this sort it's worth the effort.

What is critical is that the situation is evaluated critically and unemotionally, ideally by someone outside the team.

And if you don't get management support... then I'm afraid it's time to sharpen the CV!

Good luck...

Jeremy McGee
This sounds like a reasonable approach to me. The problem I see most often isn't poor code though - just fantastically overcomplicated code and insistence of lots of up front design, as though they've never experienced emergent design.
cartoonfox
If code is communal (one of the recommended XP practices) then a few examples of the problematic "fantastically overcomplicated code" being refactored into a semblance of reason should be sufficient to demonstrate poor code quality.I've heard of some research for objectively measuring certain aspects of code quality (such as computing coupling factors, and quite a bit of the Coverity results). Those might also be of some use in "making the case."
Jim Dennis
+11  A: 

This is one of my favorite Zen stories:

Nan-in, a Japanese master during the Meiji era (1868-1912), received a university professor who came to inquire about Zen.

Nan-in served tea. He poured his visitor's cup full, and then kept on pouring.

The professor watched the overflow until he no longer could restrain himself. "It is overfull. No more will go in!"

"Like this cup," Nan-in said, "you are full of your own opinions and speculations. How can I show you Zen unless you first empty your cup?"

Maybe it's time to serve some tea (as there is just no way to teach anything to people who don't want or aren't ready to learn).

A bit more seriously (actually, the story above is serious), if you think that this behaviour is slowing down the team's velocity (because of bad team cohesion, lack of skills, rework, etc), then this is an impediment and the ScrumMaster need to handle this situation as such (and this may end up with replacing members of the team). This is at least what Scrum common sense teaches us.

Pascal Thivent
+1 for suggesting a little tea party!
Jim Dennis
That's exactly the thing - what my aikido sensei called "beginner's mind" - what his very tough Janapese sensei tells him...I wouldn't say slowing down the team's velocity. The problem I see most is forcing through an individual opinion on design - as though everybody else's opinion doesn't matter. It completely sabotages evolutionary design - which is tricky and subtle. Hard to convince somebody that's confident in the old BDUF (big design up-front) way of doing things.
cartoonfox
The cup of tea story is indeed precisely about the beginner's mind way of thinking about learning: learn like you know nothing (shoshin in Japanese, see http://en.wikipedia.org/wiki/Shoshin). Now, back to your situation, I understand and agree that the consequences may be hard to demonstrate. But still, my feeling is that this attitude is creating conflicts and goes against good collaboration and this is not good for the project. Is this a shared perception? Is your SM aware of that? This guy really doesn't seem to be in the right team, and he's maybe unhappy too.
Pascal Thivent
+1  A: 

You could start by plunking a copy of Exploring Requirements down upon their desks or any suitable conference table. Personally I think Are Your Lights On? by the same authors is a far more approachable and entertaining volume which still covers the same salient material.

The difference between knowledgeable and being an overbearing know-it-all seems to be at the heart of your question. The heart of the solution lies in clarifying the customer/provider relationship and emphasizing that the job entails fulfilling the customer's requirements.

On the most crass level the customer (or project sponsor, for example in a larger organization) is the party who ultimately funds the project and makes the paychecks possible. Prima donna programmers might not deign to acquiesce to such overtly authoritarian pressures. They can enjoy their time on the rolls of unemployment writing their own superlative pronouncements about the stupidity of management and the obvious ignorance to the superiority of their code (et cetera, ad nauseum).

Of course there are cases where the customer is expressing erroneous requirements. For example he or she may be explaining how something should be accomplished rather than describing the results to be obtained and the interfaces though which they must be accessible. The customer may be asking for things to be done in a manner which deviates from industry standards or legal requirements. Possibly they'll ask for something which is computationally infeasible or asking for a production ready system to implement something which is currently on the bleeding edge of academic CS research.

In such cases the meta-requirements for a lead programmer involve those squishy "soft" people management skills. Such situations call for social engineering. The "requirements" may need to be restated in ways which fulfill the essentials while remaining agnostic regarding orthogonal details (divorcing the what from the how). The customer may need to be educated on some domain specific standards, regulatory requirements or limitations in the state-of-the-art.

But, I'd start with the first book to which I linked. It's a hardbound and should make a satisfying thwack on the table when it's slammed down with a little force. Then pass the other title (softbound) around to your colleagues.

Jim Dennis
+2  A: 

My perspective is a little different. It won't work if those involved are too set in their ways, but....

I would suggest that you focus on redirecting that passion constructively. Keep them fed with cutting-edge ideas and projects , then when they get het up about them, insist they implement them or study them in depth. Encourage their passion and make sure that when they screw up, they screw up in a way large enough that they won't do it again. That is to say, give them honest experience to back their blather up.

Manage them into being people who have a huge knowledge base and want to share it. I think that is much more constructive for all than seeing them as a "problem child" or "someone who sticks up and needs to be hammered down".

Paul Nathan
+1  A: 

Avoiding conflict sounds like your problem. If you continuously find them in error, the rest of you need to tighten up your chin straps and openly disagree. You never mentioned their reaction when it is shown they are incorrect. Do they continue to disagree? Being part of a team means you stand up for and defend your opinion. Maybe the debate can be left to the few members who disagree, so you don't waste everyone else's time. Somehow an environment has been created that lets them get away with this.

Jeff O
It's difficult to know what to do with people who just don't ever back down... People who are just a bit socially awkward are fine - it's the "tank" types that are just never prepared to concede they maybe wrong. It's really hard telling people that have earned over £100,000 for quite a long time, that have very high profile degrees that they just don't get agile teamwork... If it was just about getting things done it would be fine - but there's a lot of ego invested. Anything other than total agreement seems to result in a very rapid, defensive emotional reaction...
cartoonfox
What's the point of agile teamwork if not to get things done?
Jeff O
+3  A: 

Some of these are easy to do and others may be hard, but I'd give these ideas some thought and see what could and couldn't work for you. From "How to Win Friends and Influence People:"

Twelve Ways to Win People to Your Way of Thinking

  1. Avoid arguments.
  2. Show respect for the other person's opinions. Never tell someone they are wrong.
  3. If you're wrong, admit it quickly and emphatically.
  4. Begin in a friendly way.
  5. Start with questions the other person will answer yes to.
  6. Let the other person do the talking.
  7. Let the other person feel the idea is his/hers.
  8. Try honestly to see things from the other person's point of view.
  9. Sympathize with the other person.
  10. Appeal to noble motives.
  11. Dramatize your ideas.
  12. Throw down a challenge.

Be a Leader: How to Change People Without Giving Offense or Arousing Resentment

  1. Begin with praise and honest appreciation.
  2. Call attention to other people's mistakes indirectly.
  3. Talk about your own mistakes first.
  4. Ask questions instead of directly giving orders.
  5. Let the other person save face.
  6. Praise every improvement.
  7. Give them a fine reputation to live up to.
  8. Encourage them by making their faults seem easy to correct.
  9. Make the other person happy about doing what you suggest.
JB King