Episode 2. MVCC. Day 2 of your 12 day sprint. Scenario: "Two transactions update the same row. What does each see?" Answer with xmin and xmax, not vibes. Say: "Each tuple carries xmin and xmax. A snapshot decides visibility, so writers create new versions instead of blocking readers." Say the HOT rule: updates within the same page can stay heap-only when no indexed column changes. Say the vacuum rule: dead tuples cost until vacuumed. Lab: generate bloat with repeated updates on one table, measure it, run VACUUM, measure again. Write the before and after numbers down. Trap to rule out: Say: "Bloat is a space and scan cost. Wraparound is a correctness emergency. I never confuse the two." Bridge from Oracle: Say: "Oracle keeps undo for read consistency. Postgres keeps old row versions in the heap, so vacuum is the garbage collector Oracle never needed." Depth tag: this episode is Debug. You can claim every line. Drill: draw one tuple chain with xmin 100, xmax 200, and a live version at xmin 200. Say: writers create versions, readers pick by snapshot, vacuum reclaims the dead. Say the confusion trap once more: bloat is space, wraparound is correctness. Done-check: explain HOT updates and the vacuum trigger in your own words. Write tonight's bloat numbers in your lab notebook with before and after. Teaser: tomorrow, Episode 3, WAL and replication. The LSN chain that decides your RPO.