It’s often better to overlay caching and other tricks on top of naive implementations than making the implementation more complicated.

* until you get caching layers more complicated than the more complicated implementations :) Imo strong implementations can be much simpler and more predictable than caching.