Writing Job Descriptions to Attract Talented Software Engineers

Whether the current talent pool of software engineers is large or small; as a hiring manager, you have essentially the same problem: attracting and identifying talented individuals that will be able to add value to your team.

In a saturated job market, you'll get tons of CVs, but you'll need to be incredibly discerning to find folks that will meet your teams' needs.

In a market where the talent pool is limited, you will really need to sell yourself, your team, and your organization to get great engineers to apply to your positions in the first place.

In either case, your candidates' first impression of you and your team is in the job posting, and many hiring managers don't take the time to thoughtfully consider what their job description communicates to potential candidates.

Here is some practical advice for making a great first impression, and attracting great talent (identifying and hiring great talent during the interview process is a topic for another time.)

Include the Salary Range in the Job Posting

This should be a no-brainer at this point, but the absolute worst managers to work for are ones that waste your time. If you don't include the salary range in your job description, it's either because you pay below market value, or you don't have transparent pay scales and don't want your current employees to know how much you're willing to pay the new team member. Either way, it's a huge red flag and most great developers will scroll right past.

Some localities require a salary range to be posted for companies that have more than X number of employees or meet other criteria. Many hiring managers use this as an opportunity to post a range that's so wide that it's meaningless.

Always provide a meaningful range in your job postings. Otherwise, you’re clogging your hiring pipeline and wasting your own time.

Clearly State Whether the Position is Remote

Be very clear and truthful in your job description about whether the position is remote, hybrid, or in-office fulltime. Include any information about travel for joint meetings, such as quarterly retreats or in-person client meetings. Like salary, you and the candidate should be pre-aligned on this before you even have a phone screen.

If you're hiring for a remote-capable job (which applies to all software engineering jobs,) and you're forcing people to come to an office, please reconsider how committed you are to hiring great talent. Not everyone likes working remotely, but how many great engineers that prefer in-office live within an hour's commute to your office?

As a good hiring manager, also make sure that if the job description was written as remote, that it is codified in the employment contract. This will add a small layer of protection against future return-to-office initiatives (but if leadership really wants folks in the office, there's not much you can do.)

Be Transparent About Visa Sponsorship

These first three tips can be summarized as don't waste people's time, but this is an order of magnitude more important when talking about visa sponsorship. If you misrepresent your company's visa sponsorship process, and the candidate only finds out the truth after being hired, you're risking their ability to remain in the country. Familiarize yourself with the process ahead of time and be clear about what your company is open to in the posting.

Be Specific About Requirements

If you have interview questions about a specific technology, or really need someone with a lot of expertise with a niche library, list that in the description. By the same token, take a hard look at your list of requirements and decide if each is really necessary or just nice to have.

The idea is to be up-front about how you will be evaluating candidates without unnecessarily limiting your audience. With that in mind;

Consider Equivalent Experience

Many hiring managers include a college degree as a requirement, even for mid or senior level engineering positions. If someone has had 5 years of real-world experience, does it matter if they originally learned software development from a JavaScript from a boot camp? A fantastic self-starter can be a massive asset to your team, excluding them from the get-go really limits your choices.

In the same vein, is a particular technology really required, or are there comparable skills that would expand your candidate pool? For example, someone that has 3 years of experience in Angular could probably pick up React pretty quickly.

In fact, years of experience in X technology is a pretty useless metric for competence in that technology. What matters is level of proficiency, which people tend to be pretty honest about. You can evaluate that proficiency in the interview. Instead of years of experience in particular technologies, use language like “working knowledge,” “proficient in,” or “expert in.” Never ever use words like guru, rock star, or ninja (see Use Inclusive Language below.)

Be Truthful About Reponsibilities

If you’re hiring a hands-on manager or lead, include a breakdown of how much time you're expecting the person to be coding vs. leadership and mentoring. If you’re working with a legacy codebase, include what percentage of day-to-day work is bug fixes vs. new features.

The most important rule of writing a good responsibilities section is to be as honest as possible. hiring someone that expects to be writing mostly features, but ends up working primarily on bug fixes doesn’t help you or the candidate. They’ll leave the company for greener pastures and you’ll just be redoing this process again in three months. Or worse, they’ll stay and hate their job.

Use Inclusive Language

Actively combatting systemic discrimination is a moral imperative. As a hiring manager and manager in general, recognize that you are participating in a system designed to oppress people based on race, gender, sexuality and physical ability. treating everyone fairly and equitably is the bare minimum. You should strive to find ways to actively reach out to systemically marginalized folks.

This philosophy aligns very well with writing an effective job posting. Using language that demonstrates dedication to being welcoming to all will give you more well qualified folks to choose from.

This shouldn’t only be limited to boilerplate inclusivity text at the end, though crafting a good version of that can be helpful.

To start, don’t use gendered pronouns. Run the entire job description through a gender bias decoder, such as http://gender-decoder.katmatfield.com. Use an LLM to try to find bias in your job description.

Don’t use words like guru, ninja, master, samurai or rock-star. Not only do these words carry cultural and gender significance that you’re probably not trying to invoke, but they also suggest an unrealistic standard that will discourage qualified candidates and they imply a terrible work-life balance. Assuming that supernatural software engineering powers don’t exist, the only way a candidate could live up to a superfluous title is by overworking.

These methods are not perfect, so continue to do your homework by reading scholarship on anti-racism, feminism, and systemic oppression.

In Summary

As a hiring manager, your job posting is the first impression candidates have of you, your team, and your company. the keys are: don’t wast anyone’s time, be specific about requirements, and accurately communicate the working environment. Also remember that it’s your responsibility to live up to your good first impression.