A payments product begins by asking what a customer’s balance is, and ordinary CRUD answers that well enough. Some months later somebody asks a different sort of question: who approved that reversal, what did they know when they approved it, and can we correct the mistake without making the original disappear. The balance, it turns out, was the first question and the easiest. So an updated_by column is added to the payments table, which tells us who but not what they knew. A shadow table fo...