I find that the issue Kent Beck talks about here:
https://tidyfirst.substack.com/p/why-tdd-doesnt-lead-to-dumb-code
... is very fundamental to TDD and centers around a couple of commonly missed aspects of it (even though they are spelled out in Test Driven Development by Example)
1- When passing the test, there is a Fake It approach you can take if you don't see the Obvious Implementation right away before you move on to Triangulation and add more tests.
2- When you are using Fake It, the Refactoring step is not primarily about making the code "nicer", but generalizing by removing the duplication between the test and the production code. This is only refactoring in the sense that you are staying green. That's why the step is not optional and getting to green using the simplest, naive implementation is a core part of the process.
I think not using Fake It is one of the two main reasons people fail with TDD (the other is not making writing more testable code a design goal.)
#tdd #softwareengineering #refactoring