To me, the problem is almost always the requirements. The customer fails to spell out clearly what they need. Management fails to spell out clearly what is desired. Coders do what seems to be stated in the requirements.
It’s the blind men inspecting the elephant syndrome - each only understands a small piece, none understanding the entirety.
Oh - and the managers that make the schedules (often with no input from the developers) are too eager to sign up for whatever will get them noticed - agreeing to nonsense deadlines because they don’t have the fortitude to say “can’t be done”.
What’s the only thing dumber than an end user?
Two End Users....