There’s an odd situation in the software industry. Employers are adamant that they can’t find suitable talent to fill the technical jobs they have. Job candidates are adamant that they can’t find suitable work. It seems strange to me that both these things are true at the same time.
Many people have opinions and observations about this. Often, they cite academic studies, industry surveys, formal management models, psychology, and various other things that are confusing for a Bear of Very Little Brain like me. I wonder if we could go a long way toward solving this problem if we ajusted, just slightly, the way we think about what we’re aiming to accomplish, on the hiring side and on the job search side.
Employer goal
Have a stable team or development organization that performs well on a sustainable basis. Deliver value at predictable cost.
Candidate goal
A job that pays the bills while providing opportunities for professional growth with an acceptable working environment.
Common mindset issues
Managers:
- Technical people are a commodity. They are merely “resources.” We save money by paying them as little as possible. If we need more capacity, we can just hire more commodity resources at low unit cost.
- Competition is good – I will squeeze work out of my employees by pitting them against each other at review time. Let the strong survive!
- We obtain the best possible results by maximizing resource utilization. Everyone should focus on their specialty and stay busy at all times.
- Developers must not waste time with testing. That way, they can go faster. If their code compiles, it should work. Otherwise, they’re incompetent.
- The only person who can fill my open position is someone who has just finished working in an identical position, doing the same work with the same tools under the same conditions, for at least 15 years, day and night, including weekends and holidays.
- Candidates exaggerate on their resumes, so I must exaggerate my needs when describing open positions.
- I need my most senior technical people to be heads-down on the most complicated tasks at all times.
- Anyone who can find a YouTube video that shows how to invert a binary tree on a whiteboard is “senior” by definition.
Candidates:
- Everyone says people skills are the most important. Therefore, I don’t need any technical skills to qualify for a job. It’s solely my employer’s responsibility to “develop” me.
- Software gets written by individual heroes who work alone, wearing headphones.
- Software engineering principles are just academic niceties. They have no role in the real world.
- Keyboard skills are the most effective way to improve software delivery performance. Anyone who reaches for the mouse is unprofessional by definition.
- As long as I have access to Stack Overflow, I can fake my way through any work assignment.
- The only way to get a meaningful raise is to switch jobs.
Suggested mindset adjustments
Managers:
- Technical people bring a range of skills and creativity to the table. Paying them enough so that money is “not a problem” (Daniel Pink) and providing other attractors, such as the opportunity to solve interesting problems, see the value they bring to customers, and collaborate with other smart people, will ensure good results on a sustainable basis with no turnover costs beyond what is normal in the economy. I won’t need as many people, so we’ll save salary costs and facilities costs on balance.
- Competition is good, and collaboration is better. There will be no individual performance reviews.
- We obtain the best possible results by maximizing throughput. Everyone should be focused on maintaining continuous flow and addressing the highest-value work items.
- Software development involves understanding customer needs, business analysis, architecture, design, programming, testing, environment configuration, and documentation. I will support technical staff as they strive to cultivate skills in these areas.
- A person with good problem-solving ability and a strong interest in contributing positively, along with self-discipline and personal responsibility, and who has at least fundamental training in software development, can pick up specific technical skills along the way. It is not necessary that they have done exactly this job with exactly these tools. On the other hand, a person without any basic training or experience at all will thrash and become frustrated, as there is no foundation to build on, and we are, after all, not a school.
- I don’t want to waste time screening people who are not suitable, so I will describe my needs as accurately and clearly as I can.
- I need my most senior people to spend the majority of their time mentoring others, so we can build a highly competent and effective team.
- I might use some kind of hands-on exercise as part of my screening process (and I might not), but there will be no pass-fail decision based on the exercise alone.
Candidates:
- Everyone says people skills are the most important. Therefore, I will make an effort to develop my people skills alongside my technical skills. My professional development is my own responsibility.
- Software can be written by individual heroes who work alone, given enough time. I prefer to work collaboratively as part of a team, so I can learn from others, share my own knowledge, and avoid getting stuck on minor problems.
- Software engineering principles are fundamental to building habitable, functional, useful software.
- Increasing the relative amount of value-add time in the delivery process is the most effective way to improve software delivery performance. The time spent tapping on keys is minimal.
- As long as I have access to Stack Overflow, I can find useful answers to common questions without re-inventing the wheel again and again.
- As long as my employer pays fairly, I won’t feel financial pressure to look for another job.