As far I've seen, the "designing by writing tests" approach, mostly succeeds in the web-apps field where one has an implicit/assumed CRUD/MVC structure, writes tests for behavior and filling in functions based on this assumed structure.
I haven't seen anything about how one proceeds with TDD if one has the more complex task of implementing an algorithm, a language or something with highly structured requirement. I'd be interested in how one would do that.
The process he's using there falls in line with the higher-level experiences described on the wiki.
Has anyone had this experience/success with this? What can help make the difference towards getting that nice flow out of TDD.
I'm inspired by Corey Haines and a bunch of code experiments he's illustrated over the years. One technique that struck me was that a nil return from a method was was an expected and desirable step during a TDD cycle and that guard clauses can be very helpful to driving out TDD designs while maintaining flow.
I'm looking for similar patterns for TDD decision making, especially those that help the dev stay in a good rythm.
Would love any ideas towards exploring this further.
The reason I think this is important is that ideas about TDD people had from 2000-2007 still has a profound impact on testing tools and practices more broadly. For example, very very few developers I meet know how to apply test doubles rigorously and what their purpose is. This might help that.