One thing I've seen smart developers do on multiple occasions is unknowingly throw out their ability to reason about their code while adding caching ( https://softwareengineering.stackexchange.com/questions/3512... ). Then when some weird bugs start showing up it's like "Ummm... this shouldn't be happening" and then end up having to restart _everything_ because the interplay between layers of caching and the rest of the program no longer make any sense.