There was an interesting question this morning about why Why Did you pick your current job?. More interestingly, I think is why do you stay? What is it that keeps you happily working at your company? perks, environment, status, satisfaction, challenge? and what change at the company might make you leave?
Thank your staff (genuinely) when they do good work, that works every time.
Ensure they have responsibility for something, no-one likes to feel they're a small cog in a large machine where the only decisions are made by some PHB.
Most people like working if they can feel they've achieved something, usually by creating good product not constrained (too much) by timescales, tools, poor requirements or specs, changing specs, or meetings.
To not want to leave: You must be paid appropriately, respected, and get along with those you work with.
To want to stay: You must feel important, recognized, and given the opportunity to take challenges that are interesting. Some measure of freedom in selecting projects and approaches is a must.
As a disgruntled programmer, I'll say that the things I don't like are: not having interesting projects to work on (boredom), working in a conservative suburban culture (I'm a city guy), and the lack of women.
When I have a really interesting project to work on (which I actually do at the moment, by my own initiative), the last two things don't matter as much.
You should have Great passion for learning new things and trying out new ideas
An organization with very flexible work culture and give atleast 20% time for learning will be a great booster for retaining talent.
Factors that have affected my decision to stay at a job at some point in the past:
- Interesting Work
- Learning Opportunities (conferences, etc...)
- Good management
- Fear (Can I find another job in this town?)
- Cool industry
- Perks (Aeron chairs, cool setup, etc...)
To retain and attract people, provide:
Good management
- fair, reasonable
- treats people with respect
- no micromanagement
- Clear priorities and direction
- Priorities and direction do not change too often
- Not a lot of bureaucracy
- Reasonable deadlines
- Rare to work weekends
- Normal work week is not more than 45 hours
- Crunch weeks are rare--extra hours are only expected occasionally -- no death marches
- People are evaluated on what they accomplish, not on working a lot or being heroes
- People get the hardware and software resources they need in a timely way
- Flexible hours
Opportunity to learn new technologies
Competitive pay and benefits
Opportunity to work with good developers
Financially stable company
Opportunity to contribute ideas and participate in important technical decisions
- Make sure that they have the tools that they need to do their job and can get them without too much effort (ex. two monitors, ergonomic keyboard, ergonomic chair, ect).
- Make sure that they are given problems that are at or above their current experience level. Most programmers want to keep evolving their skills and doing the same thing every day isn't going to allow them to accomplish that.
- Make sure they get thanked occasionally for their work, there is nothing work than being a maintenance developer and only having people come see you when they have complaints.
- Don't treat a programmer as the department IT guy, it is one thing to have the occasional question, but it should be something they are dealing with every day.
Important factors for retaining good talent:
- Competitive compensation
- Learning opportunities (training, pet projects, etc)
- Creative freedom (opposite of being a code monkey)
- Consistent positive reinforcement("Thank Yous", spot bonuses, etc) alongside constructive criticism
- Projects which make a difference
- Opportunities for fun (after work video games, movie night, etc)
- Flexible working hours
- Allowing developers to work from home
All of the above can be provided by good management at some level. For example, in terms of positive reinforcement, a company may not be able to give out spot bonuses to the best developers. But management can and should reach out and say, "Listen, you're doing an awesome job - keep up the good work." Something like that will go a long way in motivating the developer.
Developers are a special breed of worker. They take incredible pride their work and will provide a product far superior than the specs ask for if they are given the right environment. The above list, in my opinion, will go a long way in retaining the best of the best.
"Dan Pink on Motivation" has a few concepts that he thinks are important for the creative jobs that I'd like to echo:
Autonomy - Let me have the freedom to do what I do. This can be challenging in some cases as some may see giving up some control as not being worthwhile.
Mastery - Let me do what I do well and become good at it.
Purpose - Let me have a reason for wanting to do this.
In the TED talk I linked above there are a couple of other ideas worth noting:
ROWE - Results-Only Work Environment that uses some of the above concepts while giving a lot of flexibility to the employee though the work still has to get done by a deadline.
Money not necessarily being a great motivator in some jobs. His example to illustrate this is "Encarta" vs "Wikipedia" that I found an interesting contrast.