The other side of being a free electron

So my last blog post on the subject of free electon programmers seems to have been successful.  I’ve gotten responses in two forms:

  1.  This is so self-serving.  What about the other people on your team?  They have a special personality as well!
  2.  This really hit home with me.  But I still don’t really feel like it’s really helped me much.
My response to these points:  I couldn’t agree more!  Here’s the thing though:  it’s much more difficult to say what other people want.  On the other hand, what better expert is there on what you want than yourself?  That was kind of the idea behind my last post:  “if you’re struggling with somebody who has a personality like this, here’s what you need to understand”.
That said, I’ve learned a thing or two in my time that I think I can share.  Although this is mostly related to free electrons, a lot of this is useful for any programmer.

Other people have emotions

If I had to choose one area where INTPs and INTJs have the most difficulty, it’s here.  This goes beyond your typical geek social idiocy.  Heck, it hasn’t been more than a decade since it actually hit me that other people expect me to acknowledge their feelings.  Now I know this feels dumb.  And yes, you’ll still forget.  But you’d be surprised at how much this helps you get along with people.
You see, people expect you to react in certain ways when they say something.  When they tell you a story about something that’s exciting to them, show some interest no matter how inane it sounds.  When people are angry about something, empathize with them and try to find some common ground even if it’s difficult.  If it’s you they’re angry at, resist the temptation to respond in kind.  If you’re calm and rational about it, people will usually be willing to have a calm and civil discussion about things.
And this is the most important part:  if you did something wrong, apologize.  I know this can be hard, but if there’s one thing that’s never ceased to amaze me, it’s humankind’s capacity to forgive and forget.

It’s a good thing that other people don’t understand you

We’ve all been there before.  You have to spend an hour’s worth of your time explaining the simplest and most benign thing in the world to someone else who just doesn’t get it.  If the person is truly an incompetent idiot, you should be discussing things with your manager.  Otherwise, you should take the person’s bewilderment as a complement:  you understand something they don’t and they want to learn from you.  After all, if they really didn’t want to learn from you, they’d probably just ignore you.
In fact, you’d do well to take a page from their book.  Next time you find yourself feeling that someone else’s opinion is the stupidest thing ever, don’t criticize them.  At least not immediately.  Instead, ask questions to get at why it is they feel the way they do.  You never know, they could have seen something you haven’t.  You see, not only is it a good thing that people don’t understand you, but it’s also good that you don’t understand other people.

Fight the urge to always go it alone

Most of the time, it’s easiest for me to just go off on my own for a week or two, code something, and come back when it’s done.  The thing is that I almost always end up with something that nobody else really gets.  You don’t have to be joined at the hip with the entire team all the time.  But it’s helpful to just spend some time at least explaining your code to someone else.  This is good even if for no other reason than it helps you learn what trouble other people are going to have with it.
Code reviews are really awesome for this.

People like you

Yes, even when you’re being a jerk.  There have been several occasions where I’ve gotten into some rather heated arguments over mundane issues with people that were admittedly my fault.  And not once has anyone died because of it.  You see, if I had a choice between working with people who disagreed with everything I say or working with people who love all of my ideas, I’d go with the argumentative asshole every day.  People who think critically about other peoples’ ideas are a rare asset for a software company.  And your coworkers will appreciate this if they truly want to do their jobs.

Choose your battles

Free electrons have a very ordered way of looking at the universe.  We tend to get frustrated if something disturbs that way of thinking.  And that’s led me to some long arguments.
Next time you get into an argument with someone, ask yourself this:  “If I just let this person win, how big of a deal will it really be?”  If your answer is “not a big deal”, then just let them have their way.  If you can’t answer the question, then you probably are arguing over nothing and should let them have their way.
However, if your first instinct is “this is a huge deal” and you can explain why, then stick to your guns as much as possible.  Generally, people will be willing to cede the important fights to you if you stick to this strategy.

Conclusions

Admittedly, I’m borderlining on making free electron programmers the new “duct tape programmers”.  If that’s the case, then so be it.  If there’s one thing that nobody can say about Joel Spolsky’s piece on JWZ, it’s that people didn’t consider his way of thought.
However, I’d like to hear feedback.  What other piece of advice do you have for programmers like me?  Is there anything else that I’m missing or getting wrong?