基本的にはエンジニアが自己主張できないからです。
仕様を作る人(クライアント)はド素人が多く、システムについての知識はエンジニアに劣ります。
エンジニアは議論を面倒くさいと思う傾向があるため、そのシステムがクソシステムになるのが分かっていつつもクライアントに従います。営業はお金のことしか頭に無いので、エンジニアから相談があっても最初の仕様が変更されたら追加でお金がもらえると思うので何も言いません。
その結果クソシステムが完成するのですが、どの登場人物も成長するステップを踏まないため、同じことが繰り返されてしまいます。
自分も自己主張するのは面倒くさいので、クライアントが賢くなって欲しいと思う今日この頃ですがそれも難しそうです。投資家もクライアント同様のレベルと想像されるので、自身のお金と努力でサービスを提供するのがベストなんでしょうね。