pull down to refresh

since you can select exactly what you need, not more, not less.
That's a benefit; there is something similar in bitcoind for getblockstat.
maybe it's just a "skill issue"
I don't think so. Cache expiry / cached state transition is hard and really easy to get wrong, I can't remember a single instance where it was easy to make it smooth - and then I'm talking about back-end caching, which is easier than on the front-end.
I think that caching is hardest to consistently deliver when you are still rapidly adding or refactoring features/API, but you could design to overcome that by abstracting the mechanism.