Test Driven Development (TDD) is a technique where tests are written before code to define desired functionality, with the cycle of writing a test, seeing it fail, then writing code to pass the test while refactoring code for quality. TDD ensures requirements are met, forces clean code principles like isolated and decoupled components, and leads to improved test coverage and faster debugging. For effective TDD, tests should be clean, self-documented, have single asserts, run fast, be independent, and have boolean outputs. While it may initially slow development time, TDD provides long term benefits.