This document discusses good and bad properties of unit tests. It provides examples of good unit tests that are understandable, maintainable, repeatable, necessary, granular, and fast. Bad unit tests may not be understandable, maintainable, repeatable, necessary, granular, or fast. The document also discusses how to design code for testability by injecting dependencies like clocks to control test conditions. Unit tests should be treated as an executable specification and avoiding writing legacy code without tests.