Redesign

Redesign is the alteration of a software unit so that it fulfills a similar purpose as before, but in a different manner and possibly by different means — a new algorithm, a new data structure, a new decomposition into components, or a different underlying technology.

Redesign is often mistakenly called refactoring, but the two are distinct. Refactoring changes a unit’s internal structure while deliberately preserving its observable behavior at every step, and is verified continuously by the existing tests. Redesign has no such constraint. It may change behavior, interfaces, or performance characteristics along the way, and typically can’t be carried out as a long sequence of small, independently-safe steps in the way refactoring can.