Test Driven Development (TDD) follows three main laws: only write production code to pass a failing test, only write enough test code to fail, and only write enough production code to pass the test. TDD brings benefits like improved debugging, courage to refactor, documentation, and design. Good unit tests are atomic, isolated, repeatable, revealing, and fast. The structure of a test is to arrange inputs, act on the system under test, and assert the expected outcomes. Strategies for TDD include using obvious implementations, faking dependencies, and triangulating tests. Practicing TDD involves code katas, communities, and conferences.