In my experience there’s usually a confluence of individual and institutional failures.
It usually goes like this.
- hotshot developers is hired at company with crappy software
- hotshot dev pitches a complete rewrite that will solve all issues
- complete rewrite is rejected
- hotshot dev shoehorns a new architecture and trendy dependencies into the old codebase
- hotshot new dev leaves
- software is more complex, inconsistent, and still crappy