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.
[1] 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: