This document discusses techniques for adding tests to legacy code, which is defined as code that is difficult to change without tests. It recommends choosing what code to test based on what needs to change now or changes frequently. It describes techniques like writing "pinning" tests that don't change behavior, using the "Three Questions" to identify obstacles to testing, separating behavior from initialization, exposing private methods, wrapping untestable code with proxies, and using factory method injection to inject mocks. The goal is to incrementally add tests to legacy code to enable refactoring it safely.