Because of arbitrary and too short deadlines
> (b) poor communication with the customer and stakeholders
Communication is a two way street. Why blame devs for all this?
In my opinion, when a project fails, you have to blame the people higher up in the management chain who are coordinating the work, rather than the engineers. (in a large company)
If engineers are to blame, maybe look at your hiring standards and hire better engineers. This points back to the management again.
> Those faults may come from arrogance or inexperience, or both.
Don't hire arrogant or inexperienced engineers then?