Test (Drive Design) -> Code -> Refactor

time to read 1 min | 138 words

Another discussion with Eli Lopian, check it here.

I would start out by saying that I agree to what he says, especially:

It is the process that will allow us to meet future requirements. A process that will allow us to change the design as the features grow.

I wouldn't call it process, but what the hell.

This, however, I disagree:

Lets recall the TDD process:

Write Tests -> Code -> Refactor (Design)

Notice that the Design stage is the LAST stage, it is not:

Design (For Testability) -> Test -> Code

In my view, the way it works is that you:

Write Test (Drive Design) -> Code -> Refactor

The idea is that writing tests is design, coding and refactoring is just making sure that it is working :-)