Member-only story
Why TDD is hard to use?
I love TDD now, but when I started practicing I thought this was not for me, the majority of people who hate TDD think as I thought at the beginning of my journey, what did I discover to continue?.

I started practicing TDD because the company where I was working hired a Tech Coach. The person who hired him left the company the same day he started, so he didn’t know what to do.
So I knew him and we started working together, it was just luck for me, I was in the correct place at the correct moment.
I remembered him to push me to write tests firsts and to write code later to pass the tests, at the beginning I thought he was crazy.
It was really hard to think first on a test to demonstrate that my code would do what we wanted to do.
TDD basically was moving me from my comfort zone, I didn't like it because:
- My ego, I know how to solve it, why I need to write a test to guide me?.
- I usually broke a lot of things and make them to work later, I loved the feeling of the Eureka effect!!.
- It’s harder to write the tests than to write the code.
- I don’t know what means to solve the whole problem, I can understand it better while I’m writing it, breaking things.
My ego
Big Upfront Design is what 90% of people in the industry think software design means.
I have been taught to think deeply in to solve big problems at once, without writing any code. In some sense, I saw myself as a genius, one that is able to solve big problems no-one else can solve.
I loved that feeling of creating a perfect design in my mind, but there was a problem, as you know, everything written in a paper compiles.
Reality is another thing, it doesn’t matter if I could control all the variables there was one I couldn’t, time, I don’t know what will happen in the future, if one of my assumptions change, my design sucks. And this happens 99.9% of times.
I learned that it doesn’t matter what can I do, I cannot control what will happen tomorrow, so my design needs to be simple and needs to change. That was the only way to minimize the impact of making one of my decision…