My impression is that many software engineers stay at a company for 1.5-3 years and then go elsewhere. It's usually at least financially motivated. I also read about people looking for new engineering challenges and responsibilities--specifically not management.
It seems like Google and Facebook have this solved. Are there any small or medium sized companies that typically retain engineers for more than 3 years? What do they do to make this happen?
They paid moderately. It was not-so-bad salary if you were looking at earnings in town, but it was low if you would compare it to other cities and other companies.
But it wasn't the main reason I left and find myself a new, better, job. Yes - financial reason was important but only as last nail to seal the coffin (so to speak).
In my previous job I was told I am needed, but no one from mid and higher managment act like it was so. When they insist to tell them about problems, when they ask about solutions, when they thrive to change, you give them all of that just to hear you are a nuisance - you became frustrated. And when your frustration level reach certain point - you quit. Took me four years to make this decision (I've got very high boiling temperature).
I don't know how other small and medium sized companies keep people longer than 3 years, but my current employer act immidiately as I ask for tools or suggest changes. Owners, co-CEOs have direct contact with team all the time. People don't work in stress ("something happend on production? well, that's rather bad news. Fix it, please, and avoid those errors in the future. Hey! Anyone for darts?"). And hey - they pay better which is good thing (despite everything you may say - you sell your most valuable thing - hours of your life, it's rather smart to sell them at proper price). And they keep working this way for 13 years. With 30+ people.
Turns out - you can.