Some companies have a "we're going to invest in you" attitude.
They take care of their engineers knowing they keep becoming more valuable to them so risking them leaving to another company or burning out for a few extra hours is a bad idea.
They don't get greedy with their "optimisation" of human effort. They let people work at a sustainable pace and be happy for as long as possible.
On the other hand some companies have a "oh crap the timer is ticking and we're going to have to squeeze every last drop of productivity out of you before you leave this hell hole" attitude.
They have a "resource to be used up and thrown out" attitude about people.
It gets them into a vicious cycle which only makes their behavior worse.
A lot of it is company culture. Does the boss agree to unreasonable deadlines with the client or marketing team? How many people on the team are jerks? How many are lazy or unmotivated? Is there enough respect for the boss?
Is the company fair? Do they prevent you from taking sick leave when you are sick? Do they pay a little less than they hinted? Do they compensate you for travel time if the office is in an inaccessible area?
Is the company an exciting place? Do you feel good, feel proud of being part of the company? Does the company do things that you're embarrassed of? Are the projects meaningful?
Developer jobs are in high demand, so a good employee isn't going to stick around if management doesn't show that they trust them. Some evidence of a lack trust:
- strict deadlines unrelated to customer needs
- very detailed and strict reporting
- frequent meetings to discuss progress on milestones
- strict work hours
- limited "work at home" opportunities
Developers like to get in control of their codebases, so non-technical management stepping in too often can kill productivity and this job satisfaction, which can lead developers to look elsewhere.
Developers often quit managers rather than companies. I find how long I stay is related to how progressive the culture is.
Examples of progressive management: Good work from home policy, lack of 70's butts in seats mentality, no death marches, no stack rankings, a no-assholes policy, leadership with a vision, legal carve-outs for your side projects, evaluation based on achievement rather than superficial factors.
All things being equal, those things keep me around. Without them, I'll be looking.
Assuming the same salary, I would opt for more interesting/challenging work. Besides that being able to work on projects that mean something to the business, having good work correctly attributed and recognized for is also a big factor. In short, being able to do something meaningful is a way to retain me.
By not understanding how software works. A lot of managers think that software is done the same way that you would produce something in a factory when in fact a lot, if not most software is a prototype.
The moment you realize that managers don't get software, you either leave or not be as productive as you could.
Management genuinely understanding and accepting (A) the maximum sustainable work week is 40 hours, (B) estimates are uncertain and assume a sustainable 40 hour week, (C) changing scope changes timelines. Also not hiring jerks and some degree of hours/location flexibility as long as you're getting your work done. This all makes for a pretty comfortable long term place for folks with at least one decade of experience and at least one kid.
> (A) the maximum sustainable work week is 40 hours
I wonder about this. If by "work" we define coding and code-related activities (code reviews, learning new tech etc.), then I don't think I can sustainably pull anything close to 40 hours per week. 25 (or mayyybe 30) sounds like a more realistic number.
Judging by what happens in the companies I've worked at, i.e. people slacking off for significant portions of the day, or sitting in meetings (which is usualy not nearly as tiring as coding), I think that's probably the norm. What we're missing is the companies acknowledging this fact instead of insiting on the arbitrary number of 40 hours per week. Few things are more frustrating than having to occupy a chair at work when you know you're already spent for the day, and could be already at home recharging for the next day.
I'm surprised nobody yet has mentioned reason no1 people switch jobs: to get a better-than-COL raise.
So I would say companies that continuously review compensation according to market and employee evolution would be better positioned to retain developers.
They take care of their engineers knowing they keep becoming more valuable to them so risking them leaving to another company or burning out for a few extra hours is a bad idea.
They don't get greedy with their "optimisation" of human effort. They let people work at a sustainable pace and be happy for as long as possible.
On the other hand some companies have a "oh crap the timer is ticking and we're going to have to squeeze every last drop of productivity out of you before you leave this hell hole" attitude.
They have a "resource to be used up and thrown out" attitude about people.
It gets them into a vicious cycle which only makes their behavior worse.