According to the Stack Overflow 2018 Developer Survey, 57% of developers have less than 5 years of experience. Most of your available hiring pool is inexperienced. This statistic is honestly terrifying. You want to grow your team to accomplish great things, but the pool of available employees is skewed towards the inexperienced. You might conclude that you either have to limit your search to the “Best of the Best,” putting all your recruiting efforts into finding that rare gem in a world of stone, or take on the risk of hiring junior developers and hope for the best. Thankfully, we’ve found that there’s a better way. We can identify strong junior candidates and then intentionally accelerate their growth. In six weeks.
Junior developers fall into two camps: the unprepared and the prepared.
The unprepared junior developer is a liability from day one. Their work introduces complexity that quickly gets out of hand. They create bugs. They interrupt teammates. They reinvent the wheel. They cause damage in source control. They dismiss important evidence while troubleshooting. They seem to drag their feet while moving as fast as they can. They do everything the hard way because they simply don’t yet know of any alternatives.
In contrast, a prepared junior developer is a valued peer from day one. A prepared developer has familiarity with the team’s tools, libraries, patterns, and development environment. They understand enough about how these things really work that they can better troubleshoot on their own when the tools misbehave. They make estimates and know to raise a flag early when reality sets in and they know they’re hitting obstacles. They work on a tough problem independently, but stop to get assistance when they understand it enough to be a part of the solution.
I went to college for a Computer Science degree, but most of what I know about software development came after that, learning on the job. I’ve been writing software for twenty five years, but I really wasn’t prepared until most of that time had elapsed. Imagine all the unprepared moments that could have been overcome: a death by a thousand cuts over all those years. If preparation isn’t a conscious priority, you only benefit from your investment a little bit at a time over the years. Don’t fall into this pattern.
In most of those on-the-job learning experiences, I was on my own. The learning was slow, often reactions to pain such as troubleshooting bugs in production. “Ok. That hurt. Next time, I’ll automate an integration test to catch that kind of mistake early.” I’d sink a great deal of time into all-too-cleverly reinventing ideas that were already available in open-source libraries. Even when I was working on the right code, I was writing it character-by-character like some kind of animal. I simply didn’t know any better.
Sometimes, though, I’d have some valuable time with an experienced mentor and my skills would take a huge leap forward in a matter of hours. During the first week of my third job, a senior mentor worked closely with me every day. He exposed me to powerful tools which changed the way I think about software development to this day, and I pass along those same lessons to my teammates whenever possible.
Learning in a vacuum is slow, has mixed results, and is costly. Learning from a mentor is accelerated, pays dividends immediately, and is multiplicative. A prepared junior developer immediately turns to their neighbor and pays it forward.
There’s a catch: you can’t simply hire a prepared junior developer. You have to create them. If you’re going to hire junior developers, you have no choice but to actively prepare them. You have to take their mentorship seriously, as a conscious, official part of your operation. Alas, you still have to pay for your team’s preparation, but at least you get to be the one reaping the benefits this time. It will cost you time and money, and you will be paid back tenfold.
I’m not smarter for my years of experience. I may be quick to design some solution or troubleshoot some issue because I’ve simply seen things like it before. A junior developer simply hasn’t had the chance yet. If we accelerate their exposure to these things rather than sit back and wait for their twenty years to happen first, we can put them on a project sooner, and they can begin the hard work of paying it forward with each of their teammates as well.
When Headspring hires junior developers, we prepare them, beginning with a challenging six week training course. We learn about the software engineering fundamentals they’ll see on real projects, the mindful habits of strong senior developers, and the common tools we use as well as how they really work under the surface. Over the course of the training, we build a representative application. By the time they complete the course and get placed on real projects, they’re prepared.
In the next post we’ll see how to transform your organization’s interviewing and mentorship activities to make the most of your junior developers.