Software Developer Shortage Is Coming
m-cacm.acm.org
m-cacm.acm.org
Propaganda like "job shortages" are a nice way of saying "we need to import more workers", whilst rejecting hundreds of domestic applicants.
It’s extremely hard to justify investing in junior engineers when the trend in our industry is to jump between jobs every 1-3 years. What’s the point of hiring and training/mentoring anyone if the industry average tenure is less than, say, 5 years?
I think calling it artificial is going a bit too far.
At least from my perspective, our entire industry is relatively new (if you look purely at the average / median years of experience in out industry).
5-7 years is often considered “senior”, while in other industries it can take 10-15+ years to really be considered “senior” in your role.
It’s not surprising that many companies want “senior” level experience since “senior” really just means “not a beginner” at many companies. And not surprising that companies are reluctant to hire junior devs when jumping between jobs is so commonplace.
Employees job hop to get raises and title changes. If employers were more willing to invest in anyone, not just Juniors, this wouldn't be as much a problem.
Some people do want to job hop a lot, but many don't. This industry is actively hostile to the people who might otherwise be loyal to their employer, because it does not reward loyalty at all.
That said I have known peers to go in and say they are looking at leaving and all of a sudden a solution is found…
There are companies where the value of a programmer isn't the same as the value of a programmer in another company.
There is no way for small SaaS company with revenue of a few million overall can compete with the amount that a tech company with the revenue of a million per employee is the norm.
Firms don't want to pay the wages of experienced developers.
Firms don't want to train inexperienced developers.
Thus you find the young developer who thinks that old developers have it made and the old developer who wishes they were young.
note: I am a 3x entrepreneur and my opinions are based on my 2 decades of experience in IT.
> "their unemployability is exacerbated by their attitude problems"
I'm trying to remain polite about this, but with the tone and attitude you strike, I'm having a hard time taking your opinion for anything other than bitter frothing. Maybe you can elaborate on why you believe they're entitled, have attitude problems, or are brats.
Since you asked, I speak with the experience of starting 3 businesses across Pharma, Defense and Media industries. I have also been involved in hiring multiple people across sectors, both in tech and non-tech jobs. As you also know, for defense that involves White-as-Wonderbread US citizens only, I also have interviewed almost exclusively from a certain complexion-gender combination club. Thus have formed my own pattern recognition, with an n of several hundred. If you are open to listening I can share a few illustrative anecdotes. Admittedly my posts are just opinions as I can only offer my own perspective. Although this study, and multiple others, seems to support my viewpoint.
p.s. Truth hurts.
On the other hand, pharma as a concept certainly needs to exist to save lives. As a Canadian, pharma is not so bad here, but I believe their existence as a for-profit* entity is contrary to the purpose of universal healthcare, which I think is a common enough sentiment. American pharma, however, actively profits from the inequality inherent to the (rather evil) lack of universal healthcare system. Any positives for society seem strictly incidental, as exemplified by the price of insulin.
I also agree with your point regarding profiteering. This behavior can be observed in many industries, not just pharmaceutical, but it seems a more egregious violation when it affects our health or the well-being of someone we know.
Your comment grabbed my attention because I couldn't immediately think of anything to support the sentiment of it being immoral to work in the pharmaceutical industry so I was naturally curious to find out.
Thanks for taking the time to share your perspective.
2. I know a number of good developers that are respectable, they just don't have the work experience in the form of "Worked at X for 2 years". A quick gander at github can reveal a number of highly skilled projects done out of self creation and not sourced from a company.
3. I haven't come across many "self entitled" programmers, but certainly many self entitled managers and business owners whom wave their hands around in the air acting like they know something they don't. Too many MBA's and people running companies they know little to nothing about, and base their "practices" almost entirely off confirmation bias. Managers and owners are by their nature more prone to incompetant brattiness - humans like to think power = competance.
4. Software dev has become more like making music - everyone does it, very few get a record deal and make good money. Whether the music is 'good' isn't much of a relationship with having a job in it or not. Plenty of bad devs with good resumes.
https://www.bls.gov/ooh/computer-and-information-technology/...
I have always been a bit perplexed by the distinction. What are examples of "Computer Programmer" jobs in the US? Why would you want two distinct classes of "software creators"?
There was also a distinction at one time between what amounted to "people who wrote code" and "people who designed software". The writing code was the 'lower' of the two and the 'design' description included overseeing the other classification.
You can see this by poking at the Wayback for this page:
* 2012 - Programmers & Developers ( http://web.archive.org/web/20120416044322/https://www.bls.go... ) (and a catch all "Web Developers" with a bunch of other stuff - maybe a holdover from the webmaster?)
* 2014 - Programmers & Developers & Web Developers ( http://web.archive.org/web/20140627205116/http://www.bls.gov... )
* 2021 - Programmers, Developers, & Web Developers and Digital Designers - http://web.archive.org/web/20210331093730/https://www.bls.go...
----
Another way of looking at this is https://www.bls.gov/oes/current/oes_stru.htm#15-0000 and the history of that page (which goes back even further).
Back in '07 ( http://web.archive.org/web/20070111041207/https://www.bls.go... ), there were Computer Programmers; Computer Software Engineers, Applications; and Computer Software Engineers, Systems Software.
So, it really is a change of "this is how businesses and government see the "Computer and Mathematical Science Occupations". Lumping it all together isn't necessarily the right answer. The titles that we've got that don't actually map to what we do doesn't help.
The answer to this question in the article -- make sure you've thought about what a technical career track that includes advancement is within your organization -- is part of the picture, especially at the senior level.
If you want advanced skills, be ready to advance people.
And that may even include preparing staff/extrasenior engineers to actually train juniors and even seniors in skills that you want rather than expecting skilled labor to show up preformed at your doorstep so you can externalize the cost of thinking through how your talent supply works (as attractive as that option will always remain... if one can get away with it).
It's not always an easy problem to solve though, you need a domain and software platform challenging enough to have room for growth and advancement, without shooting yourself in the foot by making it too difficult to hire developers for. Some domains just aren't that challenging, and building simple and robust software is usually preferred to building over-engineered and challenging software. You may just genuinely have a boring software company that can't hold on to certain types of developers very well.
It's simply that demand is skyrocketing, but we didn't make software substantially easier in the last decades.
Larger teams also ship faster, there's a lot of complexity to enable that collaboration.
Like what? Earlier systems worked if your computer worked. Adding a server is a DRM move and doesn't help the user with reliability - usually the opposite.
My experience is that in most situations larger teams ship slower, precisely because of the collaboration costs you mention. There are ways to reduce the dependencies, but most organizations can't get there.
Most software is complete shit, and we're lucky when the end user doesn't notice too much. As a software engineer, I'm appalled by the average "web app" both in terms of how the product functions and the code making it happen. Accessibility is still a complete afterthought and the documentation on accessibility standards is too confusing.
The only reason many of us are still around is that no one has truly figured out a good replacement for the average software developer yet. The closest we have is things like Wix and Squarespace. The junior and mid level developers of today are ripe for obsolescence and it's a matter of time before someone finally figures out how to give small companies the power of software development without all of the overhead they currently endure.
The world also doesn't need that much software, hence we don't necessarily need more software developers all the time. Software scales with problems to be solved, not with population. Those paying our bills need to figure out just how much of their money they are wasting on what is essentially the same kind of software development that took place 30 years ago.
I think, we didn't scratch the surface of the true demand yet. But, yes, we should get dramatically better in so many ways.
It's only been a few years since developers (outside of these niches) stopped laughing when hearing about sound static type checking, static analysis, model checking, object capabilities, abstract interpretation, message passing APIs, getting rid of NULL, reactive programming, stream programming, let it fail, transactional memory, linear types, etc.
Of course, at the same time, we moved everything to web programming, where everything is broken for different reasons. Research has been studying that for a couple of decades, too, so I figure we should start using more robust paradigms within 10-20 years.
Also, most developers in America don't make that much more than European developers. It's just that we happen to be willing to pay seasoned developers quite a lot more. Most junior and mid-level developers here don't make much more than $90k, and many of the companies that are willing to pay at least that or more are located in areas where the cost of living makes that salary abysmal.
But the ceiling for top developers in most of the world is below that. Even here in the UK, where salaries are starting to get pushed up a bit, there are still only a few employers who would beat that today, and mostly in places like London where cost of living is also relatively high. Hardly anyone is making the kind of money that you see devs with as little as 5 YOE routinely making with half the companies in SV, even people with multiples of that experience who would be staff/principal level in a big US tech firm.
Except these days it seems the whole of Europe undervalues software engineering.
Seriously, it’s not best practices when everyone apply them differently.
While I get the gist of what you're saying, I think building and repairing physical things is different from building and repairing more abstract things.
You'd be surprised how much variation there is in the solution when it comes to autofabrication, and yes there's similar amounts of "figuring it out" that there is in the software world.
Quite frankly the automechanics <-> software engineer analogy is apples to oranges.
Used to be that they could repair every car, but now they are tied to brands because they need certifications and special tools. Not because the manufacturer needed the tools to build the car, but because without them, anyone could repair it.
> we're building systems.
Someone has to maintain them.
There's always been factory repair manuals, and while repairs used to be something that were more common across brands and something more accessible to the weekend wrench turner, that doesn't change that the manufacturer had explicit guidance that was there to follow.
The "specialization" aspect of things from a mechanical standpoint is a by product of additional complexity and advanced proprietary systems. Consumers (and regulators) ask far more of a modern car than what could be delivered with simpler, purely mechanical systems. Whether it's safety, emissions, reliability, or just features, as those evolve and progress, repairs and maintenance get more complicated and involved.
>> We're building systems
> Someone has to maintain them
Software maintenance and vehicle maintenance is fundamentally different. Vehicles have wear items that need replacing (brakes, hoses, tires, etc), consumables that need to be changed (oil, lubricants, belts, coolant), and parts that are subject to mechanical wear. Systems don't have any of those things.
The closest analogs I can think of would be upgrading a dependency or maybe bug fixes. While some bug fixes might be small changes to fix typos or incorrect logic, some bug fixes may be significant enough to necessitate redesign of subsections of the software. You wouldn't expect your mechanic to redesign your car's brake system because you found it wasn't stopping as quickly as you'd like it.
Which they do, but it took years of setting up governance to get people to agree on what the best best practices were. I mean, at that point it’s not really best practices anymore, because that implies that they have a broad adoption.
I'm not sure what this is supposed to mean. My brother is an auto mechanic and the type work he does constantly blows my mind. Diagnostics, transmission/engine rebuilds, you name it; especially with these newer models.
With the exception of a few, there's nothing special about what we do. I don't see how we're any different than "glorified auto mechanics".
You don't really mean this, do you?
That, and our employers are taking 99% of the value we create, when that figure should be closer to 90%
now you're talking about "society," but you were the one who compared them to cogs to begin with, lol.
So the shortage is not only in having enough developers but having enough good developers. And that's tough given how vast the industry is, and how fast it moves.
The thing is... this was true in the 90s, was true in the 00s and was true in the 10s. Yet we are here, shortage in developers after 30 years of everyone and their dog studying software engineering.
The true "shortage" is really for developers with 3+ years experience who can "hit the ground running". Most companies will only make limited commitment to junior engineers, favoring mid and senior level developers.
Yes. Corporate management wants instant gratification. Not sending people to training classes. World's smallest violin plays.
> Team A hired a junior dev, onboarded them, six months later they were productive and left for another job. Between the costs of hiring, onboarding, and lost productivity for the rest of the team, and wages for the employee, we've realized a net loss of of $150,000. The lead and manager are saying if we were to hire another junior dev, it would set the project *back* by another quarter from its current delayed estimates.
> Team B is still looking for a mid or senior to hire, but unlike team A they are only slightly delayed from the readjustments after taking into consideration not hiring someone.
Yes, they'd like to have someone hit the ground running... but they'd really rather not incur losses and slipping estimates from losing employees.
There's a sense of entitlement from many employers. They expect that the people they want will be available at short notice at the wages they want to pay. And that they won't have to fight to keep them. That seems to no longer be the case.
If they are regularly turning over that fast that's a red flag that there's problem inside your org that need to be addressed.
You've got a small, IT team which includes some bespoke software to keep local companies running... you know, the web pages or data processing requests. There's a SaaS product that's the regular income, but its not that much. You're paying competitively for the area - about 2x the average per capita income for the area for a junior dev (per capita income is $28k, you're paying $55k - compare; per capita income in Minneapolis is $40k (Glassdoor: https://www.glassdoor.com/Salaries/eau-claire-software-devel... - make sure to look at the 0-1 years of experience)). Your clients are local companies in the neighboring counties.
There's a new junior hire from the local college... and a few months later, their interviews for Amazon in Minneapolis pan out and they're gone.
There's no way that you can compete with Amazon in Minneapolis.
Is that a red flag that the small company can't pay Amazon wages? Should the small company close up shop instead?
Do they try hiring another junior dev from a local college... to have them move to Minneapolis also? Or do they just put out a req for a mid or senior who wants to live in northern Wisconsin where you can go fishing after work on a small lake and settle down?
All of the "you're not paying enough" means that the small companies are expected to pay big tech wages... and they can't.
They close up shop and now the other clients are going to need to go to the larger consultancies for their work... or not do it at all.
Yes, this is globalization played out with software developers... even if its just companies that are a few hours away by car for a move.
This boils down to "can / should every developer be expecting to get wages equal to Amazon?" Can the company afford to pay the junior dev $70k? $80k? $90k?
Likewise, "can you hire a junior dev with no real history of employment and have them stick around for a year when given alternative offers from a tech company?"
If the answer is "no", then why are people complaining that these companies aren't hiring junior devs and training them and instead deciding to not incur extra costs while they wait for someone who will add to their team for a few years rather than a few months?
Whose fault is it that I left after 14 months?
I completely understand hiring managers that limit themselves to looking at devs with 3+ years of experience, because it tends to filter out folks that just can't do the basics of the job despite their credentials.
Personally, I do like to hire juniors and help them grow their skills and their careers, but I need to see at least basic coding skills and a problem-solving mindset up front to make it worth the risk and the investment of time.
You would think that it would eventually lead to some stopping point, but there are additional funnels and issues. For example, finding professors in university to teach software engineering is hard, because all of the people graduating from their universities in software engineering know they can make much more money in the industry than in education. Places like Stanford or MIT (who are already trying to be selective on purpose) can afford it, but community colleges or even high schools can't give them 1/3 of what they would make otherwise.
Entry Level Engineers - Easy to find but expensive to train
Mid level engineers - Difficult to find but minimal training required
Senior engineers - Extremely difficult to hire almost no training required
For a software team to be successful you need at minimum a strong mid level to keep everyone moving in the right direction but it's preferable to have a senior level engineer.
I'd recommend everyone heavily invest in growing the people they have instead of playing the 'lets hire a senior lottery'.
How much will that training cost in terms of time spent hiring and onboarding over the duration of the project?
What is the productivity loss of doing the "lets hire a senior?" ... and not incurring the other expenses of training entry level who leave after a year?
There really aren't that many options 1. Invest in training the people you have 2. Offer some novel incentives 4 day work week or something. 3. Compete on salary by paying more
In a lot of organizations 2 and 3 can't be changed by the people doing the hiring.
At least at my company, Principal Software Engineer is considered a technical/individual track role, and my assumption was that Principal/Staff Software Engineer at most companies were. Is that not the case?
H1-B isn’t the culprit here, but I do agree that we need to better fund our education system, all the way back to public pre-schools and on through public universities.
Throw as much money at the problem you want. But until the philosophy of education changes, you won't be any better at creating successful computer scientists and programmers.
Our entire education system (even at the University level, which waters down curriculum to keep butts in seats) is now driven by a philosophy of maximizing equity, not opportunity. Writing software is a skill that requires high aptitude, and the needs of high aptitude learners are almost ignored by those deciding education policy and spending. The budget, teaching strategy, and curriculum focuses almost entirely on appealing to and raising the lowest common denominator.
In fact, aptitude is generally associated with the ultimate evil of the social justice crusader: privilege. It will (continue to) be shunned and bullied accordingly.
In a more traditional software org, the implementer does a lot of this work, but this doesn't really happen with outsource contracts in my experience.
That's what I was getting at. If it was feasible, it would have been done completely by now.
Or IN the country, depending on where the place-of-birth lottery put you.
I have 20+ years of career in R&D, consulting, startups and multinationals, publications in 1-tier conferences, lots of Java/PHP, a bit of Cloud, Big Data and ML experience. I grew up to IT Director, downshifted to SSE at a unicorn.
I've been searching for a new job for over half a year in Europe. Mostly remote. I am willing to do legacy programming. My only requirement is to work on a product creating real value. But I always bump into artificial niches: GDPR/CCPA/KYC compliance, all sorts of crypto, yet another social network, data mining users, traiding floor software... Exactly the sort of things I am tired of.
There is no shortage of software developers, but a big shortage of decent work.
Want to attract and retain qualified developers? Pay them. If you offer 5% salary increases when moving to your competitor means a 25% salary increase the developers will move.
Can't afford it? Maybe you should cut those that suck off developers' teat.
Average developers are not making $250k/year cash + guaranteed bonus + bonus + options.
When I am looking at my friends and group them into devs and non-devs: devs make significantly more money, I am really jealous of that, because I am a business guy myself.
In my eyes devs are overpaid: because there are not enough of them in the market they can be picky and choose. The more people study CS, the more supply will close this gap again.
In the project that I am working in the business people and devs all contribute a lot of hard work and many hours to the success - why are the devs paid so much more?
Because you clearly are struggling to hire developers at the prices you want to pay and you are not struggling to hire "business people" at the prices you want to pay.
In either event you are paying developers shit. When an average junior developer starts getting paid what an average finance banker gets paid post school and in 10 years an average developer rising at the average rate in an org gets paid what an average person in finance who is rising at an average rate in finance org, then maybe there would be something to write about.