Recruiting and keeping good developers is challenging. We’re a spoiled bunch (try finding someone in retail that gets catered lunches, flexible hours, and high salaries), and are constantly bombarded with offers from recruiters to “come work at this amazing and rewarding startup!”
Fortunately, I believe that employers can craft an environment that both attracts and retains high quality talent. Here’s how:
Let us work on interesting problems. Nobody wants to spend every day fixing bugs and closing JIRA tickets. For many of us, the challenge of solving tough problems, and creating great solutions is just as motivating as the paycheck.
Of course, fixing bugs and doing other mundane tasks is important but we won’t be happy for long if that’s all we’re doing. Make sure you ask what we find interesting and give us time to work on it.
Build a culture of learning and growth. Good developers optimize for learning. In a strong culture, developers are mentored, encouraged to learn, and given every possible resource to build themselves up. Make sure to allocate time for courses, conferences, mentorship, and other learning opportunities. After all, the more your developers know, the better they can perform for your business.
Invest in the tools we need. The right tools give a massive performance boost to developers. This includes workstations, monitors, and off the shelf software, as well as investing time and money in building internal tools and documentation that help increase developer efficiency.
It amazes me how many big companies will spend millions of dollars to attract talent but fail to invest in the tools to empower their developers to succeed. Great software companies like Google and Facebook spend huge amounts on tools to increase the efficiency of their developers. In fact, whole teams of developers and dev-ops engineers at these companies are devoted to building infrastructure, fixing technical debt, improving documentation, automating manual processes, and clearing anything that gets in the way of developing.
This might seem like overkill until you realize how many hours are spent and how much frustration is caused by badly documented APIs or annoying and often unnecessary processes.
Give us time to experiment. If we’re constantly being pushed to reach deadline after deadline, there is no time for us to experiment and learn. The art of software development is ever changing and we need experimentation time in order to stay up to date and move forward. It keeps us relevant, and it also lets us try ideas that often result in better and more efficient solutions.
Give us time to fix technical debt. Developers take great pride in their work but often times taking on technical debt is required to meet deadlines or are simply caused as a result of the project changing. For us, technical debt feels as crushing as real debt. Allowing us to fix tech debt not only makes the product better and more prepared to take on new features but it also feels immensely satisfying to many developers to improve code.
Let us code. How many meetings are you asking your development team to attend each week? A heavy meeting culture could be a major source of unhappiness (and a productivity drain). I’ve seen multiple companies where half of a developer’s time was being spent attending meeting after meeting.
To do our job effectively, we need uninterrupted time to focus on the code.Once we’ve hit a flow state while coding, being distracted can destroy hours or even a full day of productivity.
Programming is a unique job where many of us do it as much for the love of building as for the paycheck. We’re ultimately seeking a place that gives us ample opportunities to build, learn, grow, and experiment. A fridge full of beer and a ping pong table doesn’t hurt either. Treat us with respect and give us some space and in return you’ll have a happy and more loyal team.