The majority of the information captured in traditional specification documents, such as requirements specification, architecture specifications, or design specifications, can be captured as “executable specifications” in the form of tests. When you take a Test-Driven Development (TDD) approach you effectively write detailed specifications on a just-in-time (JIT) basis. With TDD you write a test, either at the customer/acceptance level or the developer level, before writing sufficient functionality to fulfill that test. The tests are used for two purposes: they specify the requirements/architecture/design and they validate your work.