I tried to keep this post as ranting-free and preaching-free as possible but it was difficult, so please try not to complain about that. I did my best.
In my line of work I've met a lot of great programmers, and I've met a lot of people who are a pleasure to work with, and interestingly enough the intersection between those two groups has been pretty small for me. In my experience, good programmers just don't tend to be good coworkers. I've talked about this before.
If being a good coworker was very difficult or required some natural talent, this would be understandable, but most of the things that make someone easy to work with are dead simple. To understand, let's talk about what makes someone a good coworker. In my mind, it comes down to a few things:
- Organization. Good coworkers don't lose things (notes, emails, deadlines, tasks, passwords).
- Responsiveness. Good coworkers are easy to get a hold of and respond quickly.
- Reliability. Good coworkers do what they say they will do, when they say they will do it.
- Personality. Good coworkers are friendly, approachable, and positive.
The interesting thing about that list is that all of those 4 things are just a matter of effort. We're not talking about "sense of humor" or "intelligence" or other inherited traits or lofty goals. Rather, it's things that anyone can accomplish with a little work.
Stop losing crap. That's it. If you lose crap and rely on your coworkers to find it for you or cover for you or feed you the same information more than twice, then you are bringing down your team. If you find this difficult, here are some (possibly common sense) things that might help:
- Put passwords in a password manager like LastPass.
- Keep all your miscellaneous notes in one searchable place like Evernote.
- Keep a task list, and really keep up with it. People are keen on Trello nowadays. I just use Google Tasks since it's built into Gmail so I see it a hundred times a day without meaning to.
- Keep your inbox empty except for emails that you need to respond to ASAP. Use a service like FollowUpThen to archive things that you can't respond to yet and have them pop back up at a later time so you don't forget about them. This way you will never miss an email, because if it's in your inbox, it needs your attention now, and if it's not, then it doesn't.
- Put deadlines into Google Calendar and set email reminders for a day or two and a week ahead of time.
- Save all history from all IMs so that they're searchable (most chat apps support this) and don't delete any emails.
- When looking for information you think someone has given you before, make sure you search everywhere (email, IM history, notes, etc.) thoroughly before asking your coworker to tell you again.
This next part is important: respond to emails (and IMs and calls) in an hour or less. This is the biggest single point of frustration I have had with poor coworkers, they either ignore emails altogether or take a day or more to respond. Unless you're getting 200+ emails a day (which is fairly rare for your average programmer) there is no reason for this.
You can take this one of two ways. You can go the super-obsessive route (like I do) and tell your email client to alert you right as emails come in at which point you stop whatever you're doing and reply that very second (this becomes difficult when you get an email every few minutes). Or you can set up a recurring reminder to tell you to check and respond to all of the emails in your inbox every 30 minutes or hour. Either way, the goal here is to make sure that no email sits in your inbox for more than an hour. If you can accomplish this, then your coworkers will absolutely adore you.
Now is the part where you say "but Mike, you don't understand, I power code for hours at a time and checking my email kills my concentration and productivity" and to that I say if responding to your coworkers quickly means losing 5 minutes of productivity then that sounds like an excellent sacrifice to me. "But Mark Clark the productivity expert writes that checking emails that often is bad! He says you should have 1 or 2 set times you check it each day!" Same answer. Yes, that is more productive, but an insane level of productivity isn't the holy grail. It's more important to be responsive to the people you work with than it is to squeeze every last ounce of coding productivity out of your day.
The 2nd, less crucial part of being responsive means making yourself available in as many ways as possible. Along with email and phone, stay logged in to whatever chat apps each of your coworkers prefers using. It's nice to make sure no one has to open up an app they didn't already have open just to chat with you.
This is fairly close to organization (i.e., just plain losing tasks or deadlines) but not the same thing. In this case, you miss tasks or deadlines not because they were lost in the shuffle but just because the you didn't plan your time well or just didn't care enough to make it happen.
An attitude of "if I miss this deadline then I have failed my team" is dangerous but also powerful. If your deadlines are completely unreasonable then obviously you should try to fix the root cause of that rather than just giving up sleep and killing yourself, but if you're missing reasonable deadlines then do whatever you need to do at a personal level to stop it, because that is not OK. You are breaking promises to your team.
Doing a better job prioritizing your task list and setting daily goals for yourself tends to help, but in general an "I cannot miss this deadline" attitude is the best motivator, even if it means you work some nights. Stop telling yourself that if you are a day or two late on this or that deadline then it's not really a big deal.
If you're grumpy, then your coworkers will be grumpy to have to work with you (even if you're otherwise 100% awesome) and grumpy coworkers don't do good work. So even if you don't personally care about making people happy or sad (you monster!) then try and force yourself to be friendly during working hours just for the sake of the project that you're working so hard on.
Why does it matter?
If you write good code, why does all the other stuff matter? You were hired to write code, right? Doubtful. You were hired to help the company accomplish its goals, and your role in these goals is probably far more complex than just "write beautiful code that works well." It probably involves things like supporting your coworkers, managing scope, hitting deadlines, explaining things to PMs, communicating with clients, writing documentation, managing other developers, keeping track of your hours, etc. All things that even the best coder can easily fail at.
So please, for the sake of your coworkers, try and make sure you're making their lives easier instead of harder.