“More technology companies die of Software Engineer indigestion than starvation”
You just read my version of the famous quote from Bill Hewlett, co-founder of Hewlett Packard. “Technology” and “Software Engineer” words belong to me.
Unlike most managers say, I don’t believe there is a software engineering talent shortage in the world, and I can prove it! I’ve hands-on tested over 2 million software engineers in the last seven years and hired slightly above 4 thousand. We need to change the way we manage, measure performance and attract talent.
Employee turnover is one of the main problems of the tech industry. I’ll try to help you replace leaving software engineers in your teams with exceptional, hands-on, tested remote software engineers. I’ll show you how enterprise companies hedge their bets and make the best out of remote work. I’ll try to explain why software engineers leave, find even better software engineers (faster), reduce human dependency in your software engineering process, and the actual cost of not building or building late.
Why do Software Engineers leave?
As I mentioned in Exceptionly’s first blog post, “Revolutionizing the software talent industry,” most Software Engineers are getting over ten new job offers every day through Linkedin, email, and other channels. Especially skilled software engineers with a proven track record are constantly bombarding messages by the recruiters. While popularity does not define the real talent quality, it gives us a great signal on why we need to be extra careful hiring and managing our engineering talent.
Andy Grove, the legendary founder of Intel, says, “Fear won’t work as well for a computer architect as with galley slaves.” Hence new approaches to motivation are needed. If we are to create and maintain a high degree of motivation, we must keep some needs unsatisfied at all times.
People, of course, tend to have a variety of concurrent needs. One among them is always stronger than others; that need is the one that largely determines individual motivation—a higher-level item in Maslow’s Hierarchy of Needs.
Physiological needs are buyable; food, water, fancy clothes. Fear may work at this level. The highest level of needs is; “What I can be, I must be” for knowledge workers.
Software Engineers are an intelligent talent group, and building tedious crud functions or writing unit or integration tests for months also makes them feel under-challenged and consider other options out of your company.
One other alarming signal for a Software Engineer is the way you work, they have small circles like anybody else, and they hear how their friends are enjoying the possibilities of remote work. In 2021, if you are forcing them to be in a place every morning physically -no matter how fancy your office is- you are doing it wrong.
Before I close this section, I also need to mention why you should celebrate small wins and measure performance objectively in your team. Based on my research in a small group of 1000 Senior Software Engineers worldwide, the number one motivation is not the money for highly skilled individuals. They feel better with the competition and technical/infrastructural challenges you have to offer. For this, you need to do a few things:
- Ensure performance metrics are objective and accessible by all team members in a stack rank table view on a weekly cadence.
- Celebrate small wins in your team chat rooms. “Alex did a great job reducing our AWS costs by $2000/month by refactoring this piece of code” is an excellent sentence for honoring the relevant party and motivating others. Do this .weekly
- Make sure you have daily check-in chats with every single team member. Learn more about their lives, ambitions, and technical desires. Some of your team members are low performers, superstars, or rockstars, and it’s ok.
- Ideally, have an accurate idea about their personality before joining your team using Criteria’s Employee Personality assessment; this will help you position them correctly and assign better responsibilities. Some people thrive in a changing environment, and others outperform in a well-defined process. Use it
How to find Software Engineers — fast?
You can’t code your way out of this, and there’s no magic wand. You can’t just scrape data of 100K java developers and spam to solve this problem. Unless you are working for one of the FAANG companies or paying over three times the market averages, it’s going to be a slow process.
Just like any other process, you must focus on quality first. Before spending thousands of dollars for talent sourcing on Linkedin, you need to build an testing process that generates healthy signals instead of noise. Separating signal vs. noise is precisely what we do at Exceptionly. Once your internal hiring process can eliminate 99% of the noise and deliver you a steady flow of talent, you can go ahead and experiment with multiple sourcing channels for scale. New to all this? Exceptionly blog has a great piece: 5 Things You Need to Know Before Hiring Remote Software Engineers.
You should also know that — if you are delegating this work — your team members are highly biased in hiring decisions. I’ve witnessed hiring managers from a particular country is more likely to eliminate people from other countries due to subconscious reasons.
You need to build and maintain interview rubrics, use objective testing/stack-ranking, and use anonymized data with resume readings to avoid those biased decisions. Candidate photos on resumes are not helping either. I worked with hiring managers with old-school biases like “Argentinians are better than Brazilians” or the other way around. I can tell you that’s bullshit. I have hands-on tested over 2 million software engineers in my career, and there’s no such thing as people from X country are better than Y. Statistically impossible. Talent has no zip code. Don’t let these types of comments cloud your judgment.
The vast majority of Software Engineers live on Github, and they have a portfolio of tools they use daily. If they see your company contributing to these magnificent open-source projects, they’re going to respect you more. While educating your team to perform on a world-class level, contributing to open source projects can be your secret gun for talent marketing. You can turn every single comment, commit or fork into a lead generation machine on Github.
Here’s a selection of job boards I’ve tested in the locals other than Linkedin:
Top-performing Software Engineer sourcing channels in the US
Top-performing Software Engineer sourcing channels outside of the US
- Monster India, SEA, Gulf
How to reduce human dependency in your Software Engineering process?
There are three types of dependencies in a Software Engineering process:
- Knowledge dependency
- Task dependency
- Resource dependency
These are precisely why comments or chat-like messages are not enough. You need to generate long-form, thread-based content within your team, so regardless of time zone or product experience, your new team members can get into the game. Objectively monitoring documentation quality and the amount of accumulated dependency for each of these topics can be a lifesaver for your new hires. Similar to a basketball team, every single player who finds more time in your game needs to be able to get familiar in a matter of days.
I don’t think I need to mention the importance of automated CI/CD pipelines and TDD creating a meaningful footprint for everybody in the team.
Here’s a great course by Google on technical writing. Your team needs to master this course for writing simple and understandable.
In 2017, I interviewed a good friend of mine, Mircea Strugaru, who works as an SVP of Software Engineering. Here is a couple of advice from him:
- We work at scale with hundreds of people doing different specialized tasks. However, we always strive for is simplicity. People over-engineer and build complexity that isn’t needed. Software gurus like Martin Fowler advocate adding complex design only when necessary, not before, and we do this very well. We keep simplicity in our software, our deployment, our team organization, and our metrics. Simplicity allows us to debug more efficiently, make decisions quicker, and focus on what we need to pay more attention to. We only add complexity if we get a ten times improvement in performance. That’s our fundamental guiding principle.
- You can achieve massive improvements if you automate everything you do. From a focus point of view alone, it saves developers from losing focus by constantly switching activities. If you only need to click on a couple of buttons, you can write a script and automate that process once, which adds up to hours saved when calculated over an entire year.
What is the actual cost of not building or building late?
Here’s a great list of 208 startup fails in history, one thing in common. They either built late or couldn’t build at all. While you can enjoy the slow growth of working in a self-funded or bootstrapped company, life isn’t that easy for a well-funded VC company. There is extreme competition out there, and the cost of not building or building late is at least 10x more than a slow-growth environment.
I believe VC-funded companies are sitting on a time bomb with the engineering challenges they have, knowing their competitors are running monster sprints while they’re still planning on what to do or spending months on acquiring the right talent.
Great is the enemy of the good, and you can’t just hire or delegate your way out of an existential software engineering challenge.
Adopt async communication, hire only hands-on tested talent from multiple time zones and enjoy around the clock product development with your rockstar team. Have you never done that before? Happy to help, let’s have a virtual coffee.