Construction idioms
So here's three complete programs which demonstrate how I would go about evolving some code including a main component called MyThing. The initial implementation would be very direct and very concrete, the next implementation would factor out an interface, and the final implementation would implement MyThing in a full-blown extensible framework.