This document discusses principles and practices for unit testing legacy code. It covers background on large, old software projects with complex code. The motivation is to facilitate changes, not find bugs. Principles include keeping tests simple, not adding tests to bad code, avoiding assumptions, stopping legacy code creation, and educating others. Practices include setting up a framework, domain modeling, identifying hot areas to start, using a bottom-up approach, learning functions through tests, and making code testable by refactoring dependencies. The document advocates bringing order to chaos and finding fun in learning features and deleting code.