The traditional path to making a slow operating system is to take a fast one and add features under the 5% rule. If a new feature does not visibly slow the system down or only slows it down 5% or some arbitrary definition of “small”, then it goes in. Each mistake or badly written or poorly architected component then increases the absolute magnitude of that allowable 5% on the next go round.  And each introduced performance drag makes it more difficult to improve performance down the line – as it depends on previous mistakes and generates dependencies in future mistakes.

Death of 1000 suboptimal solutions