In today’s work environment good Software Engineers are hard to find. They are even harder to keep happy and retain. For most of them, two years is pretty much a “career” at a company.
There is a very good reason for that; it is because employers manage Software Engineers exactly the way they manage customer service reps, accountants and other staff. The reason this is an issue for companies is because good Software Engineers are absolutely nothing like other employees.
Nearly every aspect of the traditional employment system/process is anathema for Software Developers.
They are a different breed, a different animal than the rest of your employees: they develop and retain extensive and deep knowledge of what makes your company run, while money is important to them – it is not their main motivation, they generally don’t care about socializing with other departments, your HR people have no idea how to assess them and most of your management have no clue how to motivate or encourage them.
In addition to that, they are in *huge* demand. They can get a job just about anywhere within a day or two. They get at least a half dozen solicitations a day begging them to come work somewhere else. They care more about the code they are writing than they do about whether it is helpful to your company. They take pride in creating software and don’t really care about your deadlines and the promises you made to your customers. They will put an inordinate amount of time into their work – because it is important to them, not because it is important to you.
Moreover, they know that they are not going to work for you forever. In fact, most of them are watching for signs that it is time to ping recruiters and start quietly searching for a new gig. They don’t feel loyalty to you or your company, at all, they feel loyalty to their team and to their product. And that is your fault.
You are, in fact, renting them. You are temporarily compensating them for their time until they decide to go somewhere else. And you are the one that has created that reality.
You created it by ignoring that they are different and by treating them the same way you treat everyone else. That’s fine with them, but it is you who pays an enormous price for that indifference.
When a Software Developer leaves your company they take with them a huge investment you made – domain knowledge. This is knowledge that cannot be dumped and left for the person that replaces them, and it is absolutely vital that the person who replaces them learn it all.
They know why certain things were done in your code, they know what changing them will break, they know how things were worked around and they know exactly how they had to architect things so that it could accomplish exactly what your business needs to run. They also know the motivations, inclinations, arguments and decisions that led to certain things being the way they are and the impact created by those things.
Sure, that scenario exists in many other departments and jobs at your company – but new people can still do the majority of their job before they know all those things. When it comes to writing software, a good Software Engineer will not start changing existing code until they have a firm grasp on all of the factors that went into it being the way it currently is.
When you bring in a new programmer, it will take them months before they understand everything well enough to form and voice an opinion and especially to start implementing changes or new code. Yet, when you hire them, you expect that they’ll be able to step in and keep pace with the previous programmer, that your timelines won’t slip and that everything will stay on track. What you are actually doing by believing that is reinforcing to your new employee that you are renting them – and as part of that rental agreement, they are required to do sub-par work and ignore best practices.
While your Software Developers understand that you are renting them – you often do not seem to be aware of that arrangement and are shocked, angered and derisive when they decide to leave for what will hopefully be a better job.
If you’re not going to change how you do things, it would be best for all involved if you fully understood the situation you have created and perpetuate. One of the main purposes of this blog is to highlight aspects of this situation and to hopefully provide some insightful advice on how to begin changing things.