Write a list of the test scenarios you want to cover Turn exactly one item on the list into an actual, concrete, runnable test Change the code to make the test (& all previous tests) pass Optionally refactor to improve the implementation design Until the list is empty, go back to #2