When you use TestFirstDesign, you'll often find yourself with one class that will soon be many. But to switch from one class to multiple in a strictly typed language, the several classes will have to share a common base class or interface.
Classic example: Knowing that you wish to write a drawing program that includes lines, rectangles, triangles, circles and groups of same, you know you'll need to use the CompositePattern DesignPattern. But you don't want to start there; start by implementing Line. Once you have the system working with Line, you'll want to add, say Rectangle. But everything's done with collections of Line and all parameters are of type Line; nothing will accept instances of class Rectangle! What shall we do?
Answer: Don't sweat it; just ExtractInterface the commonly used functionality of Line, like moveTo and drawAt to a new interface, say "IShape". Change almost all uses of class Line to interface IShape. That would include practically all collections and method parameters, but it would not include constructors (until you get into AbstractFactory).
Run your tests. Once the system works with Line objects passed around using the new IShape interface, you're ready to add the Rectangle class, which will implement the IShape interface.
(Later, you'll think of the CompositePattern again, but don't mess with it until you need it. ;-)
Technical details for VisualBasic: