Q What insight is needed to refactor a design?
A To refactor a design an essential step is spotting a factor of the design that can be made orthogonal to the rest, i.e. some part we can separate from the other parts and which can vary independently of those other parts.
Table driven code generally has been factored 'better' than code that is not.
Layered code generally is better factored than code that is not.
Current implementation languages constrain our thinking about what the factors of a design can be. --JamesCrook
See Also: WhatIsaFactor