In addition to all the other reasons mentioned here, another idea: managers don't know how to use programmer talent very efficiently. Of all the things programmers are told to do, 90+% of them are useless or worse than useless, in that they simply make long-term maintenance worse without adding value.
If you cannot use a resource efficiently at all, wasting most of it, then it is not surprising that you end up with a shortage. When faced with this situation, management can:
1) admit that they are the problem, and get much better at allocating programmer effort wisely, a task that will be very difficult even once it's well understood (which it currently isn't). Or...
2) hire more programmers, paying whatever is required to get more
If you cannot use a resource efficiently at all, wasting most of it, then it is not surprising that you end up with a shortage. When faced with this situation, management can: 1) admit that they are the problem, and get much better at allocating programmer effort wisely, a task that will be very difficult even once it's well understood (which it currently isn't). Or... 2) hire more programmers, paying whatever is required to get more