DEV Community

Isaac Lyman
Isaac Lyman

Posted on • Edited on • Originally published at isaaclyman.com

If you don't hire juniors, you don't deserve seniors

UPDATE: I've revised this post for 2023! If you'd like to read the updated version, it's available on my blog: https://isaaclyman.com/blog/posts/junior-developers/


Let me tell you the story of a very successful company that made a very big, dumb decision.

We don't hire junior developers or interns...if you don't get a puppy, you don't have to clean up its messes.

~ Netflix

I'm flabbergasted that some corporate schmuck figured out a way to cast puppies in a negative light and people kept listening. I mean, puppies are the purest beings on planet Earth. Literally made out of playtime and fur. Bright spots in a lonely world. But I digress.

A lot of companies have followed suit with a "we only hire seniors" strategy. When asked why, they'll offer responses like:

  • We don't have the time or resources to hire junior developers; we're moving too quickly.
  • The company can afford senior developers, so there's no need to hire juniors.
  • We can't afford to make mistakes at this point. The stakes are too high.
  • Our organization gives a lot of autonomy to its employees. We aren't set up for the kind of hand-holding that juniors need.
  • We want to get our base software product in place before we hire anyone inexperienced.

The implication here is that junior developers are a liability, something that a company takes on out of a sense of duty or because of an ailing budget. And the implication of that is, well, maybe other companies can afford to do corporate charity projects and substandard work, but we sure can't.

By the way, there are over 100,000 tech companies in the US, and I've never heard one single CEO say "our mistakes don't matter a lot" or "we need a way to spend some of this loose cash we've got sitting around." So, all you "senior developer only" outfits, whatever shortcut you think you're taking, whatever system you think you're cheating, the reality is that you've hallucinated the entire thing. There's no competitive advantage to shutting out juniors. And you've outed yourself as a poorly-managed company.

The way you hire and treat junior developers is a valuable proxy measure for the health of your organization, your product line, and your internal culture. Senior developers know this. And if that isn't compelling enough, hiring a fair balance of junior developers is a smart financial decision as well.

Preventing messes

If you refuse to hire junior developers because they make "messes," you're sending a strong and unintended message about your company culture: no mistakes allowed. You're painting yourself as the company that fires somebody every time a server goes down. Regardless of how much you pay, nobody wants to work in an environment where job security is touch-and-go. And trying to initimidate developers into making less mistakes spreads a culture of fear and initimidation, which is disastrous for mental health and productivity.

You might argue that this attitude encourages developers to be cautious and implement processes that guard against error: automated testing, QA, failovers, access protection, and reversible code changes, to name a few. But this theory is entirely backwards. If company guidelines encourage the use of failsafes like these and the company provides the time and resources for developers to implement them, the "no mistakes allowed" culture isn't necessary or valuable; most issues will be caught long before they reach production. And every developer, junior and senior, thrives in an environment where strong development processes protect them from worst-case scenarios.

What about the errors that make it past every layer of prevention you've put in place? Think of them as valuable opportunities to shore up your defenses. Junior developers, admittedly, usually uncover these opportunities sooner than senior developers. So the only question is, do you want to debug your process sooner or do you want to debug it later? "Never" is not a choice, as any experienced developer will tell you. If something can go wrong, eventually it will. No amount of experience can prevent human error.

Naturally, you'll need a few senior development and ops leaders to lay the groundwork and set precedents for an error-resistant development cycle. Nobody's saying you should only hire junior developers. But if you truly have a workplace that cares about mistakes--that is, a workplace where mistakes are caught early and often--junior developers will fit right in. And developers of all levels will enjoy higher job satisfaction, since error resistance liberates them to build great software (instead of constant firefighting) and protects their nights and weekends.

Saving money

According to Indeed, a Junior Software Engineer makes an average salary of $55,394, while a Senior Software Engineer makes an average salary of $117,374. A Senior costs more than two times as much as a Junior.

The cost is often justified. Senior developers are expected to be more productive than junior developers. That's not the whole story, though, and thoughtlessly writing it off as the cost of doing business is both lazy and expensive.

Not all application code requires years of experience to write, or even to write well. Every program includes "glue code" that connects various inputs and outputs in a mundane way. It doesn't matter a lot who writes it. You can pay someone $28 an hour to do it, or you can pay someone $59 an hour to do it. Either way it will come out about the same. If you only hire seniors, you're paying a premium for a great deal of entry-level work.

