Caching approach Meedan built in-house: each expensive cached field declares a starting value and a list of model events that should invalidate it. Ruby meta-programming installs callbacks on those models on the fly, and cached values are stored via Rails low-level caching. Centralizes invalidation logic in one place, avoiding missed invalidations scattered throughout a large codebase.