We complify where we should simplicate.
Somewhere in the history of building web applications on the JVM, adding layers somehow became part of the solution without being seen as a problem.
Complexity is an expensive luxury… powerful solutions do not have to be complex!
You can only build so much on top of something else, before you have to wipe the slate clean and start over.
The amount of complexity I'm willing to tolerate is proportional to the size of the problem being solved. There will come a point where the accumulated complexity of our existing systems is greater than the complexity of creating a new one.
People pile layers on top of layers, abstractions on top of abstractions, complications on top of complications, crap on top of patches, and patches on top of crap until everything collapses onto itself and the singularity appears.
OOP programs built as towering hierarchies of classes are like perfect crystals, to be admired by architects everywhere but loathed by the programmers responsible for maintaining them.
Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.