basic solution structure
first failing unit test

* Don't write any code without a unit test first.
* Write the minimum amount of code to have a failed test.
* Run the unit test to see it fail. This is the red-light phase.
make the first unit test pass

* Write just enough code to make the unit test pass.
* Run the unit test and have it pass. This is the green-light phase.
another failing unit test

* Write just enough code to have another failed test.
* Make note of the credit card inheritance hierarchy.
* It wasn't needed until the second unit test.
* It caused some refactoring to the first unit test.
* Run all the unit tests. Only the new one should fail.
make the second unit test pass

* Run all the unit tests to watch them pass.
last failing unit test to complete the requirements
make the last unit test pass
one last unit test

* Always cover the negative scenario.
make all unit tests pass

* Good test coverage provides self-documenting code
safe to refactor code

* Run unit tests as regression tests when refactoring code.