TDD is complex because the tests must be designed to fit the code without being coupled to the code and must cover almost everything yet still execute in seconds.