Test Driven Development (TDD) is a practice endorsed by many people working with software. However it is also one of the most difficult to get right. At Codurance (www.codurance.com), we applied TDD to a very large project. We encountered a number of challenges and learned a lot of lessons. We discovered that doing TDD badly is actually worse than not doing TDD at all and that it is very important to get some basics rights otherwise you'll put yourself in a world of pain. This case study highlights the lessons we learned and the basics that are absolutely crucial for practicing TDD successfully.