Я формулирую так "В TDD ты сначала спрашиваешь себя как я буду это проверять, а потом приступаешь к работе". Должен сказать, этот вопрос настолько очевидный и простой, что странно что разработчики часто не задаются им. Я как тестировщик знаю, что ничего не знаю и мне легко думать из этой перспективы. Я не уверен ни в чем, поэтому проверять гипотезу для меня - норма. Я не знаю как работает мой код, я только могу предполагать. Написав тест, ты явно формулируешь свои ожидания. Это мыслительный процесс. Это часть инженерной работы.
Вы когда холодильник покупаете тоже сперва мерки берете, заранее, приходите с ними в магазин, смотрите ширину двери, в какую сторону она открывается, чтобы она открывалась полностью. Чтобы шнура хватало до розетки. Считаете поворотные углы, чтобы вы могли его пронести по лестнице и через дверные проемы, и развернуть при установке.
Многие так не делают - просто покупают и с помощью "лома и какой-то матери" впяливают это себе в кухню.
Кажется дебильно? Так порой делается разработка. Фигачим, а там посмотрим. Мы же мастера на все руки, для нас нет непосильных задач. Зачем думать - мы же опытные, не первый холодильник авось устанавливаем.
Сначала думай потом делай. Семь раз отмерь - один раз отрежь. Это все об этом.