Management is all about people. Whether managers or employees, both are thinking about how to achieve their personal and professional goals. The combination of these goals and the personal traits of the people involved give shape to relationships that, in time, can be positive, productive, and fulfilling, or sometimes just plain stressful, demanding, and conflict-prone.
Of course, in this latter case, product quality decreases, personnel turnover increases, and achieving goals becomes ever more difficult. Therefore, finding a way to establish rewarding and motivating relationships between managers and employees is key when it comes to efficiency, productivity, and self-realization for both of them.
This is especially true in managing software developers, because of their job’s technical complexity and creative nature, compressed into often narrow timelines for producing results. As in every boss-employee relationship, there are many factors involved, such as:
- Organizational culture
- Project technical details
In this article, we will focus on the main management aspects, rather than on the technical ones, that we think should be considered by anyone who wants to be successful in managing to retain software developers.
But here, “success” means not only achieving results and complying with company policies, timelines, and budgets, but also having a motivated and productive software development team who give their best and stay in the company for a long time.
This leads us to our fundamental theme: What makes software developers tick? With this in mind, we will present some ways to retain employees that we have identified in successful software development teams.
Attracting the Right People
In software development, the talent you hire will make the difference between success and failure, and making ongoing changes in a team is always costly in terms of time and money. Therefore, a good selection process is crucial to your project’s success.
Tech recruiters know that when it comes to hiring software developers, it all starts with a carefully balanced job posting. The post has to be motivating in order for the right developers to respond to it—too many or too-specialized requirements can be discouraging, but if you’re too vague, your company can expect a flood of useless resumes.
Stating detailed salaries and benefit packages is also a double-edged sword because your competition can use that information to leverage their compensation plans, and developers can try to use it as a baseline for bargaining during their hiring. Of course, since there must always be some room for negotiation during the recruitment process, we suggest that the job posting be less specific when it comes to compensation, using ranges rather than fixed values.
In contrast, the job posting should be as clear as possible in the job duties and requirements, both mandatory and nice-to-have. Starting with a solid fit is the best context for the rest of our employee retention strategies.
At this point in the process, it’s a good idea to get some advice on assessing candidates and to see what pitfalls can be avoided during the interview process. We would also add to the above resources’ guidance that asking candidates beforehand for some references from their previous jobs is often a good complement to other ways of validating their skills.
The Job Offer
Hiring concludes with a job offer to the candidate, when the company presents a formal document that summarizes the position characteristics (name, rank, area, etc.), the compensation package (salary and benefits like health, pension or education, etc.), starting date, time schedule, place to work, and the requirements to establish a work contract, if the candidate accepts the offer.
Although at this stage everything is more or less accomplished, the candidate may want to negotiate some conditions, and it is up to the company to accept or bargain on them. It depends on the company’s practices.
However, surely, the company will not want to lose a good candidate over a matter of principles, so reasonable tradeoffs will not harm anyone. In this case, it is advisable to ask the candidate for something in return of every concession made, like, for instance, an earlier start date, a minimum time of permanence in the company, or any special requirement that the company may have.
Managing Software Development Teams for Success
Once a software developer starts to work in the company, their manager starts to realize who they are, how they work, and, most importantly, the results they generate. Retaining software engineers then becomes a clear priority.
This is where insights into the personalities of software engineers come in: They—especially high performers—often show some common traits. We’ll point out these patterns as we go, but keep in mind that they may not apply equally to every individual. Software development project management is as much about patterns as it is about exceptions.
Since software development is a technical job, it requires very precise knowledge of the company’s structure, goals, procedures, policies (including creeds and business practices), and standards (technical and non-technical). Therefore, the better a developer understands the company, the better product they will make and the less time it will take them to make it.
This basic training can be administered by documents, online intranet courses, or presentations. But it is a necessity, since it will give clarity to the new employee.
If new technologies are to be introduced, be sure to provide the necessary training. Software developers like to be challenged but they may resent being thrown into a new technology without properly learning it first.
The internet is rife with valuable learning materials, and it’s often the first resource that software developers turn to when they need to learn or relearn technical details. If you want to retain software developers, it is essential to promote a self-study culture and, if necessary, give work time for it. This way, the team will be up to date with state-of-the-art technologies and methods, something that software developers often appreciate very much.
Some think that software developers seek the highest technology to do their work, with the best possible specifications available in the industry. We think instead that it depends on the job at hand. For example, if a company develops first-person games, it will be necessary to provide developers with cutting-edge computing power. But if the job is to develop back-end web services for a transactional system, a less powerful computer might be enough.
What is really important is to give the developer all the necessary tools to do their job and be open to their suggestions on new tools. Logically, every new tool that the developer suggests will have to be approved (maybe even tested before) and licensed from the company. It’s worth the cost, though: Having adequate resources is a key factor in developer motivation and results. (You can’t expect to retain software engineers if you set them up to fail!)
Software developers like to work at places that encourage and respect their creative efforts because their job is one of making something from nothing despite being guided by design, standards, and IT policies. Therefore, developers need to be reasonably confident that they belong to a unit where all the bureaucracy and limitations are at a minimum, as long as they comply with the company’s policies and are in line with its creeds.
This does not mean that software developers should have any special privileges compared to the rest of the company, but rather that their manager helps them overcome or solve bureaucracy when needed. A very important aspect in retaining software developers is that their boss is open to their personal requirements and helps them when needed.
The internal development unit arrangement also plays a key role here. Often, a testing group exists, and it is the software engineering manager’s duty to keep teamwork fluid between developers and testers. This can be achieved simply by having clear methodologies and processes. Developers tend to work with testers very well if there are rules to be followed by both parties, keeping conflict low or nonexistent.
Communication (Periodic Meetings)
If you want to retain software developers, it’s essential to keep them in the loop. All the members in a team should be updated periodically about objectives, corporate situations that affect them, strategies, changes in the organization and, last but not least, team achievements.
Even having a number of team members share some highlights will be good for fostering the team’s cohesion and teamwork. Normally, these team meetings—two hours at the most—should be scheduled regularly (perhaps weekly) as well as on special occasions like a project’s final stage, a critical situation, etc.
Besides communication with the team, the manager has to establish a way to stay up-to-date on the situation of every member, be it job-related, technical, or personal.
- Job-related means all the possible aspects of the employee’s relationship with the company.
- Technical situations appear when a developer is stuck with a problem and, for whatever reason, they are not looking for help.
- If the developer shares them, personal situations that they are experiencing can affect their work and their relationships with their coworkers.
Normally, a 30-minute weekly meeting with every team member will allow a manager to identify these situations and provide help, thus preventing potential personnel crises and enhancing the team member’s morale within the company.
Just to be clear, we are not talking about establishing a meeting-oriented development unit, so strict meeting discipline (punctuality, respect, participation, duration) is necessary. Moreover, this discipline demonstrates to developers that they work for a very professional organization, something they normally appreciate.
Assigning Objectives and Following Up
There is no point in assigning yearly general objectives or similar appraisal guidelines.
This is a clear factor when dealing with software developers: Whatever their role is (requirements gathering, architecture, design, programming, testing, etc.), the objectives are to be given to them with the greatest possible clarity, so there is no point in assigning yearly general objectives or similar appraisal guidelines. Since developers are supposed to work in projects, i.e., with definite scope and timeline, the best way to assign objectives is at the start of the project and include how advances will be evaluated and, if applicable, how will they be recognized.
Fortunately, nowadays, there are methodologies whose purpose is to generate results as quickly as possible, like Agile and Scrum, that simplify follow-up and project control. Sometimes this can even play a significant role in retaining software talent: Many developers love these methodologies because they can deliver results fast, giving them a sense of achievement on a regular basis.
Moreover, developers often favor lighter methodologies. They know that high-end ones like Rational—where the final product is delivered after a long project of requirements engineering, design, development, testing, and implementation—are risky and can be painful to follow.
This applies to software development teams as much as any other kind: A software engineering manager has to deal with conflict promptly and effectively, or it can get out of control and destroy the morale, teamwork, and effectiveness of the whole unit.
Assuming that the developers in conflict are professional and well-intended, a meeting of the manager with the involved persons to initiate a clear dialog with prompt resolution afterwards should be enough to allow the team to move on. Also, sometimes it is necessary to give them a clear warning that conflict at the personal level, if it ever comes to that, will not be accepted.
In any case, at the end of this reconciliation, it is very important that both parties feel that the solution is fair, even if one of them does not like it. Conflict is part of life sometimes, but retaining software talent means treating everyone with dignity whenever such situations arise.
Although we have touched upon many factors that influence a developer’s motivation, there is one other key aspect. This one isn’t emotional, nor technical. We are talking about the rate of compensation for their job.
Despite tending to be idealistic in nature, software developers often like the good things of the material world. It is always better for the company to make sure that the salaries and compensation plans are aligned with the labor marketplace—industry studies are easy to find—and maybe even a little higher for their positions.
Also, most software developers are not indifferent to perks and prizes, including courses and technology events where they can learn useful techniques to enrich their work.
When it comes to retaining software developers, it’s important to support their growth within the company, regardless of its specific direction. When software engineers do not show much desire to move on to leadership positions or management, they instead appreciate advancing in the technical arena. This includes more senior certifications and formal academic programs like master’s degrees or even PhDs. Knowledge is a very strong driver for them.
However, when they do aspire to grow to leadership positions, it is advisable to do a thorough analysis of the candidate’s personality and history in the company. This can be with the help of the Human Resources department or other company units, since good management requires an entirely different set of skills beyond technical proficiency.
How to Retain Software Talent: Final Remarks
You may have the best intentions and follow all the above tips, but still not manage to retain software developers 100 percent of the time—sometimes outside factors simply have more influence. But we think that personnel turnover can be healthy and full of opportunity, as long as:
- It’s not frequent. If it is, this would be a symptom of something wrong at the organizational level.
- It only occurs with the most valuable resources. In this case, it could mean that they are using your company as a trampoline, i.e., they are with you simply to gain experience before moving to other companies.
Employee retention strategies should be enshrined in company policy, not just a reaction when a valuable person wants to resign. Reactionary retention is very costly, and flawed: The person may agree to stay, but think to themselves, “I have worked here for X years just to be offered double the salary when leaving—they’ve just admitted that they were not paying me enough!”
What will be this person’s next step? They may look for another job, but now with double the salary as their minimum. At this point, trying to retain software engineers at all costs is likely not worth it. Unless the person is absolutely fundamental (and irreplaceable) to the company, it may be better negotiating a notice period and immediately finding a replacement.
It’s a Non-Deterministic Task
Attracting and retaining software developers is a complex and non-deterministic task, as with every role in the tech industry. There are many companies looking for valuable software developers out there but, thankfully, the goal here is not to win against these companies but rather to attract good people that we can manage to keep in our company.
Selection processes can take a great deal of time and effort. If approach this in a hurry, chances are you will end up with the wrong people—and who wants to retain software engineers who are toxic to their team? Take time instead to do it right.
Understanding the basics
Reward only extraordinary work and be fair to a fault. Periodically check the average salaries paid in the industry and adjust accordingly. Don't try to retain a person who wants to leave unless strictly necessary; instead, advocate retention as a company policy.
Have a strict and fair selection process and never hire in a rush. Offer a compensation package aligned with the job marketplace, or better.
Provide the necessary tools for the job. Train your team every time it is necessary and foster self-study.
Being assertive and clear. Having periodic team meetings. Having periodic individual meetings.
Deal with conflict promptly, fairly, and effectively. Foster teamwork.
Prefer specific, per-project targets over vague annual goals. Apply trusted software development methodologies. Appraise based on concrete results.