Code also varies significantly from application to application, and familiarity is a key factor in productivity. In most cases, a junior developer with six months of experience on a team will be more effective than a senior developer who just signed on, for no other reason than familiarity with the domain.

The aforementioned glue code and domain-specific code account for at least half of all development work. What remains is code that truly demands and benefits from the expertise of a senior developer. And even for this code, a junior developer can do outstanding work if they have access to sufficient educational resources and the guidance of an experienced mentor.

For these reasons, a pairing of one junior and one senior developer is generally equivalent to two senior developers, and comes at less than 75% of the total cost. If your goal is maximum productivity for minimal expense, this junior/senior pair should be the fundamental molecule of your organization.

As an aside, one factor that's impossible to account for in these numbers is the widespread tendency of senior developers to debate about topics that end up being trivial--such as algorithms, microsecond optimizations, and code style. If an organization hires only seniors and doesn't have a rock-solid decision-making process in place, hundreds of payroll hours can be lost to these arguments. Junior developers rarely have this kind of problem.

Building careers

If you don't hire junior developers, another message you're sending is that you don't know how career progression works.

Again, this isn't about corporate citizenship or "doing your part" in the tech community. This is about making your company a decent place to work so that developers will join your company and stay long enough to make an impact.

I've heard a few developers say "I'm done changing job titles. I just want to be a senior developer forever." However, I've never heard one say "I hope I never get a pay raise or learn something new or get recognized for my achievements ever again." And, inconveniently, the resources necessary to sustain ambitious ladder-climbers and complacent but passionate senior developers are about the same. You need ways to measure and recognize a job well done, plentiful educational resources, and a variety of projects young and old in your development pipeline. You need to create a sense of progress, even for those few who don't want a promotion.

But don't get stuck on those folks. They're a minority. Most people in tech aren't planning on being senior developers for 40 years straight. We dream of being software architects, team leads, CTOs, and founders. And a company that advertises its blatant disinterest in career progression is going to rank dead last on our list of prospective employers.

One of the most impressive things a developer can hear as they walk into a job interview is, "Hi, I'm a team lead, I've worked here for eight years and I joined the company as an intern." Impressive and very rare. That person is intensely valuable to the company--they know the product line in and out, they've seen code from every project within a 100-yard radius, and they've worked alongside everyone in the organization. They can innovate within that company in a way that very few can. And the company is earning inestimable dividends on that person's work because they figured out how to keep them interested for eight years--about one tenth of their life expectancy. That's a sign of success for the company's culture. It marks a workplace where morale is high, good work is recognized, and interesting projects are waiting around every corner.

Saying "we don't hire juniors," on the other hand, is an open admission that your company isn't prepared to be part of someone's career. It essentially advertises stagnancy: the company expects experienced and talented developers to join the company and contribute indefinitely while getting nothing but a paycheck for their efforts. Some might be willing to do that, but you'll never see their best work.

If your company is truly committed to career growth, on the other hand, an arbitrary restriction against junior developers only serves to shrink your hiring pipeline and shorten the possible tenure of your employees.

Making great software

