Is there such a thing as the "perfect job"? I sometimes wonder what that might look like... and a result of those daydreams I've come up with three main components necessary for the "perfect job". I see these three as all necessary, like three legs of a stool. That stool is not very comfortable if not at the proper height and the legs are not properly balanced.
The first component is the company itself that the job is at. This includes a wide range of issues from the company in general down to the development department and the specific team that you're working with.
Things like pay, benefits and culture (including the company's attitude towards developers) are all pieces of the puzzle at the company level. If the company values developers there are a few ways that this is manifest.
- All the developers have boxes that have been recently upgraded. Nobody complains about how long it takes to do stuff on their machine because they all know that they have the best hardware available or at least what is necessary to get the job done.
- All the developers have the tools that they need and/or want including add-ons for your development environment (in my case VS2008) and licenses for utility programs to help automate tasks. (I'll do the obligatory tool list at some point... 'til then there is Hanselman's crazy long list).
- Training materials and opportunities are abundant and current. This can manifest itself in different ways. Some send all or a subset of their devs to conferences or other outside training. Some shops buy books or study them as a group. A good sign is a shop that has well stocked (and not dusty) bookshelves in each developer's work area and more importantly some of those books out, open and in use.
- Men much smarter than I have noted that if a developer is worried about the size of his paycheck then one of two things is happening. Either he's severely underpaid or there's something else wrong and therefore the issue is "I'm not going to put up with this unless I get more money" which means other issues need to be addressed... fast. So pay needs to be fair, hopefully above "average" and increasing based on performance. Remember to consider all parts of compensation (salary, bonuses, health benefits, retirement, etc).
Overall, employees are valued. From that post, Gordon Bethune is quoted as saying of Herbert Kelleher (founder of Southwest Airlines):
“He recognized that good employee relations would affect the bottom line. He knew that having employees who wanted to do a good job would drive revenue and lower costs."
If you didn't read the post yet, go read it... I mean it!
Another way that companies show that they value their employees is through attention to "hygiene" issues. These are generally issues such as:
- Enough workspace. This includes floor space (I think private is the way to go even though the industry seems to be moving towards open space... either way, not being crowded is important) and desk space.
- Areas for teams to meet. This might be ample conference room space, big enough offices to accommodate groups or open common area.
- Quiet... minimal disruptive interruptions.
There's more that can be found in the classic Peopleware. I'm sure that at some point I'll have to write a post just on workplace hygiene issues...
At the department and team level, you can tell that the culture is healthy for developers in a couple ways...
- Strong technical leadership is critical. This might be coming from an individual or a group, but regardless, there needs to be strong sense of expertise on technical issues in the department or team. There should also be a sense that management recognizes the technical leaders as valuable.
- Related to the previous item is the fact that the status quo should never be good enough. Constant improvement should be part of the culture. That improvement should come from the top but should primarily come through organic efforts and supported by management.
- Good practices abound, including a good score on the now famous Joel Test.
- Developers feel like "part of a team" and take ownership, both individual and collective, of their code.
All these issues are rooted in company culture and are, unfortunately, hard to change. I'll post later about what you can do to help your company improve if they're lacking but in the mean time, take an inventory of where your current company is at and what you think they (and you) can do better.
Stay tuned for the other two legs.