There's also an oversupply of companies trying to create essentially the same product. If we could cut back on that we'd have a glut of programmers. It's just a bigger version of the work expanding to fill the time budget.
Just in my city the last two months I saw job openings for two different companies trying to organize people giving away stuff for free, and neither of those companies were Craigslist, Freecycle or the Buy Nothing Project.
On each project I've been on I've spent upwards of 20% of my time recreating a variation on software I had at another job, and I think I care more about reuse and force multipliers than the vast majority of people. And when I'm using libraries, I feel like I'm working a lot harder than I should have to.
Fred Brooks claimed an Amdahl's Law style effect with additional programmers, and I don't think he's wrong (at least not about that). If everyone on a team of 10 started needing to do 10% less work, we could just about put off hiring two more people to complete our deliverables.
Where I do think he's wrong is his use of a Surgical Team as the ideal for programming. One person in charge and a bunch of people assisting. I think that given the world has largely rejected that section of an otherwise brilliant book, that people generally agree with me that Fred had this part dead wrong. I think rather we should work like professional athletes do in team sports, and we would get about 3 times better at what we do.
I was a cyclist when I was younger, and for a time it was popular for pros to write books or articles with advice. I was surprised to learn that a professional athlete isn't crazy better than me at any one thing. It's the fact that they're 20% better at half a dozen things (including genetics), and the multiplier makes them be able to go twice as far and half again as fast. Dedication, mastery, and a small team of people looking out for them, not just mutant genes or dumb luck.
As programmers, what do we study to raise our game? How computers work. To me this is like a quarterback or a sprinter learning how cleats are made to make him a better, or a cyclist how carbon fiber frames are built. Did I do that? Sure, and it's useful, but not as useful as understanding how your own body functions. By comparison computer programmers know almost nothing about how human brains work, and all of our output comes from them. We don't even have our eye on the target.
Basically, to be a professional athlete, you have to understand human physiology to a degree most people know nothing about. You have a team of people whose job it is to explain it to you and keep you working well within its limits. Do athletes get better by gritting their teeth and keeping at it? Sure, that's only one part of a greater whole. If you listen to some developers, that's all we need to do. Tough it out, white knuckle style. Effort measures all. People who complain about how the design of the code base makes it hard to remember are invalidated, called whiners or told to sack up.
As long as that's our pattern we'll never raise our game much.