Who Killed the Junior Developer?(medium.com)
medium.com
Who Killed the Junior Developer?
https://medium.com/@melissamcewen/who-killed-the-junior-developer-33e9da2dc58c
777 comments
There were never any junior dev jobs. You have always had to lie, cheat, and steal your way into the field. I have a buddy who legit cheated his way to the top Magento certification and now cycles through $150k+ jobs where they keep him on long enough to realize he doesn't have any coding skills then they fire him.
Reason is software is always an ancillary concern to the business. You see this in other fields, like say accounting, but the difference is that accountants leave school fully capable of employment. HR understands how to hire and manage accountants.
But programming is this black box in the corporate world that no one knows how to understand, value, or hire for. This is why every company wants rockstars, they're hoping that someone whose at least confident to present themselves as a rockstar won't be a net negative to the company.
Eventually they'll figure it out, took them a decade to figure out how to manage IT. Then companies will learn that they can't skimp on middle management for software developers. Some companies will need to give software a legit seat at the table and hire upper management. The political cover will allow shops to stabilize and with stabilization, you'll finally start seeing small and midsize organizations open up positions for juniors.
But it'll never happen so long as companies don't take software development seriously by giving them political cover. If you are a software developer nearing the middle or end of your career, you're pulling the ladder up behind you if you don't seriously consider moving into management. It's too important a job to ignore to go chase your dreams.
Reason is software is always an ancillary concern to the business. You see this in other fields, like say accounting, but the difference is that accountants leave school fully capable of employment. HR understands how to hire and manage accountants.
But programming is this black box in the corporate world that no one knows how to understand, value, or hire for. This is why every company wants rockstars, they're hoping that someone whose at least confident to present themselves as a rockstar won't be a net negative to the company.
Eventually they'll figure it out, took them a decade to figure out how to manage IT. Then companies will learn that they can't skimp on middle management for software developers. Some companies will need to give software a legit seat at the table and hire upper management. The political cover will allow shops to stabilize and with stabilization, you'll finally start seeing small and midsize organizations open up positions for juniors.
But it'll never happen so long as companies don't take software development seriously by giving them political cover. If you are a software developer nearing the middle or end of your career, you're pulling the ladder up behind you if you don't seriously consider moving into management. It's too important a job to ignore to go chase your dreams.
I love mentoring. I always have. I used to help out other kids in my high school programming classes. Despite holding several high-level software development positions, what is the total number of times I've been asked by management to mentor more junior folks?
Zero.
I did it because I love sharing knowledge and I like seeing looks of understanding appear on my colleagues' faces when they "get something" for the first time.
The short-termism that's infested our culture--it seems like all Western culture--is truly sickening. It feels like "Well, I got mine, screw the next generation." This goes way beyond just junior developers.
Zero.
I did it because I love sharing knowledge and I like seeing looks of understanding appear on my colleagues' faces when they "get something" for the first time.
The short-termism that's infested our culture--it seems like all Western culture--is truly sickening. It feels like "Well, I got mine, screw the next generation." This goes way beyond just junior developers.
It is a tragedy of the commons scenario. Everyone wants senior devs, who were at one point junior devs.
No one wants to train junior devs. The OP points out why:
* cheaper to have juniorish work done overseas
* juniorish work is automated away
* juniors on a team slow it down (compared to a team of all seniors)
So everyone competes for the senior talent.
A more sophisticated long term analysis might look at the benefits to senior developers and the hiring pipeline of bringing junior folks in. Again, the OP:
* senior folks get the chance to mentor, exercising a different skillset
* senior folks learn more about the problem domain by having to explain it
I'd add:
* junior folks bring in new ideas/concepts
* some level of loyalty is inspired. If nothing else, a beneficial brand among other new grads.
* the company matures and has to think about career path and retention
* good junior developers can be more "bang for the buck" as they grow. they still need raises, but will be able to do more work per $ than a mid level person might (because of their familiarity with the tooling and the domain)
No one wants to train junior devs. The OP points out why:
* cheaper to have juniorish work done overseas
* juniorish work is automated away
* juniors on a team slow it down (compared to a team of all seniors)
So everyone competes for the senior talent.
A more sophisticated long term analysis might look at the benefits to senior developers and the hiring pipeline of bringing junior folks in. Again, the OP:
* senior folks get the chance to mentor, exercising a different skillset
* senior folks learn more about the problem domain by having to explain it
I'd add:
* junior folks bring in new ideas/concepts
* some level of loyalty is inspired. If nothing else, a beneficial brand among other new grads.
* the company matures and has to think about career path and retention
* good junior developers can be more "bang for the buck" as they grow. they still need raises, but will be able to do more work per $ than a mid level person might (because of their familiarity with the tooling and the domain)
The problem is squashed salaries. I’ll have junior devs or people straight out of code school asking for 75-80% the salary of a solid senior dev. If I have to make a bet on who will be easier to manage and get productive 4 seniors vs 5 juniors for the same total expenditure I’ll choose the seniors every time. Even at 2 to 1 I’m taking seniors. Maybe around 3 or 4 to 1 juniors might look better. But that means junior starting salaries around 50k which no one is taking. Salary range is too squashed in the industy.
The growth of undergrand CS program enrollment is pretty insane, same with bootcamps.
Lots of these people have no real interest in the positions outside of pay, which is fine for most careers. But in tech we put a lot of value on self learning and interest.
I've definitely seen the number of new grad applicants and bootcamp grad applicants at least quadruple in the past few years.
Most of these can make an Angular app or write an algorithm on a whiteboard but know nothing outside of what was taught in the school/bootcamp.
I find these types really hard to work with, because software is evolving ever so fast and requires such rapid uptake of knowledge that those who aren't self motivated require a lot of reinforcement and have drastically reduced productivity on the job.
I've definitely seen the number of new grad applicants and bootcamp grad applicants at least quadruple in the past few years.
Most of these can make an Angular app or write an algorithm on a whiteboard but know nothing outside of what was taught in the school/bootcamp.
I find these types really hard to work with, because software is evolving ever so fast and requires such rapid uptake of knowledge that those who aren't self motivated require a lot of reinforcement and have drastically reduced productivity on the job.
Most junior level positions are being filled with the massive influx of new grads from really strong intern programs at most companies now. If you're in college now, make sure you get an internship at a company in your field. If it's too late for that, then you'll have to do a little extra work and probably work on a couple side projects and post them on GitHub. That first job will always be the hardest to get, so don't feel bad if you keep getting turned down.
A hypothesis for part of the problem that I've scrolled through most of this conversation and still not seen: Junior developers are having a hard time finding a job because the tasks have gotten harder. As easy as people may claim "cloud" is, if a junior developer has to learn the three Javascript libraries, two backend languages, a devops cloud deployment system, and three monitoring technologies just to be able to break even on productivity, it's going to be hard to justify hiring a "junior dev".
When I got into web dev in 1997, we didn't even have source control to speak of. We barely used Javascript. All I needed was a template language and same basic HTML, and we put out a project that, at the time, was considered amazingly cutting edge by most people who used it.
If I were to try to hire me of 1997 now, I'd have a lot harder time finding something for him to do, because I'd have half-a-dozen technologies to train him on before he could even produce the equivalent of "hello world" that integrates correctly into a modern environment. All of these techs have reasons to exist. We found out about the server going down when people got frustrated about it being down and called us after hours of outage. We found out that something was eating 100% of the CPU the same way. Our "analytics" were mostly "Hmmm, nobody seems to be complaining, everything must be OK!" Automated testing? Literally never heard of it. And so on and so on. But people are not magically infused with this knowledge in college; in fact the curricula have barely changed since then (which I consider mostly a good thing), so it means that the bar to being a productive junior dev has definitely risen.
Fortunately, my team lately has been able to diversify and we've got some more projects that are independent from the legacy code base I maintain, so as we've been looking at headcount this year I've been able to say that we've got some positions for juniors now, who can work in a space that is more lake-like than sea-like, and be productive, and learn things, and develop. But last year I had to say that I've got nothing that wouldn't take at least a medium-skill dev to get anywhere in any reasonable period of time.
(And let me both open and close on the word part. I don't think this is the entire problem, and I agree with a lot of what other people said about other parts. But I believe it may be a quite non-trivial part of it.)
When I got into web dev in 1997, we didn't even have source control to speak of. We barely used Javascript. All I needed was a template language and same basic HTML, and we put out a project that, at the time, was considered amazingly cutting edge by most people who used it.
If I were to try to hire me of 1997 now, I'd have a lot harder time finding something for him to do, because I'd have half-a-dozen technologies to train him on before he could even produce the equivalent of "hello world" that integrates correctly into a modern environment. All of these techs have reasons to exist. We found out about the server going down when people got frustrated about it being down and called us after hours of outage. We found out that something was eating 100% of the CPU the same way. Our "analytics" were mostly "Hmmm, nobody seems to be complaining, everything must be OK!" Automated testing? Literally never heard of it. And so on and so on. But people are not magically infused with this knowledge in college; in fact the curricula have barely changed since then (which I consider mostly a good thing), so it means that the bar to being a productive junior dev has definitely risen.
Fortunately, my team lately has been able to diversify and we've got some more projects that are independent from the legacy code base I maintain, so as we've been looking at headcount this year I've been able to say that we've got some positions for juniors now, who can work in a space that is more lake-like than sea-like, and be productive, and learn things, and develop. But last year I had to say that I've got nothing that wouldn't take at least a medium-skill dev to get anywhere in any reasonable period of time.
(And let me both open and close on the word part. I don't think this is the entire problem, and I agree with a lot of what other people said about other parts. But I believe it may be a quite non-trivial part of it.)
This reminds my of my job search 5 year ago after I graduated college. It took me 8 months to land my first job and I was living with my mother. I did work on some side projects to build my knowledge on some technologies. When my mom asked me what I was doing and I said I worked on project 'x' she would say "I think you should be sending out more job applications instead." Working on side projects is not an option for everyone.
What did get me hired was neither working on side projects nor blanket submissions of applications. A friend introduced me to another friend who's company he worked for was hiring and he gave me a list of open reqs for jobs he knew managers were looking to fill. I got two calls for interviews the next week and got an offer for one job by the end of the month.
IMHO your network, not even what you know or what you've done, is your most important asset when looking for work.
What did get me hired was neither working on side projects nor blanket submissions of applications. A friend introduced me to another friend who's company he worked for was hiring and he gave me a list of open reqs for jobs he knew managers were looking to fill. I got two calls for interviews the next week and got an offer for one job by the end of the month.
IMHO your network, not even what you know or what you've done, is your most important asset when looking for work.
My personal experience with this is that the ratio matters A LOT. I.e. having juniors out number the seniors is bad.
When you have a team that mostly consist of junior and mid-level developers, then they will clique together and they will mostly likely "behave" like juniors. Typical junior behaviour is e.g. to rather than digging into the backlog for the next thing to work on when you're done with one thing, to just sit around and wait for a senior to give you the next task.
However, if you have a team of seniors, who behave like seniors, adding one junior to this team, the junior will in no-time start to behave like a senior. Act by example. Before you know it you will have a really valuable team member.
When you have a team that mostly consist of junior and mid-level developers, then they will clique together and they will mostly likely "behave" like juniors. Typical junior behaviour is e.g. to rather than digging into the backlog for the next thing to work on when you're done with one thing, to just sit around and wait for a senior to give you the next task.
However, if you have a team of seniors, who behave like seniors, adding one junior to this team, the junior will in no-time start to behave like a senior. Act by example. Before you know it you will have a really valuable team member.
My two cents: simple supply and demand. The slow deflation of the startup bubble of the past five years or so has killed the junior developer. Once upon a time, there so much competition for engineering talent in the startup world that even developers with little to no experience and/or formal training were being handed lucrative jobs.
Looking back we see clear signs of a seller's market in talent: companies went out of their way to hire anyone remotely competent. Once hired, devs could hopefully rely on their company's mentorship, training, and experience opportunities to raise themselves up, and companies could rely on the same for retention. Coding boot camps sprung up to give people just enough skills and credibility to get their foot in the door. Salaries were high.
That gold rush has since dried up. Early stage funding has plummeted. Fewer and fewer companies want to go public. Large companies like Google, Facebook, etc. now dominate their respective product categories. Why is it now difficult to find senior people? Because for someone with years of experience and/or formal training, these companies offer the holy trinity of excellent pay, top-tier perks, and opportunities for career growth.
My personal opinion is that many of these junior devs simply aren't very good. As someone who conducts interviews at one of those aforementioned big companies, I'm consistently disappointed by how poorly most candidates perform on basic interview questions. And I don't mean the kind that test book knowledge of some obscure algorithm, I'm talking basic coding tasks.
From where I stand it's a matter of an oversupply of inexperienced, under-qualified developers that are no longer being absorbed into startups desperate for warm bodies to do rudimentary coding tasks, coupled with a strong demand for senior folks from big companies with the coffers to pay them.
Looking back we see clear signs of a seller's market in talent: companies went out of their way to hire anyone remotely competent. Once hired, devs could hopefully rely on their company's mentorship, training, and experience opportunities to raise themselves up, and companies could rely on the same for retention. Coding boot camps sprung up to give people just enough skills and credibility to get their foot in the door. Salaries were high.
That gold rush has since dried up. Early stage funding has plummeted. Fewer and fewer companies want to go public. Large companies like Google, Facebook, etc. now dominate their respective product categories. Why is it now difficult to find senior people? Because for someone with years of experience and/or formal training, these companies offer the holy trinity of excellent pay, top-tier perks, and opportunities for career growth.
My personal opinion is that many of these junior devs simply aren't very good. As someone who conducts interviews at one of those aforementioned big companies, I'm consistently disappointed by how poorly most candidates perform on basic interview questions. And I don't mean the kind that test book knowledge of some obscure algorithm, I'm talking basic coding tasks.
From where I stand it's a matter of an oversupply of inexperienced, under-qualified developers that are no longer being absorbed into startups desperate for warm bodies to do rudimentary coding tasks, coupled with a strong demand for senior folks from big companies with the coffers to pay them.
Graduating and going through the hiring process last year, I realized how true this is and how important your tech pedigree is. I recieved no full time offers before interning at Apple last summer, and after the internship I had no trouble getting offers (ended up with 5 full time offers). There wasn't any difference in how I described my interests before and after the summer internship, the only difference was companies wanted to see that I was vetted by a big name company. The real experience I had, working at a startup for three years before that yielded very little value in recruiting, even though the experience there made me a much better engineer and it was a successful startup that got acquired.
Are companies hiring differently, or are we just defining the terms differently?
"Junior developer" used to refer to someone who can program but who doesn't have a lot of practical experience.
Today "junior developer" refers to someone who can't program but who has a CS degree or went to a bootcamp, and there are more of those today as a proportion of the talent pool than there have ever been.
I think this failure of academic institutions to teach practical skills is diluting the talent pool, causing companies to favor more experienced engineers because they've been getting burned and don't trust their own (or academic institutions') ability to determine in advance whether a candidate will be a productive programmer or not.
"Junior developer" used to refer to someone who can program but who doesn't have a lot of practical experience.
Today "junior developer" refers to someone who can't program but who has a CS degree or went to a bootcamp, and there are more of those today as a proportion of the talent pool than there have ever been.
I think this failure of academic institutions to teach practical skills is diluting the talent pool, causing companies to favor more experienced engineers because they've been getting burned and don't trust their own (or academic institutions') ability to determine in advance whether a candidate will be a productive programmer or not.
I am a junior developer on my first job as a developer at a startup with around 50 developers.
The company, luckily, has a very opposite approach to hiring jr devs than what is described in the article. There are usually one or two jr developers per squad of 4 or 5 people (which is actually a maximum, the company is aiming only at more mid-level or senior devs right now).
There is a very collaborative environment, a lot of help from all senior developers - not only the ones in my squad.
What I think is missing in the economics there is that I (and all other jr developers) do provide measurable value to the company after 2 or 3 months. I am able to create simple, but necessary and demanded by the business, features by myself, just with senior developers reviewing my PRs.
This idea that junior developers are a drag to senior developers is fake in my (limited) experience. I make the senior developer in my team more productive most of the time, and after around 8 months in the job, we are actually hiring another junior developer because I think I am ready to take some of the responsibility of mentoring him/her on a basic level.
I am pretty sure that I am a net positive to the company on a $ invested per value delivered ratio.
The company, luckily, has a very opposite approach to hiring jr devs than what is described in the article. There are usually one or two jr developers per squad of 4 or 5 people (which is actually a maximum, the company is aiming only at more mid-level or senior devs right now).
There is a very collaborative environment, a lot of help from all senior developers - not only the ones in my squad.
What I think is missing in the economics there is that I (and all other jr developers) do provide measurable value to the company after 2 or 3 months. I am able to create simple, but necessary and demanded by the business, features by myself, just with senior developers reviewing my PRs.
This idea that junior developers are a drag to senior developers is fake in my (limited) experience. I make the senior developer in my team more productive most of the time, and after around 8 months in the job, we are actually hiring another junior developer because I think I am ready to take some of the responsibility of mentoring him/her on a basic level.
I am pretty sure that I am a net positive to the company on a $ invested per value delivered ratio.
When I hire, It's ONLY junior devs.
I prefer just out of University before they can get bad habits. Training a dev takes me 6-12 months for them to break even productivity wise.
When we have had intermediate or seniors hired they would not listen to anyone else or care if their software was easy to maintain in the future. I run a small team of 6, I have had 0 turnover for 3-4 years.
I don't want devs who "get it done" I want devs that enjoy the work and want to share it.
I prefer just out of University before they can get bad habits. Training a dev takes me 6-12 months for them to break even productivity wise.
When we have had intermediate or seniors hired they would not listen to anyone else or care if their software was easy to maintain in the future. I run a small team of 6, I have had 0 turnover for 3-4 years.
I don't want devs who "get it done" I want devs that enjoy the work and want to share it.
I think the "Junior" title is used entirely by companies to get a discount at salary negotiations these days. I work with a large mix of mid level, senior, and "Junior" developers by title. The practical difference in our technical skill levels is almost nonexistent. The proper progression should be: Intern -> Developer -> Senior/Lead, with Senior/Lead denoting that certain expectations are made of your organizational and management skills moreso than seeking genius rockstar programmers.
I've long maintained a maxim that's something like "Look in the opposite direction of everyone else." So when everyone flocks to the bay area, get the heck out of there. When everyone says "I have no space for junior devs" think about how you can take advantage of that underutilized resource.
Junior devs are cheap. If you're willing to spend the time to sift -- and you will be doing a lot of resume sifting -- and setup a framework for mentorship, you can hire junior devs with more promise than your average senior dev.
Anecdotally, one of my junior hires from a few years ago earned his way through positions quickly and became a senior software engineer in just three years. I actually invited him to be my co-founder on my next venture and he turned me down :-P.
Junior devs are cheap. If you're willing to spend the time to sift -- and you will be doing a lot of resume sifting -- and setup a framework for mentorship, you can hire junior devs with more promise than your average senior dev.
Anecdotally, one of my junior hires from a few years ago earned his way through positions quickly and became a senior software engineer in just three years. I actually invited him to be my co-founder on my next venture and he turned me down :-P.
This is one of the most important posts I’ve read on HN in a while. 7 years ago I broke in as an inexperienced dev without a degree because some budget strapped team took a (hedged) chance on me and offered a paid internship. They mentored me a huge amount in a way I have never seen at another company, as well as several other junior devs. Most every one is in a senior position today, and some have stayed at the company. This is not happening anymore as far as I can tell - I know plenty of people with the knack for it but the door seems to be closed, because companies do not want to take the risk.
This has been going on for years. Back in the mid 80's when I was going to college I knew a lot of people had come back to get their masters are even change fields because they couldn't find jobs. Employers wanted 2-3 years minimum experience and the new grads lamented how were they supposed to get said experience? My first job I worked FREE for the first 3 months at a startup (they didn't have the money to make a payroll anyway). Ultimately that launched my career and got me past the 2-3 years experience issue. This was back in the 80's!
>the rate is anywhere from $190-$300 an hour
Well there's your problem. Valley pricing. You can get Sr Devs much cheaper than that. Then you can afford to train up some juniors.
I don't think that's the real problem though. Companies want you to take the risk/expense of learning a technology that might be obsolete next year. They'll pay you back in salary if you lucked up and mastered the right stack. If you didn't, then you keep eating ramen until you strike gold.
The other problem is most Sr.s don't want a Jr. coming in and making negative contributions. Sr.s are frequently the ones doing the interviews. They see most Jr.s as "What's a computer?" level talent that will start fires in production systems.
Well there's your problem. Valley pricing. You can get Sr Devs much cheaper than that. Then you can afford to train up some juniors.
I don't think that's the real problem though. Companies want you to take the risk/expense of learning a technology that might be obsolete next year. They'll pay you back in salary if you lucked up and mastered the right stack. If you didn't, then you keep eating ramen until you strike gold.
The other problem is most Sr.s don't want a Jr. coming in and making negative contributions. Sr.s are frequently the ones doing the interviews. They see most Jr.s as "What's a computer?" level talent that will start fires in production systems.
I teach at a Bootcamp and see a lot junior developers looking for jobs. Many of them complain of it being hard to find jobs and it is. But I don’t think it is any harder than say 10 years ago when I got started. The main the problem is they’ve never interviewed for a technical position before or aren’t looking in the right places for jobs. Also a lot of jobs are perfectly suited for juniors but it doesn’t reflect that in the job description. So there are a lot of things that make the job search hard and frustrating but the jobs are out there. And I would love to see more companies more actively mentor people too. But those companies do exist today. It’s just a numbers game. If you can hold out, you’ll find it.
What trouble are candidates looking for junior developer positions running into? Lack of openings? Lack of response from companies? Can't get past the interview?
(Also, are these people advertising themselves as a "junior developer"? Perhaps this is just my experience, but I don't think I ever used that; I started my search looking for simply "software engineer" positions.)
(One the one hand, one company I worked for doesn't seem to really have any junior developers, but we're also not hiring period AFAIK. Another company I worked for pretty much only hired interns, b/c hiring was otherwise tight and those were easy to get approval for. Not quite what I think the article means by "junior dev" (I interpret that to mean "entry level software engineer") They were generally very helpful, though I think we learned how much we needed to learn about being mentors.)
> Also their hand wringing about the costs seems like crocodile tears knowing all the time they waste (at least in my opinion) on things like meetings.
I echo this opinion.
(Also, are these people advertising themselves as a "junior developer"? Perhaps this is just my experience, but I don't think I ever used that; I started my search looking for simply "software engineer" positions.)
(One the one hand, one company I worked for doesn't seem to really have any junior developers, but we're also not hiring period AFAIK. Another company I worked for pretty much only hired interns, b/c hiring was otherwise tight and those were easy to get approval for. Not quite what I think the article means by "junior dev" (I interpret that to mean "entry level software engineer") They were generally very helpful, though I think we learned how much we needed to learn about being mentors.)
> Also their hand wringing about the costs seems like crocodile tears knowing all the time they waste (at least in my opinion) on things like meetings.
I echo this opinion.
>
But let’s say they do start sticking junior devs back into teams again. You have the additional issue which is now senior developers have no experience working with junior devs or training people at all. When I first started working with junior devs I had no idea how to do it. I felt lost and confused. My company was just like basically “give these people something to do so they can learn something.” But that’s really not a lot to go on.
I don't really agree with this. I've had to mentor people and there is not really a special trick. I just kind of pair program, and when we start I drive and eventually they drive and then once that's comfortable I leave them alone and leave them to ask me questions. I've found this mostly effective.
Explaining things to junior developers isn't so different from explaining things to anyone else. In the course of your job you probably have to explain concepts to your co-workers and to non-technical people, right? A junior is somewhere between those and you can calibrate as you go.
I don't really agree with this. I've had to mentor people and there is not really a special trick. I just kind of pair program, and when we start I drive and eventually they drive and then once that's comfortable I leave them alone and leave them to ask me questions. I've found this mostly effective.
Explaining things to junior developers isn't so different from explaining things to anyone else. In the course of your job you probably have to explain concepts to your co-workers and to non-technical people, right? A junior is somewhere between those and you can calibrate as you go.
1 or 2 "senior-level" folks (imho, people with at least a decade of experience within a multitude of environments) are going to outperform a half-dozen junior engineers.
When you're building a monolith Rails application, anything goes. But now that the industry is trending towards (for better or worse) service oriented architecture, stateless cloud deployments, walled gardens tossing data back and forth over RPC, data science teams, etc... you need people who have been to war a dozen times and have already made all the mistakes. That is what you get with a senior engineer: someone who knows what NOT to do.
I have spent most of the last 2-3 years of my career playing bad cop and telling people no. Shutting down wild and exciting ideas. Stopping over-engineering in its tracks. Preventing an investment in a bad technology. Preventing fragmented infrastructure with data in a handful of different databases.
I think that is why the junior engineer has disappeared. Most of us were never trained/educated/encouraged to be good teachers and we spend most of our time putting out fires and trying to keep our hands on the pulse of technology while simultaneously hanging on for dear life within our organizations. Pivots, layoffs, blockchains, shiny new business objectives are all mortars flying at the eng team left and right.
I wish I had junior engineers to mentor and teach and foster into folks who have good critical thinking skills and I can trust 100% to make the right decisions – but there is a tremendous cost involved to the business that I think most are unable to afford. Some of my most rewarding career experiences involved working side-by-side with folks fresh out of a bootcamp or university who were wide-eyed and bushy tailed. It was a lot of fun watching them run off and do a bunch of work then having a discussion on the choices and using each moment as a stepping stone towards a bigger understanding of all the moving parts in modern infrastructure.
When you're building a monolith Rails application, anything goes. But now that the industry is trending towards (for better or worse) service oriented architecture, stateless cloud deployments, walled gardens tossing data back and forth over RPC, data science teams, etc... you need people who have been to war a dozen times and have already made all the mistakes. That is what you get with a senior engineer: someone who knows what NOT to do.
I have spent most of the last 2-3 years of my career playing bad cop and telling people no. Shutting down wild and exciting ideas. Stopping over-engineering in its tracks. Preventing an investment in a bad technology. Preventing fragmented infrastructure with data in a handful of different databases.
I think that is why the junior engineer has disappeared. Most of us were never trained/educated/encouraged to be good teachers and we spend most of our time putting out fires and trying to keep our hands on the pulse of technology while simultaneously hanging on for dear life within our organizations. Pivots, layoffs, blockchains, shiny new business objectives are all mortars flying at the eng team left and right.
I wish I had junior engineers to mentor and teach and foster into folks who have good critical thinking skills and I can trust 100% to make the right decisions – but there is a tremendous cost involved to the business that I think most are unable to afford. Some of my most rewarding career experiences involved working side-by-side with folks fresh out of a bootcamp or university who were wide-eyed and bushy tailed. It was a lot of fun watching them run off and do a bunch of work then having a discussion on the choices and using each moment as a stepping stone towards a bigger understanding of all the moving parts in modern infrastructure.
Is this because people stay for just short timespans? We hire junior devs but we don’t expect much for the first years. I’m 15 years in and in a team of 30, the average is probably 10 years.
It takes a year to just “onboard” someone until they don’t need a lot of mentoring, but until a junior dev isn’t just a dangerous mess-creating junior dev, takes at least a couple of years more.
Learning the domain takes many years too, and without knowing the domain you need to be micromanaged and have everything specced up front or need constant interrupting feedback from product owners (should this be default on? What order should this be sorted? How many frobs will the typical user enter here? etc).
Obviously you can’t stop people from leaving but I wouldn’t even hire someone unless I genuinely believed they are going to stay 5 years.
(For context, this is heavy technical desktop software in a very mechanical engineering-heavy domain)
It takes a year to just “onboard” someone until they don’t need a lot of mentoring, but until a junior dev isn’t just a dangerous mess-creating junior dev, takes at least a couple of years more.
Learning the domain takes many years too, and without knowing the domain you need to be micromanaged and have everything specced up front or need constant interrupting feedback from product owners (should this be default on? What order should this be sorted? How many frobs will the typical user enter here? etc).
Obviously you can’t stop people from leaving but I wouldn’t even hire someone unless I genuinely believed they are going to stay 5 years.
(For context, this is heavy technical desktop software in a very mechanical engineering-heavy domain)
Junior-to-Senior developer ratios are critically important. If I hire too many juniors, then they will write a ton of shit code, and force whatever seniors I have to spend all their time mentoring and not producing.
Seniors are valued because they can write great code, think long-term solutions, take on a project and see all the details to completion, have a more predictable development cycle, and yes, train Juniors.
So my point is... if you graduate too many too fast, you'll end up with people who you can't train, and who also think that working for "the man" a.k.a. big companies is bad, so the perfect combination of limited use, expensive, and unwilling to work in places where they can experiment.
Seniors are valued because they can write great code, think long-term solutions, take on a project and see all the details to completion, have a more predictable development cycle, and yes, train Juniors.
So my point is... if you graduate too many too fast, you'll end up with people who you can't train, and who also think that working for "the man" a.k.a. big companies is bad, so the perfect combination of limited use, expensive, and unwilling to work in places where they can experiment.
As a near-Junior level developer myself sitting at two years of experience I've found myself wondering the same thing. I've put out my resume across the country and found few companies willing to look at it and even fewer positions. Most are looking for mid-tier to senior developers. Even worse I've kept in touch with friends who despite having far more internship experience than I ended up having quite a bit of difficulty find a job post-grad.
Though my current company has had large success in poaching interns into junior devs because we have a strong and genuine sense of teamwork + effective mentoring.
Though my current company has had large success in poaching interns into junior devs because we have a strong and genuine sense of teamwork + effective mentoring.
Companies have woken up to the fact that for the most part people no longer stay in one job for more than a few years.
Training junior people makes sense economically only if they get up to speed and positive productivity within a small fraction of the time they'll be with your company.
Since a bad developer creates enormous negative productivity, it can be years before a new programmer's contributions are productive at all, let alone greater than the ongoing opportunity cost of the time spent mentoring them, let alone the sunk cost of months to years of mentorship.
This time makes sense only to invest if you expect the developer you trained to stay with you for many years. That expectation has become less and less rational over the past couple decades.
Nowadays if you take on and train a junior, you're taking the loss on that training - not to train someone who's going to be a good mid-level developer in your own company, but who's going to jump ship for somewhere else well before you can make back the senior developer time spent on them.
Training junior people makes sense economically only if they get up to speed and positive productivity within a small fraction of the time they'll be with your company.
Since a bad developer creates enormous negative productivity, it can be years before a new programmer's contributions are productive at all, let alone greater than the ongoing opportunity cost of the time spent mentoring them, let alone the sunk cost of months to years of mentorship.
This time makes sense only to invest if you expect the developer you trained to stay with you for many years. That expectation has become less and less rational over the past couple decades.
Nowadays if you take on and train a junior, you're taking the loss on that training - not to train someone who's going to be a good mid-level developer in your own company, but who's going to jump ship for somewhere else well before you can make back the senior developer time spent on them.
Is the junior job shortage just a valley bubble thing? I'm a young dev and there are grad/entry level positions everywhere I look, none of my peers have really had issues either.
How good (or bad) companies are at actually training their employees is another matter.
edit: typo
How good (or bad) companies are at actually training their employees is another matter.
edit: typo
I trained a junior dev so well I was laid off because he was cheaper than me. One of the proudest moments of my professional life to be honest.
That feels too dumb to be real (which is exactly why it's probably a real thing).
You don't hire senior devs to code - good junior devs can code not only "just as fast", but probably faster too! You hire senior devs to guide you WHAT and HOW to code. And they can do that so much more effectively if they don't have to actually code all that stuff themselves! "Mentoring" is basically the job you hire a senior dev to do... how can people say with a straight face that they can't afford to let them do it?
I don't view this as "tragedy of the commons" as other people here suggest. I view this as plain human stupidity (which we're all guilty of, sometimes... it's just good to realize when you're being stupid before it seriously hurts you).