Junior developers have several unique traits that their more experienced colleagues have usually lost. One of these is blind optimism. Another is a willingness to follow. But perhaps the most valuable trait juniors bring to the table is their lack of baggage. Senior developers have seen technologies come and go, projects fail, teams dissolve into infighting, and all the other trappings of the technology sector. They build up strong opinions and often overgeneralize, assuming that what worked (or didn't) for one team or one project must be equally effective for another. And this can manifest as a reluctance to learn the nuances of a new problem space.

Sometimes a project manager's job is to say "I know that didn't work there, but maybe it will work here." And a junior developer is usually the best person to test that theory--they can build a proof-of-concept or a prototype without bringing along any of the biases that senior developers have built up over the years. As a junior developer I frequently took on this kind of work, trying out new tools and technologies, rebuilding things in a different way, proving out ideas that everyone else had judged too quickly. I often discovered better ways to build and the company's software was materially better as a result. There were cases where page load time improved by an order of magnitude; multiple pages were condensed into one, saving weeks of future maintenance; or the company was able to rule out insufficient technologies that could have led to a lot of wasted time. The benefits provided by a clean slate and a fresh perspective are impossible to ignore.

Many companies can get away with putting a bunch of senior developers in a room and letting them fight through to a consensus over how to solve problems and build things. But adding a few juniors to the mix, developers whose time you can afford to spend on one-off experiments and wild ideas, will turn up surprising improvements to your products.

When it comes to software quality, junior developers also do an important form of work that generally goes unappreciated: they place limits on the heady, overengineered code that their senior colleagues may be tempted to write.

If you replace "average or mediocre" in the above tweet with "junior," you can see how this works. A codebase is an abstract record of the way its contributors think critically. A healthy mix of junior and senior contributors creates opportunities for simplification, which makes features easier to build as time goes on.


In summary, the widespread "seniors only" attitude in tech undervalues junior developers. It's a detriment to everyone, especially the organizations that mistakenly think they can make things easier by shutting out inexperienced candidates. Although some of these companies have been financially successful, the waste of money and opportunities they've absorbed is likely massive.

If your company is ahead of the curve on this issue--if you know how to hire, train, and retain junior developers--you're reaping benefits I've only begun to describe here. Your company has lower turnover, higher diversity, and less overhead than the competition. Your software is less likely to break and more likely to delight. There are, of course, other factors at play. But a positive approach to junior developers is an important mark of a quality workplace for developers at every level.

Top comments (34)

Collapse
 
rhymes profile image
rhymes • Edited

Agreed 100%. Lots of places don't realize that these seniors must have come from somewhere or learnt their craft at some point. They are not born seniors :D

The part of about baggage and preconceptions is definitely true. I'm more productive now than I was years ago but I can also get stuck in a rut faster than before.

Mixing is the key.

Another thing that I think it's very important, which might not apply to Netflix due to size and their "magnetism", is how risky it is to have only senior developers in smaller companies. You increase the bus factor a lot and, as you said, the company is also sending the signal that they don't really care about career development (which might also entail that they don't care about people that much, just the product). So eventually one or some of them will leave. I'm speaking from personal experience here.

Collapse
 
johnbwoodruff profile image
John Woodruff

This is awesome. I've worked with people who were huge proponents of the "hire only seniors" mentality. To them, senior devs == productivity. There were many times I found this to not be the case. I had teams where my employees were mostly junior, and each one of them contributed more and in more valuable ways than many of the seniors. Seniors often over engineer, over complicate for the sake of complexity, and waste tons of time arguing of nuances of the "best way". (Which typically meant the most complicated way) This is not to say all seniors are like this or that juniors are better than seniors, but that juniors in my experience make exceptionally valuable contributions to the company.

Stellar post Isaac, very needed right now.

Collapse
 
defiance profile image
Defiance Black • Edited

Hm.

That highlighted something I've only seen a little -- I didn't know it was so widespread, since I'm not in the industry. I'm old enough to know that I want little-to-no part of it, but also inexperienced enough that I would barely apply "junior developer" to my name.

While I was reading, I thought, could it be that this trend is a proxy-block against diversity quotas? Though you mentioned big companies in the public eye that probably should/do have a diversity quota, it just seems like experience is the perfect negative to your average "problem glasses" wearing, super passionate about everything, everyone is so talented and amazing, intern for hire. Junior developers may not be the specific target at all.

Way off?

Collapse
 
yemsalat profile image
Konstantin

I thought, could it be that this trend is a proxy-block against diversity quotas?
I think perhaps only unintentionally it could be. Most companies actually dont have those quotas.
I think it mainly comes from companies just wanting to get top talent.

Collapse
 
defiance profile image
Defiance Black

I think perhaps only unintentionally it could be.

Unintentionally, sure.

My aim with that probe was to point at the plausible deniability it gives a group of people. Hiring filters out on all kinds of categories and always has. If young people are all up in identity politics (the source of all this bs), then it follows that they, making up the majority of juniors (grads, soon to be or recently) are also excluded by something innocuous.

Two birds, one stone.

I think it mainly comes from companies just wanting to get top talent.

I think, when top talent clashes with company culture, top talent will lose. Otherwise, top talent would be running all the companies, and I think that's a stretch.

Collapse
 
acloudmasters profile image
Shakim Harris

Yes, perfect sense. Minorities can't always get the 5 years of experience to become senior, when all the jobs want senior devs.

Collapse
 
defiance profile image
Defiance Black • Edited

I wasn't thinking minorities in particular, but such a proxy-block does prevent the status-quo from changing too much/too soon in any one direction.

Seasoned programmers will still come in all shades, since "5 years experience" can still be done at home... that's how most of the early guys did it. The key is, rather than look for a job, they used what they learned to create their own businesses (mostly porn back then, but a lot of e-commerce in general).

Collapse
 
yemsalat profile image
Konstantin

No logic, doesn't it make it harder for ALL juniors, not just the minorities? Or are you implying that there are more juniors among minorities?

Thread Thread
 
defiance profile image
Defiance Black • Edited

No logic, doesn't it make it harder for ALL juniors, not just the minorities?

Yes, logic. It's where the recent praise for junior developers has stemmed from. If all juniors didn't have it so bad, this wouldn't be/have been a topic of discussion among devs of all ethnicities.

A way to maintain the status-quo is generally to not hire people unless they really give you a reason to hire them (experience greater than 5 years is probably included).

Thread Thread
 
yemsalat profile image
Konstantin • Edited

I don't think we are disagreeing. My point - it has nothing to do with minorities.
From my experience of working in IT in Australia (white majority country) most developers, including in junior and leading positions were either from India or Asia.
(I know that India technically is Asia, but you know what I mean)

Collapse
 
ahmedmusallam profile image
Ahmed Musallam

This is a great post! I really like how you presented the argument for junior devs. Something, I have not really given much thought to, even thou I was a junior dev about 4 years ago.

I think it is intutive to adopt the “we only hire senior devs” mentality. And the reasons for it, on paper, make some sense. However, as you pointed out, that mentality is absurd and those reasons are not practical.

TBH, I’ve also fallen to that train of thought at some point, after having bad experiences with a few junior devs who were slacking. On the other hand, I’ve had great experiences guiding other junior devs who had the aptitude to learn and always reached out for guidance. There is a satisfying feeling that comes with helping other devs who are willing to learn.

Great post! And thank you for sharing!

Collapse
 
adamlombard profile image
Adam Lombard • Edited

Great post, Isaac!

Does anyone know of a good resource for finding remote junior dev jobs? It feels rare to find companies hiring remote juniors, or holding remote internships.

JrDevJobs is a great jobs board, but I've never run across a resource specifically for junior devs looking for remote opportunities.

Collapse
 
adamlombard profile image
Adam Lombard

I started a list on GitHub. If you know of a company that hires remote Jr devs, please submit a pull request. :)

Collapse
 
yemsalat profile image
Konstantin

I think any job board will do. Just look for positions that match your skills and ignore the title requirement.

Collapse
 
theoutlander profile image
Nick Karnik

Thanks for posting. I didn't know this was a thing and I'm going to reconsider my conversation with Netflix about upcoming interviews. It definitely speaks loads about the culture.

I had recently worked at a company for a short-while where they had zero tolerance for mistakes and it ended up that there was so much blame shifting and lies that were spewed by the executive management. The entire company culture was so toxic. However, they did hire plenty of junior developers. Mistakes are inevitable when you hire junior developers. That's why they're given more time to get things done and paid less. Excellent managers understand how to deal with that.

Collapse
 
hamsterasesino profile image
Gabriel

"In most cases, a junior developer with six months of experience on a team will be more effective than a senior developer who just signed on, for no other reason than familiarity with the domain."

I just couldn't agree more. It just happened in my project, about 2 weeks ago: one of the seniors of my project, who had been working for two years, left. Management had this brilliant idea of replacing him with another senior from a different project.

It was a total failure. Not only he does not know anything from the project itself and he is as lost as a junior would be, but the bias he carries on from other projects makes him challenge things rather than learn them. He just hates it! Everything is different, and messy (as every project is, at some level).

Bottom line is: when we bring seniors to our project, way too often we have to confront them and their bias (e.g: PR reviews), whereas when it comes to junior devs, we can teach them, and, eventually, they excel.

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

EXCELLENT! Thank you!

Now we need to find a way to hack the "love" button so I can press it several hundred times. Just saying.

Collapse
 
amexboy profile image
Amanu

I didn't know I can't press it multiple times, I tried and failed.

Collapse
 
rrampage profile image
Raunak Ramakrishnan

Great article. Many companies expect people to be productive instantly on joining which is difficult even for experienced developers as each company has different tech stacks, organization of teams, work culture, etc.

Many companies have HR filters which screen out most applicants over whimsical criteria like less than 5 years experience in a 3 year old technology. The only way to even get a shot at it is through referrals.

Another issue is that teams are so caught up with "productivity" that they ignore mentoring. Anything which is not considered to add direct value to the bottomline are discouraged.

Collapse
 
beetlesky profile image
BeetleSky

I've been studying for nearly a year to become a junior developer. I know enough to work as a junior web designer, but I've been terrified of actually applying. It's motivation-killing to be turned away, and I still have a lot to learn. Knowing that some companies appreciate a developer with my low level of experience makes me feel better about applying. Even if I'm turned down, I can feel better knowing that I probably wouldn't like working there anyway.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.