Wednesday, September 12, 2012

Nerf guns don't matter


Free soda does not a good company culture make

I'm seeing it more and more--job descriptions with perks about nerf gunsand happy hour, or new grads who joined a startup and are bragging aboutping pong tables and free coke. This is apparently something that people see as a fun culture, a sign that this is a place you'd enjoy working at and has people you'd enjoy working with.
This stuff doesn't matter.

A fun distraction is still a distraction

This stuff is all stuff you do when you're not working. When you have a few minutes to spare here and there and are bored and want to have fun. It's recreation. It's a distraction from work. It's not going to make you more productive, or make you happier with the work you have to do, or the people you have to work with.
In fact, it might make you less happy with those things. Suddenly the work you have to do, which could and should be fun and challenging if you're in the right field, is just a necessary evil to spend a few hours on before the next game of ping pong. You're not at work to play around, you're at work to get crap done, but if you spend long enough in an environment like this, then the work becomes the distraction and the nerf guns and happy hour become the thing you look forward to and are excited about.
This will not help your productivity and certainly won't make doing actual work any more enjoyable.

Keeping work and play separate

Lots of people seem to love bragging about working hard and playing hard, and it's a pretty common attitude that working with people you can go play laser tag with and be friends with is a big win. I'm going to disagree.
I'd like for people at work to judge me based on my work, not on how good I am at pool or how well I can handle my alcohol. I'd rather they didn't know any of those things, because it just distracts from what you're there to do. I don't want to have to deal with the drunken argument last Friday night at the bar when I'm working Monday morning. I don't want someone I work with to be bummed out with me because I didn't want to hang out on Saturday since I have a family.
Trying to enforce a culture where people are all friends with each other and go out drinking together and watch movies together does not make anyone any happier when they're working, it just creates more opportunities for drama and biases.

What really matters

It's easy to throw some toys into the office and call it your culture. Actually creating a good, positive, productive culture is much, much harder than that.
Do your employees feel heard when they have suggestions or questions? Do your managers do a good job of keeping track of budgets and focus without micromanaging and getting on everyone's nerves? Do people have a solid method of critiquing each others work and providing helpful feedback without hurting any feelings? Does everyone feel challenged and interested in the work they're doing?
These are the things that produce a good culture, and these are the things to strive for, and these are things that you can't buy at Target or brag about on job descriptions, but they're the things that keep people around and working hard and happy.

Coding skill vs. employee skill


You can get far without being a great coder

At the extremely basic level, there are basically two good qualities that each programmer should strive for: programming skill and employee skill.
Programming skill is basically the ability to write good, solid, performant, maintainable, and all-the-other-desireable-code-adjectives code. This is what coders tend to spend their time harping on and debating about and reading about.
Employee skill is the ability to be a good employee and coworker. This means being responsive, being able to communicate well, hitting deadlines, being open to feedback, being able to explain complex things clearly, stuff like that.

An extreme example

Picture two people:
Rodrigo is an MIT graduate who writes compilers in his spare time. He is a core contributor to Haskell and wrote a few very well known Python packages. He can generally write very solid code that's readable and handles edge cases beautifully. However, he takes days to answer emails, he rarely picks up his phone, he doesn't seem to have much of an understanding of the importance of deadlines, he does things his own way, and you can't get a clear thought out of him without rambling incoherence surrounding it.
Gabriella isn't a very good coder. Her code is obviously written by an amateur. She takes 30 lines to write what should be written in 15 or 20, she introduces bugs that QA has to spend their time on, and she doesn't really grasp the concept of writing code that performs well--"if it works, it works!". However, she's incredibly responsive--she answers emails within minutes and never misses a call, she is a great communicator and is able to explain complex technical issues quite clearly to clients, she has never missed a deadline, she is constantly looking for feedback to improve her work, and she's an easy person to talk to.
So really think about it. Which would you really rather work with on a day to day basis?

What really matters?

In my experience, a programmer would rather work with Rodrigo, and a manager would rather work with Gabriella.
This makes some sense--after all, programmers are the ones who would have to deal with crappy code, and managers are the ones who would have to deal with missed deadlines and crappy team communication, so we all want the person who causes us the least amount of pain.
However, the point is that managers are the people you need to impress to get jobs and promotions and raises and pats on the back, so in this scenario, Gabriella comes out way ahead. And I've seen it happen many times--programmers who are great employees but not great coders move to the top while the great coders but poor communicators stay on the bottom.
Despite what we as programmers like to think, coding skill is not what really matters if you want to find success in a job, or at least in many jobs. Being a good employee is at least as important, sometimes more.