There is a shortage of software developers in the U.S. and we're all feeling the competition for these finite resources.
Technology leaders frequently ask us how they can retain their developers when headhunters contact their best talent weekly with new job offers. In this climate, it’s crucial to understand the motivations of your developers and the ways we can structure work environments to maximize career longevity and satisfaction.
What excites your developers to head into work? How does the structure of their workday impact their overall fulfillment? Are your developers surrounded by peers who can encourage them and challenge them to improve? And crucially, can your developers envision a safe and prosperous career within your company?
This article explores these questions and provides suggestions drawn from my 30+ years of experience as a developer and running software service companies. I explore the core tenets of proper software development to foster contentment and fulfillment across development jobs.
Where the common tactic today is to give in to developer demands in hopes they’ll stay put, I contend that this approach often fails to deliver on the most important job satisfaction criterion: empowering developers to write meaningful code!
Here are 7 suggestions to help you build a work culture that developers simply don’t want to leave—regardless of their options on the job market.
1. Keep developers focused exclusively on writing code
This tip may sound obvious, but far too many software development companies busy their developers with tasks that are steps removed from actually writing code. Developers did not go to school to elicit business requirements, design UI mockups, or write user guides for a product.
By keeping developers focused exclusively on writing code, your company can instantly differentiate itself from competitors—and give developers the space to do what they do best every time they arrive on the job.
2. Keep developers busy by having an infrastructure and culture of delivery
It’s crucial to build an infrastructure and culture of delivery in order to ensure an uninterrupted supply of work for those developers.
Think of a well-run restaurant. There are cooks at the stove (developers) expediters giving them clearly written orders (tickets) and a wait staff delivering the final product to customers. The cooks are not expected to take orders, write tickets, and serve food—and they probably wouldn’t enjoy their job or feel that their talents were being utilized if they had to play all of those roles.
It’s the same in the software world, you need team members available to expedite the entire discovery and delivery process. This team could include an agile coach or PM who runs interference on behalf of the developers and also ensures that they’re not stuck in unnecessary meetings.
Ask yourself: “How many hours per day do my developers code?”
If the answer is not already 7+ hours, then you may lack the infrastructure—and culture— for a delivery that could unlock your organization’s full potential. Ask yourself the follow-up question: "Where is my developer’s time being spent during the day if not on coding?'
“My most satisfying day programming is when I walk into work, grab a 1-day task from the board and it's fully fleshed out and ready to be designed and coded. When I'm done coding, it feels great to be able to validate my work against clearly written Acceptance Criteria that were pre-approved by Quality Assurance and then move on to the next task on the board.” - Stephen Hart, Principal Software Developer, 28 years
3. Restrict meetings to 1 or 2 specific days of the week
For a developer, there is a psychological difference between heading into work every day to attend meetings vs. starting your commute knowing you’re free to solve software problems and write code. By restricting meetings to one or two specific days a week, you build reliability into your developers’ schedules. It’s vital that those developers can rely on having full days available to do what they applied—and you hired them—to do.
4. Group your meetings in blocks at the beginning or end of the day
While some regular meetings cannot be avoided, their negative impact can be mitigated by scheduling them together at a consistent time near the beginning or end of the day.
Meetings that are scattered throughout the workday hinder developers from sustaining flow states where they are maximally focused and productive. My coding tasks often demand consecutive hours of uninterrupted focus in order to ensure I avoid becoming a statistic by introducing a new defect with every 10 lines of code I write. Because of the complexity of coding, it’s almost pointless to begin a coding task if you have less than an hour to work before the next meeting. Structuring meetings at the same time of day build consistency into a developer’s routine, helping them to plan uninterrupted coding time.
5. Establish a culture of excellence and encourage developers to "do it right"
We’ve all been there: taking shortcuts to keep pace with a demanding deadline or to expedite a deliverable. Developers are not immune to this temptation, and it’s up to business stakeholders to establish a culture of excellence where developers are encouraged—and empowered—to “do it right” the first time.
While the short-term benefits of corner-cutting may feel like a win, in the long term, developers will lose pride in their work and start looking for a new culture that appreciates software development craftsmanship. In my experience, this loss of pride and a resulting dissatisfaction with one’s work environment is the most common reason why software developers change jobs.
6. Establish team anchors who lead by example
The first 5 years as a software developer are a stressful time where every challenge seems to require a different solution. Navigating these initial years can be an extremely frustrating experience without a solid support structure. This is why every development team needs to have one or two senior leaders with the experience and vision requisite to anchor less-experienced individuals as they grow with your company. Provide mentors (with 10+ years of experience) who are both relatable to and respected by their peers. These mentors will ultimately attract similar talent while building loyalty as they validate the improvement and achievements of their colleagues.
7. Teach developers how to have a long, profitable, and satisfying career
Healthy developers learn new languages and tools all the time. In fact, this continuous re-skilling and self-improvement is what attracts many developers to their profession in the first place. Yet the true value of a developer lies in being disciplined—and supported—toward delivery for the customer rather than in which languages/frameworks that developer knows.
Career longevity is measured in deliverables and career satisfaction is measured in the personal impact of those deliverables. Build a culture where developers learn that a long, profitable, and satisfying career comes from utilizing skills to deliver software and create an impact.
While this list is not exhaustive, the above principles describe a work environment that will keep developers engaged and fulfilled both day-to-day and over the long haul.
Remember: developers went to school to write code. They want to feel good and to know that their code meant something to them and to others. When you foster a work culture around focused coding that creates meaning for both coders and customers, your developers will have a hard time leaving such a fulfilling workplace.