Prefactoring

Prefactoring is the application of experience to the creation of new software systems. Its relationship to its namesake refactoring is that lessons learned from refactoring are part of that experience.

Experience is captured in guidelines that can be applied to a development process. The guidelines have come from a number of sources, including Jerry Weinberg, Norm Kerth, and Scott Ambler.

These guidelines include:
 * "When you're abstract, be abstract all the way"
 * "Splitters can be lumped more easily than lumpers can be split"
 * "Use the client’s language"