There is a difference between an average developer and a great developer. The difference is easy to see. A great developer learns extra on the side by attending conferences, user groups, and has side projects to learn new technologies. Average developers clock out at five and don't touch the computer again until the next morning. Great developers are better than average developers because their knowledge can improve an organization's competitiveness in the marketplace and increase efficiencies for processes which reduce costs.
In my opinion here are the top three motivations of a great developer to make them stay:
1. Challenge with new technology = growth and marketability.
I met a cashier at a local grocery store. I was shocked to find out he was a former COBOL programmer. He told me he was making 25% of what he had made as a developer and that he couldn't find a job. Since then it is always in the back of my mind that I need to not only learn, but get experience in cutting edge technology or I might become a cashier at a grocery store. Everyone knows that five years from now, companies will be asking for five years experience in whatever technology just came out. If your organization or a consulting assignment is stuck with old technology and there is no plan to move to new technology, your good developers will leave. I have seen this over and over again where consultants are placed on an ancient technology assignment and they leave their consulting company. I have seen entire development departments leave because management made a decision that it was too costly to move to a newer technology. I have seen businesses go under because all of their technical knowledge went out the door.
2. Treated Fairly.
Everyone wants to be treated fairly. This can be broken down into three areas:
2a. A developer has the tools necessary to do his job. A PC that is no more than two years old and 8GB of memory, a comfortable chair, a comfortable temperature, two monitors so he can look at requirements on one, and code on the other, and Re-sharper.
2b. Performance reviews that are fair. It is not only about having a cost of living increase. Developers need to feel that they are making a difference. If your review process, is 100 metrics with "meets expectations" wording; it is flawed. The problem with a lot of metrics is that great developers will be reviewed as being average. The problem with "meets expectations" wording is the same. Managers can say things like, well I expected you to do great so you just meet expectations. Great developers will be treated unfairly as average developers.
2c. Benefits that are fair. Companies that take away benefits or salary that have been earned by developers through years of service or position in order to save money to look better to stock holders will see an arterial bleed of developers leaving. If there is comp time, it should be one to one; or more than one to one if it is a holiday.
3. Management that can be trusted.
I love John Maxwell's book on Leadership. Trust is like earning and spending pocket change. Good decisions earn trust for a manager, bad decisions spend trust for a manager. At some point the last bad decision is made, and the manager is out of pocket change. If the manager is not fired, the great developers simply leave the organization.
Are you a developer? What motivates you to stay at a company?