Jakub Rodzik's wroclove.rb 2023 talk, framed as a bedtime story about developer 'Fredo' writing a two-player dice game in Ruby/RSpec. Fredo progresses through four testing iterations: (1) plain conditionals in tests that mirror the production if/else and give false confidence; (2) stubs via `allow(...).to receive(:rand).and_return(...)` which are deterministic and easy but couple tests to implementation; (3) an OCP-inspired refactor extracting a `Dice` abstraction and injecting a `FakeDice` through dependency injection, enabling a 'BetterDice' variant without rewriting tests; (4) adding event/audit logging so tests can assert on the sequence of rolls and winner selection, proving *why* the code behaves as it does. Closes with tradeoffs of each approach and the core recommendation: don't test randomness — understand it, extract it, and control it (e.g. the `Time.current` anti-pattern and 'time travel' fix). Q&A covers unit-vs-end-to-end testing with fakes, alternatives to time-travel helpers (algebraic effects, DI), keeping fake code out of production files, running the same suite against fake and real implementations, and using RBS to keep fake and real signatures in sync.