I'd like to read you experiences and maybe some studies or articles about the topic.
1.) Make goals unclear or constantly changing. Bonus points if you tie their bonus to hitting some kind of OKR even though that goal may be put on the back burner halfway into the quarter. Even more so if this includes their holiday bonus, and you have a minimum threshold of “accomplish 80% of your quarterly OKR and get 80% of your bonus. Get 79% or less accomplished and take home 0%”
2.) Make sure all managers are spineless and won’t fight for their employees. This includes managers from other teams piling work onto people who don’t report to them, but add “important to the company” work that has to be done and your own manager always going along with it.
3.) Make sure there’s a lot of good old boys club going on, especially if the “principle” engineer and the CTO go out to clubs every other night trying to wing man for each other. Also make sure there’s no accountability for these favorite engineers (or employees in general)
4.) Have a career framework that lets your employees know what they can do in order to get promoted or grow into another role (manager? senior level?). After a couple years of not promoting (most) people, then get acquired or change the entire structure so all of your employees are unsure if their work is actually going to help them get a promotion, or if that’s even an option anymore.
Finally, make sure feedback is treated like the plague. If somebody notices that the checkout page crashes every time someone uses PayPal, just ignore it. Somebody who isn’t the web dev has PR that fixes it? Let it live in limbo forever. Features require login but don’t tell customers until they get an auth error, and then have to refill out the form all over again? Not a problem. Why do you keep bringing up issues with the UX instead of rewriting our site in Angul...Reac....Vue.
1) Pay Fair at hire and try to keep it within the market as they grow in experience/skills.
2) Give opportunities to learn and grow based on their own personal/professional goals.
3) Be Communicative and Transparent when it comes to everything.... company/leadership asks, values, deadlines, hiring, firing, promotions. Attempt to have documentation/processes for these things so theirs no question in ambiguity or favoritism.
4) Have check-in's often and Listen to the wants, needs, issues of each individual. Attempt to quickly get back to them with a solution or at least an answer/explanation.
5) Create a 'culture of winning' where wins are always celebrated and mistakes/failures are treated as actual learning opportunities to improve.
6) Ensure everyone has a voice, it is heard, and people feel safe to be critical as long as its constructive.
7) Do everything you can to eliminate toxicity... weather is from members on/under you or above you. You cant stop others from being toxic but you should be able to shield most of it from those who report under you.
8) Since you should have the authority EVERY problem you have or those under you has and its then YOUR problem and your job to fix it (or at lease respond/escalte).
9) Judge people based on objective results not on "optics". Ass-in-seat time is a lazy and pointless measurement in most cases.
10) Delegate and empower those under you as much as you can. Lack of autonomy/ownership are signs of micromanagement, over-control, and poor leadership/delegation.
11) Accept a truth... your reputation/success as a leader is a direct aggregation of the success of those under you. If in anyway this is not the case there is a problem and that problem is you.
Especially when they suggest organization wide changes to improve workflow or work environment. Don't be the guy always dismissing suggestions or you can slowly but surely turn a proactive A player to someone that just do the bare minimum while seeking other opportunities.
In short:
1. give them the ability to apply their own solutions to your problems - don't force-feed solutions as part of your problems. let dev teams use their own expertise to collaborate with the business to come up with the right answer
2. allow devs to pursue mastery of their field, give them opportunity to learn and experiment and become great at what they do
3. make sure that the thing you're building matters to your customers, so that your devs have a feeling of purpose. nobody wants to ship code that does nothing, for nobody. start measuring whether you're building the right thing (see Lean Startup)
People will say 'pay', but I think that only matters up to a certain point. I don't think anyone leaves a company offering all 3 of the above just because they aren't paid above market rate.
Best of luck!
I know everyone says no, I want this or that, but at the end of the day, you are trading time for money. Only when people have enough money to not worry do they care about other things, and unless they are were getting 300k+ in a FAANG company for the last few years and now can live ok for a few years, pay is the important factor.
If you can't save a penny, even if work conditions are great, people will change to start building their 401k or to get their kid to a better school.
Then there is also the cultural factor that if a manager asks 'what kinds of things motivate you' if you just say money, you are branded an heretic, so people say independence or agency or whatever.
I would say (assuming they have another option of course) more than 95% of the people here and everywhere would change jobs if they got a 20% payout or something, so that probably says a lot about it.
2. Pay above market rates and promote when it's deserved.
3. Allow them to retain IP of their side projects. People who want to build startups will eventually leave, but you can delay it with this. Considering most people will never reach product market fit, it's a win win.
There are so many social dynamics in employment that are detrimental to an employee's mental health: Arbitrary/unclear goals/deadlines, management not responding to criticism/feedback, favoritism, career stagnation, overwork, etc.
The most common reaction to an employee's deteriorating mental health is for the employer to get confrontational with the employee, and demand that they fix all the side effects. This just piles an extra stressor onto the employee. Very rarely is the deteriorating mental health addressed directly.
Employees are not machines; they are humans. Machines work with very tight tolerances, but humans are better suited to diverse problems. Machines require physical maintenance, but humans require a different sort.
Vacations can help, but they cannot solve or redeem the day-to-day frustrations an employee has. Paying well can help, but that is only valuable if the employee has enough personal time to spend it.
There are external factors, too. When an employee rolls an ATV during the weekend, and needs a few weeks to physically recover, it's totally normal to give them that time off; but when an employee is going through a divorce, losing their religion, etc. it is very uncommon for their employer to even know, let alone help.
The real goal should not be to retain (hold) employees, but to cultivate a workplace where they want to attend. Don't turn your workplace into a cult that demands too much of an employee's time or focus. Instead, make it a place for people to fulfill their need to work. Make it a place where ideas are shared, and things are made.
1) to work with people just as qualified, including managers who are just as qualified at managing (a rare unicorn in the IT sector)
2) not having roadblocks for doing good work. This includes being kept in the dark, micro-management, simplistic "all employees have exactly same computer" policies, workplaces that makes concentration difficult due to e.g. noise or splatter of meetings, weird requirements which can't be discussed at all and doesn't make sense.
1. I expect to be trusted. If there is no possibility to work from a remote location and excessive time tracking (e.g. punch cards) because of a lack of trust, I realized that my work was not valuated at all.
2. I expect to be able to use my own workflow. If I get micromanaged and am forced to use buggy toolchains and processes with lots of dependencies, my productivity will suffer and so will my passion. Define the inputs and outputs of my work, but not anything in between.
3. Growth is more important than high pay. I am not talking about a 2% raise every year. There really needs to be a difference based on performance. I throw myself into something and get the same pay rise as if I had been slacking the whole year. This will not lower my performance, it will make me leave.
* Pay them their market rate. DO NOT WAIT UNTIL THEY ARE ASKING FOR RAISES. Nothing makes you feel unappreciated like not being fairly compensated. If I have to ask you not to rip me off, the relationship is already on very rocky ground.
* Give them interesting things to work on them and empower them to solve them creatively. Do not micromanage competent people.
* Let them have skin in the game by giving them a non-trivial stake of ownership. Nothing makes you go the extra mile like knowing that doing so is furthering your own success.
Often times development teams are applying all kind of processes and reporting are taken accountable for the bug they make, and are overall held to a high standard of quality. All the company is able to consult the backlog, ask questions, whatever, it seems good, and they're ok with it in general.
But then, the dev team may very well fell like all the other team are basically doing the exact opposite. Maybe the sales team will never admit a single failure to close on its team side, the product one will never admit its specs were flawed, the marketing will never admit its creatives where delivered too late, etc...
And that perceived unfairness may be a deal breaker for engineers in my experience. They don't care for example (or even know) if the sales guys have to go to nightclubs until 1am to land a deal while they clock out a 6.30pm, they value visible equality of treatment.
So to retain certains developers, company wide "fairness" may go a long way. (I use quotes because I'm not 100% sure this is the correct english term).
Some want money. Some want flexibility. Some want to work on groundbreaking projects. Some want a mixture.
You can keep the un-/underqualified by improving their skillset, I've not seen the lazy improved, but maybe that's possible as well.
So yes, be clear about what the exact responsibilities everyone has and build up a solid team where everyone fits in.
2. Be honest regarding company state and finances. The worst thing is that you tell everything is OK, the company is doing well, and suddenly you have to lay off half of your staff.
3. Flexible hours and projects. Development (and solving problems) is an art, not cranking something like in a factory.
People don't quit jobs, they quit a boss.
If they're qualified, they know how to use Jenkins and Jira, when to script and whether to automate. If you start regulating Jira with excessive rules (classifying as epic or story, team, feature, sprint, component, DOD, estimate, only work from top of backlog, etc.) then a dev is is really going to be disincentivised from using it.
There is an army out there of intelligent, qualified individuals ho just don’t care that much about work. You likely won’t be able to keep people who are highly ambitious long term without constantly sweetening the pot which usually isn’t tenable.
Find the right people, treat them with respect and allow work to not be the most important thing in their lives and they will be with you for a very long time.
2. Reward good performance
3. Give opportunities for internal growth.
4. Support their other goals (startups, health, lifestyle).
5. Appreciate them and don't be afraid to show it.
---
#3 on this list is under-rated, in my opinion.
1. Fair compensation, meaning don’t make people feel like they’re suckers for sticking around.
2. Team quality, since any move to a new job means you might have to work with bad people, so if you currently work with good people that’s a huge hurdle, especially for engineers.
3. Useful work, i.e. useful for keeping interested, useful for advancing careers, useful for making the company successful (in that order).
4. Work environment, so your valued Employees don’t think they’re just expensive meat on a stick. That probably means less open plan, not more free food.
5. Flexibility, because not everyone wants or needs the same thing.
2. Foster their career growth.
3. Pay them above market if you can or give them a part of the company in equity or options.
4. Generally be a place that people want to work at.
Being paid less than the market and not receiving raises in line with my growth. I got a 50+% raise by jumping ship. If you don’t pay well, people will jump ship unless there is something very attractive intrinsic to the job (like working on a niche loved technology). If you don’t offer raises in line with growth, leaving is the only way for an employee to earn their worth.
Having no vision for the tech org and letting flashy tech-debt laden projects get the most recognition. There is a tricky balance between fostering bottom-up innovation and letting “get recognition quick” projects get the focus. Good engineers who really care about your product and maintenance will be turned off.
Poor dev tooling. Locked down PCs where devs can’t install the tooling they like. Centrally controlling the libraries devs can use. Paranoid security that gets in the way, leading people to give up or build hacky workarounds.
Focusing too much on new features and building up a backlog of bugfixes and reliability improvements.Not realizing the cost of tech debt.
Allowing nontechnical management to drive technical decisions. Not listening to those of us in the trenches, who see how things are day to day.
If those who are open to staying see people rewarded, in futile efforts to retain them, for being almost gone, they will eventually start leaving as well.
Intrinsically motivated are usually the most cost effective, and don't fight for recognition, and happy to R&D at night and document their findings. Extrinsically motivated people are happy to do the dirty, boring work or even sit in a role where no work is necessary, which would drive the intrinsically motivated people crazy.
Extrinsically motivated people will leave you for a job at a FAANG. Intrinsically motivated ones will leave you to do their own startup. You can't stop it from happening, but just maintain good enough conditions to keep the medium skilled ones.
Good luck!
How, depends on different factors. Without trust on the company, their manager and their peers and employee will be likely to quit.
Over the years, I observe trust being in direct correlation with 5 kpis:
* How often the word "politics" is being used in a daily base.
* Miss delivery (delivery something that don't fulfill the goal, in features or time).
* Miscommunication/misunderstanding. (The need of repeating the same message more than once).
* How often the word meeting is being used negatively.
* Times conflict was avoided.
Improving this kpis, by techniques mentioned in other comments, in my experience, will improve trust and employee retention.
Autonomy and Impact- people need to feel like they own their work and that it matters to someone. Meaningful (subjectively defined) work is an important motivator in my experience. Creeping nihilism erodes morale and motivation.
I’ve found that nihilism is often caused by broken processes that fail to fix obvious deficiencies, especially in large corporations. This ranges from pointless hoop-jumping to get simple software packages to the lack of accountability/oversight for low-performers and everything in between.
This is on top of all the other sensible advice here such as pay them well, give them flexibility etc.
Some people live for that, and there must be a path out of engineering into management or PM-type requirements gathering. But if your programmers just want to be programmers, let them. Hire the boss an assistant, hire more PMs, whatever.
Also don't try to control this centrally. Once developers have proven themselves to be competent at operating a computer, they shouldn't be forced to use a locked-down corporate machine.
Pay them more money.
1. As many people have mentioned, pay. Don't invent "noble" excuses, e.g. 'you must want to be here because we innovate so much' to avoid a pay discussion - those things work, but to a point. Pay matters. You don't have to pay the highest in the market, although that obviously works. But it has to be competitive, and hikes/increments should be regular to reward good work. This also has to be proactive: if someone has already begun to look outside, its probably too late for retention.
2. Peers. Smart people hang with smart people. If you staff team A with qualified folks, but team B has people not as qualified to the point that collaboration exercises are frustrating, either people from team A leave (they feel team B gets nothing done) or from team B leave (because they feel they're being lorded over, or feel team A is working on abstract pointless things).
In general, impedance mismatch at the level of skills or intellect is something to be wary of.
3. Bad apples. During hiring you need someone with fresh perspectives, but still aligned with the culture at some deep level. Its a bit like the superficial adage we hear about in dating: "opposites attract" - except they don't when you start living together. You are on your way to build a meritocracy, and then accidentally hire this person who wants to "play the game" to rise up the ranks, ruining it for everyone. Competent, hard working people don't want to spend time playing politics, and at some point they're going to reach out to their network to look for better teams.
4. Be transparent. You don't have the budget to hire the top talent in all depts? Be honest about it. Don't give out vibes like "we hired X anyway because we think he's good irrespective of what the interview panel felt" - people would eventually figure out that you don't think X is that great either, esp over candidate Y who got top scores from the panel but you glossed over, and you're just hiding budget decisions. Welcome, erosion of trust begins here.
5. Don't micromanage and stay away from pushing biased agenda down the chute. I think these are fairly well known. If you hire people qualified to do a certain job, let them do that job. Don't prescribe minutiae because you found them hyped up in a blog post. If you want a discussion, set up brainstorming sessions where you make it clear that you're probably going to come in with silly ideas to discuss.
One of the best managers I have worked with knew very little about my area, but one-on-ones were a delight with him because he would have many questions/thoughts about the project from the perspective of an inquisitive layperson. It made me want to improve.
6. Small acts of trust. Instead of conveying what you learned from speaking to a customer to distilling it to "code features X, Y, Z", expand the involvement of your team by actually talking about the discussion you've had. Invite perspectives and suggestions. It tells people that you think of them as more than just cogs in the system.
7. Hire empathetic people in the mix. Ego clashes do happen despite best efforts, and you want people who can diffuse tensions and mediate discussions between warring sides. I have personally seen the presence of such people help immensely in standoffs where I believed the only outcome might be a bunch of people walking out saying "I don't need this st in my life".
Ask them.
1) superstar centered
2) technology centered
3) community centered
Of these most companies adhere to 1) or 2) and a lot of the suggestions in this thread reflect that
Nobody has really tried 3) that I know of but it's the best way to get people to want to stay, duh
This is straight out of "the culture code" by Daniel Coyle