Two things have been puzzling me lately. Why do cafes make bad coffee and why is there so much bad software out there. In structure I think the two problems are related.
Let's start with the coffee. Why do so many cafes make bad coffee? I'm not talking about the ones that really don't care, that'll serve you nescafe in luke warm water, but about the places that look like they are about coffee. Why buy a shiny, multi thousand dollar espresso machine, invest in a top of the range grinder and set up an arrangement to get a steady supply of fresh beans of a known brand and then spoil the whole arrangement by having a "barista" who has no idea what they are doing? I understand that becoming really good takes years of experience. But learning how to make a semi-decent cup only takes a few hours of training. If you get all the equipment, why leave out the most important bit?
For software the argument is similar but not quite the same. We're hiring at Triposo (firstname.lastname@example.org if you feel like it could be for you) and luckily we get quite a few resumes and generally they look quite promising. We ask rather technical questions including some actual coding. Here's the thing. A good percentage of these candidates have trouble with what I would call basic coding, but at the same time they have been working in a role developing software in respectable companies.
So an obvious reason why there is so much bad software around is that it is hard enough to write decent code with great coders and that most companies don't care or don't have the ability to distinguish between people that can and cannot code. So they end up with a team of people who have XSLT on their resume and talk about frameworks, but don't actually know how to build something. Bad products are sure to follow.
I realize that training a barista is different from training a software engineer and that for most companies putting in the 10 000 hours to make somebody a good coder just isn't feasible, but it's harder to see why they wouldn't improve the hiring process to weed out the bad coders. Yes, it means it becomes even harder to hire new people, but with the best software engineers being up to 28 times more productive than the worst, it is really worth the effort.