It's probably an axiom of some sort.
On the other hand I've talked to an unemployed Java developer who didn't seem to want to learn anything new beyond what he learned at college 15 years ago complaining about the job market.
In my 25+ years of experience, I think that demand for software engineers has always been high. But what's in demand keeps changing. I saw COBOL and RPG IV programmers in 1992 complaining about the lack of software jobs. It'll always be hard to keep up with the jobs that are in demand unless you look at what's in demand and work on the side to stay relevant.
1. We're bad at hiring, as an industry. We just aren't very good at identifying good candidates.
2. We're an industry where the average skill level is below the minimum threshold of competence for even low-level roles.
I.E. there are lots of people looking for jobs, but most of them either couldn't code their way out of a wet paper bag -- and identifying the good candidates is time consuming and error prone.
One single person (an engineer of the hiring team, sometimes fresh out of college) is responsible for evaluating a candidate. That is extremely wrong. It's like a bottle neck, how can you evaluate a candidate in 45 minutes when you only have 1-2 years of experience working for the exact same employer on the same project? This just doesn't make any sense. Interviewers end up asking very specific details they've been exposed to, or they simply google for the "hardest XXX interview questions" an hour before the phone call. You, as a candidate, get judged and often eliminated based on something completely worthless. I bet you %50 of the rejected candidates would do the job better than their interviewers as soon as they would get up to speed at work.
Solution - They should create a new role in every engineering organizations and hire (or should I say - pick internally) extremely skilled software engineers who would interview candidates. That would be their full time job. Staying up to date with the latest technologies as well as learning how to evaluate a candidate properly. Right now it's completely random because interviewers aren't interviewers, they are resources allocated to projects and don't have time for that stuff. Crazy to see in 2017 that the actual hiring process is still at the very bottom of the priority list. I think it's the biggest problem in 2017.
I wonder if the average skill is that low (kind of) or if it seems that way because only the most desperate are willing to jump through the elaborate hoops we create for hiring.
How do we fix this? It seems that everyone who claims to be actively working to fix hiring in tech is only exacerbating the issue (see hacker rank, codility, etc).
The company I'm currently at is certainly making things better for a subset of candidates, but what we do is largely orthogonal to these issues.