Getting Stuck While Doing TDD, Part 3: Triangulation to the Rescue
I started with XP in 99 after seeing the wars on OTUG, and then made great use of the TDD approach, I was busy using TDD to build real systems by first getting legacy systems under test and then progressively refactoring and introducing new functionality.  At the same time on the mailing lists a lot of the XP consultants started advocating quite &quot;pure&quot; approaches.  At first it was &quot;as a learning &#x2F; thought experiment&quot;, but a curious thing started to happen in the 2000s, &quot;Agile&quot; developed a doctrine and religion about it and the free flowing thoughts that were pushing how to design software better started to dry up.   A lot of the TDD advice out there at the moment is from the religious stage of Agile.<p>Here&#x27;s my take-aways on TDD...<p>- It&#x27; about designing software through feedback<p>- Code should compose together easily, refactor till it does, be mindful of the tiny details<p>- Test as little as possible (or I think Kent said &quot;as is Responsible&quot;).  The tests are there to validate your intent and provide feedback.  Tests are liabilities that need to be maintained, so only maintain good ones.<p>learning TDD?  do it on throw away problems, play around with how small the steps you can take are.  Play around with refactoring, don&#x27;t have have preconceived ideas about the solution. TDD learning problems with other people.  Pay attention how it changes how you design something.  Do some bigger things, start noticing the problems of TDD, especially when dealing with outside frameworks and systems.<p>Production TDD?  It&#x27;s a tool and may help provide design ideas or help stitch together preconceived design ideas, use everything in your arsenal to design and create good software, there are no rules or doctrine. But understand as many tools and &quot;rules&quot; that the software community offers and the reasoning behind it. Collaborate with others to create and design, and make sure you have quick feedback cycles.  Be quick to recognize new ideas, tools, and techniques that either provide feedback or designs.