They can sap momentum from a team, cause a project to miss critical deadlines, or draw an inordinate amount of management attention.
But finding great people is hard. As companies grow their engineering teams, hiring becomes one of the most time-consuming parts of the job. A bad hire not only impacts current productivity, but can set the team back for months, or even years.
The way you attract candidates has a huge impact on the quality of people you attract. It's important to cast a wide net, especially when you're first starting up. You can't just hire a few people and leave the rest to the hiring process.
Unfortunately, most job descriptions are written by engineers for other engineers. They tend to be too technical. ("You should be familiar with the SOLID principles"). They're tough to understand. ("You should have experience with distributed systems").
I’m a senior software engineer with 6 years of experience in React & node.js. I have built products that are used by millions and have generated $billions in revenue. I’ve worked at successful startups. But you won’t hire me because I can’t solve an algorithm challenge. lol.
And they frequently include laundry lists of skills that aren't relevant to the company, or to the specific role. ("You should be comfortable working in Ruby").
Every “required” skill/experience in a job post costs you candidates, some of whom could have done very well in the role.
As you craft job listings, keep three questions in mind:
What do we want this person to accomplish in their first 90 days?
What skills are important for this role?
And what personality traits should they have?
A fast-growing engineering org will spend much of its bandwidth on growth: recruiting, interviewing, onboarding, training, org changes, team (re-)forming, process updates, etc. Can easily be e.g. 1/2 of total team bandwidth.
Bad hires are costly and demoralizing.