1. Recruiters are scraping the same job boards applicants use.
2. Salary Surveys are always wrong, and many go underpaid because they don't know how to negotiate.
3. Companies write contracts poorly, with little consideration for things that keep employees engaged and on a contract.
4. There are way too many technology stacks, too many people focus on saying theirs is the best rather than accurately evaluating solutions based on available skills and right fit to the business need.
5. Way too many inexperienced and untrained people in management positions. I can't tell you how often I've heard IT managers say that they're "Not really a technical person". Stop hiring your unqualified friends.
6. Government has no idea about tech either. They need to be educated in order to protect consumers, employees, and the economy from bad tech.
7. Not enough consumer protection enforcement. When companies do bad things the consequences should set an example for everyone else, not just be 10% of the profit as a penalty.
8. Employees need better vacation, and more options for flexible work days. 40 hour weeks are a lot, the standard for industry leave is usually 15 days a year now. The entire stat of Virginia has an "At Will" employment policy. No wonder why really productive projects suffer from attrition and buron out. You only get out of that trap if you have the power to negotiate, but companies need to create better policies and stick to them for all employees.
9. Recruiters need to educate themselves on technology. Stop lying to candidates about positions, you should know the difference between Angular and Python. You should also always be up front about where the work location is, and stop sending me text messages you vultures... Email works just fine.
I would argue that two major factors are really affecting the market on both sides-- one is that cost of living in many places is extremely high, and the other is that businesses are demanding people with deep understanding of complex technology from day 1.
Decades ago, cost of living was lower, and apprenticeships or "learning on the job" was tolerated.
These days the landlord wants 30k a year, and the employer wants to pay bargain basement for "10+ years of reactjs experience" :)
My comment is going to cover some of the answers given by others but here is my view of the situation.
Management/HR:
1. They don't know programming (to them it's magic).
2. They are afraid of paying for people who are less than rockstar. If they can't keep up with the Googles and Facebooks then they can't succeed they hear.
3. Technology/market has been moving faster than developers can develop. Need it yesterday is the theme management dances to and they don't care about paying you 30 hours of overtime if they can get something to market this week instead 2 weeks later under a relaxed deadline.
4. All computers work like Star Trek because Siri can tell them the weather according to their logic.
Programmers:
1. Starting your own framework or library just to advertise/divide the mindshare of other programmers instead of collaborating.
2. Not knowing how to interview candidates correctly (talk about programming? nah, just come up with a programming whiteboard then nickpick them to death to find one good enough to play sidekick.).
3. Working for less/putting in too many hours. Working for less brings the profession down and putting in too many hours reinforces the idea that only good programmers put in loads of overtime.
Of course this isn't 100% spot on for every company, market and country but it is what I see most of the time.
This is just one of the many side-effects of money-oriented
society. People work to earn money. Not because they love work.
1. Business owner just want paying customers, they don't care about product.
2. Your tech-lead/manager/solution-architect has stop coding for last 15 years (or never did it). So s/he choose the most hyped stack (or js-framework-of-week). Now to justify his decision, he needs team with that skill or he put blame on HR
3. HR doesn't understand damn thing neither they care for HUMANS. Their job is finding RESOURCE. So they just look for keywords in resume and contact each and every single candidate having keywords in resume.
4. Candidate deeply hate computer science fundamentals. And believe that being hacker is cool and can learn lot of money/girl/boys/fame. So he tries to show off himself by somehow adding hyped keywords in resume ( or most of time copy-pasting resume).
Now after all this, if product succeeds believe me amigo, you're very lucky or someone just robbed by your product.
1. is not always true nor is it germane to the question at hand.
2. is a highly unlikely scenario. Ecosystems are complex beasts at face value. Generally speaking the decision-makers stick close to the trajectory of their comfort zones. You've packed a lot of opinionated assumptions here that I'll pass on biting.
3. HR has dissolved in the past decade or so. You are lucky if there is a HUMAN aspect to HR (it can be, far too often, a keyword parsing exercise) AND when there is a HUMAN involved it may be someone poorly paid from an outsourcing country that has NO IDEA of what the two puzzle pieces should look like to match them.
4.) Candidates are more likely to never have encountered computer science, software, design, or tooling fundamentals. Non-exposure is different from belligerence.
Job descriptions are often riddled with 50 to 100 keyword requirements - full-stack can always be trumped by entire global ecosystem requirements. So why is it surprising that candidates must list EVERYTHING they've encountered?
Given that sweeping employer wishlist survey of technology, it is then cruel and unusual to expect candidates to be able to 'test' well against those oceans of domain knowledge. And let's be honest. Candidates are tested against a mountain of brain-teasing trivia and nuances gleaned from innumerable web resources dedicated to "weeding out" - cough - unqualified candidates.
We need to get back to hiring based on mutual interest, mutual technology skillsets, and behavioral stability. If a candidate has everything then they won't grow in the job - bad fit. If they express interest in your direction - you have a candidate worth considering.
Limit the total number of interviews to seven - no bullshit, pare down to three, pick your best. Give it six months. Rinse and repeat if necessary.
Non-technical people doing the hiring. Keyword bingo and thinking Java and JavaScript are the same thing. The endless search for a unicorn or Goldilocks hiring (not unqualified, but not too good either). HR lacking EQ when they reject with weak white lies – this reflects badly on the company when the candidate is more qualified in the future.
1. Recruiters are scraping the same job boards applicants use.
2. Salary Surveys are always wrong, and many go underpaid because they don't know how to negotiate.
3. Companies write contracts poorly, with little consideration for things that keep employees engaged and on a contract.
4. There are way too many technology stacks, too many people focus on saying theirs is the best rather than accurately evaluating solutions based on available skills and right fit to the business need.
5. Way too many inexperienced and untrained people in management positions. I can't tell you how often I've heard IT managers say that they're "Not really a technical person". Stop hiring your unqualified friends.
6. Government has no idea about tech either. They need to be educated in order to protect consumers, employees, and the economy from bad tech.
7. Not enough consumer protection enforcement. When companies do bad things the consequences should set an example for everyone else, not just be 10% of the profit as a penalty.
8. Employees need better vacation, and more options for flexible work days. 40 hour weeks are a lot, the standard for industry leave is usually 15 days a year now. The entire stat of Virginia has an "At Will" employment policy. No wonder why really productive projects suffer from attrition and buron out. You only get out of that trap if you have the power to negotiate, but companies need to create better policies and stick to them for all employees.
9. Recruiters need to educate themselves on technology. Stop lying to candidates about positions, you should know the difference between Angular and Python. You should also always be up front about where the work location is, and stop sending me text messages you vultures... Email works just fine.