Learn that everyone has value. No one is as exceptional as they think.
The guy coding a little slower but who customer success always talks to about problems. Great, he’s enabling communication between teams.
The girl who cleans up behind the “flash” programmer whose prototypes are awesome but doesn’t quite finish.[1] Great, she’s creating production code to be maintained by a team.
The list goes on. People provide value in ways that are not always apparent. I think Peopleware talks a bit about this although I may be mistaken, about the one team member who didn’t seem to fill a role but made everyone happy.[2] If the team wins everyone wins (hopefully in a good org).
The most exceptional teams have people filling roles. Every role is important and provides value. It’s why teams with a ton of exceptional people often implode, because they are all exceptional at only one thing and no one is filling the other roles. So all the members may appear exceptional, but the team is weak. It's a value systems problem.
Don't be imperious or brusque. Learn to story-tell. Know how to present on the subject - if they're having race conditions, be able to explain race conditions well, for example. Don't pursue argument beyond it being productive, especially not for its own sake.
Make sure you're not proposing your personal One True Way. Be trustworthy.
At some point, people have to experience failure for themselves. You did, probably. Remember how that feels.
Ask to help, but that's a learned skill as well. You can't yank the wrench away from them. Set it up to where you can come in when they're in trouble, but be humble and "in the spirit of service."
I think being self-deprecating helps. Give ideas away. Make any conflict between (the collective) you and the problem, not you and them.
If people are defensive, learn to defuse that or accept responsibility for that, even if it's not your doing. And if all else fails, excuse yourself politely.
Sadly, a lot of this is basically charming or selling people. It has Venn overlap with seduction behavior.
And ever so often, some people just don't make very good teams with other particular people.
I've had jobs where I was performing much better or much worse than other jobs simply due to fitting better or worse professionally with the personalities of other people I worked with (this is to a significant extent not dependent on me liking these people or getting along with them on a personal level).
From the talented person's perspective, everyone else is at fault. They haven't put in the time to know x, or they're just envious of said talent, or they're standing on pride in refusing to follow the talented person's lead.
This is exacerbated by the possibility that these things are actually true.
The antidote to this, that worked for me, was forgiveness. Maybe you shouldn't have to do bookkeeping tasks that take you away from more important work. Maybe others are not giving due acknowledgment to the level of skill you've attained. If you decide to forgive them and put up with what you see as their bullshit (and it may be!), then you can move forward.
There is more than one way to be difficult to work with. For example, some can have anger problems. In these cases, mindfulness coaching can be useful. Why are they angry? Are they angry at perceived incompetence? Are they angry when they don't get their own way? Are they angry because of the argument with their parents the night before?
Another is contempt. If someone treats their teammates with contempt, it is often a sign of someone having a "fixed" mindset. They believe that some people are good at programming, and some people are just bad, and it can't be adjusted. These people are often also terrible teachers, which means they need to be taught that skill.
Some are inconsiderate. They have terrible hygene and controllable body odor. They listen to their own music on speakers in an open office. This often takes coaching on behaviors from management.
I have to highlight the contempt part of ebiester's post. Working with people who have contempt for the people around them is seriously deleterious to your productivity and mental health.
If you are working for a boss who has contempt for his underlings, I would suggest leaving, if you want to be productive in the future. Working under that sort of manager is absolutely hazardous.
A way you can spot someone who has contempt is to notice if they put down people, even if in a backhanded kind of way, or assuming the worst about someone. I have found that showing contempt for people in a 'lower socioeconomic status' is a strong sign of them showing contempt for everyone else they can put down to elevate themselves.
If they are your manager then they are likely to go up the organisational hierarchy soon, because they are really good at self promotion if they are already your manager.
This has come from my experience in the workforce.
One possible answer is that the most talented guy on the team shouldn't take on too large a share of the work.
Sure, he can do any task better and faster than anyone else, but in doing so he's robbing the less talented team members of tasks that they could worked on. The overall team productivity might be higher if he sits back and pays close attention to what his teammates are getting stuck on and only spends his time filling in those little gaps that nobody else can fill.
That's another, somewhat seperate issue that should get more attention.
It's too easy to have the best members of a team do everything that's even remotely complex or 'difficult', and end up causing the others to stagnate as a result. The reasoning often becomes 'why learn something new when the smart guy will take care of it much faster?''
So you end up with one or two great programmers/designers/employees/whatever doing the 'tricky' stuff, and a large group of others basically doing the same grunt work day in, day out.
Then all you need is the top 'talent' to leave, and well, the company is in deep trouble. The other team members end up struggling to continue work that they never needed to learn how to do, or never got the chance to learn how to do.
Follow orders, agree to do the "wrong thing" when he is asked for it. Put up with the other team "mistakes" AND do not consider himself more valuable than the others.
The problem wasn't that he is talented. It's that he's an asshole. Unfortunately the two often go hand-in-hand. I saw a top engineer once literally say to a colleague in ops: "Well my job is harder than yours so..." as rationale in a debate about something trivial. That kind of attitude is the hallmark of assholedom.
If you're dragging the team down, you are either oblivious to how you're being difficult or you know you are and you think you're in the right.
Thinking you're in the right - that's when you need to eat some humble pie and recognize aggravating people is almost never a good idea. If you are in a do or die situation, sure, hurt some feelings. Otherwise, it is not going to work out for you or them long term. Long term, people want to be happy. If you're preventing that, you're the biggest problem in their life :)
If you're oblivious - then... There is no answer, you'll simply learn through the hard knocks of life.
I was being difficult once - in hindsight, people do the best they can and if the circumstances you're in can only result in a shitty product getting shipped unless you put in heroic efforts, opt for the shitty product. It's like 'the wire' (great hbo show) - when the system is broken, the one trying to do the right thing is going to get squashed.
Seriously, that's what you should do. People in this category (as everyone realizes) are "assholes", or more accurately, on the spectrum.
A team full of average neurotypicals is not a good situation for someone on the spectrum, nor is it a good situation for the neurotypicals. It's best to leave and find another early stage startup where the primary problem isn't "teamwork"; you'll be a lot happier at your new job and so will everyone else at your old workplace.
The guy coding a little slower but who customer success always talks to about problems. Great, he’s enabling communication between teams.
The girl who cleans up behind the “flash” programmer whose prototypes are awesome but doesn’t quite finish.[1] Great, she’s creating production code to be maintained by a team.
The list goes on. People provide value in ways that are not always apparent. I think Peopleware talks a bit about this although I may be mistaken, about the one team member who didn’t seem to fill a role but made everyone happy.[2] If the team wins everyone wins (hopefully in a good org).
The most exceptional teams have people filling roles. Every role is important and provides value. It’s why teams with a ton of exceptional people often implode, because they are all exceptional at only one thing and no one is filling the other roles. So all the members may appear exceptional, but the team is weak. It's a value systems problem.
[1] http://firstround.com/review/how-to-spot-and-magnify-the-pow...
[2] http://www.amazon.com/Peopleware-Productive-Projects-Second-...