A database migration has to coexist with old code

An expand-and-contract example for schema changes that must work while application versions overlap.

Before caching a result, define when it is wrong

Cache keys, stale data and invalidation are part of the result contract, not just performance settings.

Search projects, articles and notes.