Saturday, June 12, 2010

Trifecta

Software engineers are a strange bunch. We're forced to thrive on bits of random trivia, and are often literal to the point of being intolerable. It's sort of a cart/horse dilemma though, I'm not sure how to write the causal equation although I suspect that software gives us an outlet for our oddities more than it creates them.

One of the seemingly more peculiar attributes (good) software engineers have is the fact that they want to be productive and do good work. If given the choice to face a challenge or avoid doing any real work most of us would pick the challenge every time. What this gives a manager of such engineers is huge potential that just needs to be pointed in the right direction.

However, there are a few key things that can squash the enthusiasm of any engineer. Or rather, there are a few things that need to exist for them to be content. After many conversations about this with my colleagues, I think I've been able to boil it down to three fundamental concepts.

Here, I present to you, the Software Engineer's Trifecta of Happiness:

- Cool stuff to work on
- A good work environment
- Fair compensation

If we can have these three things, happy and productive engineers we will be.

Cool stuff to work on

First and foremost, cool stuff to work on is going to be key to most software engineers. If we are bored at work we won't be sticking around that long. This doesn't mean that we have to be constantly inventing the latest and greatest startup idea with bleeding edge technology, but we need engaging challenges to work on.

Bob's Brochure Site #7 might not sound all that exciting, but there can almost always be challenges found in the details of even a mundane task. However, if our work environment doesn't encourage innovation and forces us to do Bob's Brochure Site #7 exactly the same way as we did #1-#6 any chance of it being a cool project are nil.

Software engineers love our craft because it lets us invent things. One of our core principals even states that repeating ourselves is one the greatest sins you can commit. If we're not given the freedom to experiment and try to improve the project and ourselves we'll grow tired of any project that is thrown our way.

A good work environment (a.k.a. respect)

Respect is our currency. It's how we interact with each other and how we organize ourselves. Pretty much everything that goes along with a software engineer's good work environment has to do with respect. Sure, fun perks are great, but even that gets translated to showing respect for the employees' well being.

A good work environment also has to be supportive and empowering. Like I mentioned about cool projects, if the environment isn't conducive to growing and being productive it's really hard to be satisfied. If we can't feel any ownership over the projects we work on our motivation plummets.

We're stereotypically quick to complain, but that stems from having a very low tolerance for things that don't make sense. This low tolerance is part of why we are good at our jobs - being able to quickly decide something is suboptimal is a key skill to have for software development. There are few things that kill our enthusiasm faster than feeling like management or policies that don't make sense are getting in the way of our work. To us, it seems like these kind of managers or policy makers don't respect us enough to bother making good, thoughtful decisions. We're coming in every day, trying to work, and people that are supposed to be on our team are putting roadblocks in our way.

I could go on and on about what makes a good work environment, but it's way too much to go into right now. To summarize - treat us with respect. We don't have to get our way all the time, but you can't pull the wool over our eyes about things that directly affect us and expect us to not notice. Let us know why things are happening that seem counterintuitive and they will be much easier to swallow. If you can do that and give us an environment that encourages us to grow and constantly improve ourselves and we'll happily crank out feature after feature. And always remember the cement cutting board principle - let people affected by the policies help make the decisions.

Fair compensation

Ah, everyone's favorite topic. At the end of the day, the reason everyone goes to work is to get paid. The trick is to make us forget that's why.

Money really isn't a good motivator for software engineers. We're more than happy to get paid a fair market price to do our jobs. However, money is a great de-motivator. Not getting paid competitively ties back to the the respect issue. Unless you can provide amazing projects at an amazing place, we're going to notice that our paychecks are lighter than they could be. We're pretty good at doing greater-than and less-than comparisons ;) Soon we'll begin to feel that people don't appreciate the work we do.

I think places like my current job get this one right. Everyone's compensation is presented neatly and fairly and is competitive in the local market (really). You know exactly what you're getting, and then you can forget about it. The last thing you want is as bunch of employees focused on their compensation. You need those brain cycles spent on development, not grumbling about money.



So there you have it, the Software Engineer Trifecta of Happiness. Three fundamental principles that when combined make a surprisingly potent combination. The best part is all the legs of the trifecta focus on being more productive and being able to take pride in a job well done, something that everyone from clients to managers to the employees themselves want anyway.