I see a lot of programmers online these days complaining about their craft these days. I think some of them are getting close to the heart of the matter. For me, the problems in programming usually come from third-party dependencies. That's it. We have complex tools to manage them, because we need to, and we have lots of options for this or that functionality because it's difficult to figure out how to work with some libraries, or it just feels easier to write your own. Depending on one third-party library might not be so bad. Depending on several, especially when they all depend on different versions of some other fundamental library, is where it gets tricky.
Soon, rather than hearing about Agile software development methodology and tiered architecture, we may start hearing about designing software specifically so that it is easier to work with third-party dependencies. Maybe each layer will be split in two, with a dependency module to hold all the third-party tools it needs, and a nicely-engineered facade for the rest of the program to use. That's just a thought. The main point is that, for me, the complexity and frustration of software always seems to arise from third-party libraries and frameworks. While they give us power, they add integration complexity.
Mokalus of Borg
PS - Yet people do it.
PPS - Somehow.