This document discusses the differences between tests and specifications, and how to write formal specifications for systems using TLA+. Tests check implementation details, while specifications check high-level design. TLA+ is introduced as a formal specification language that can be used to define abstract models of systems and check for complex bugs. Writing specifications in TLA+ helps validate system designs before implementation. Examples are provided showing how processes, variables, and properties can be specified in TLA+ to model behaviors like multi-device app installation.