Here's how you solve a hard math problem: * Solve for an easy special case. For geometry, start with a 2 dimension space. * Solve for a harder special case, such as a 3 dimension space. * Refactor the solutions together to apply to the general case, such as an n-dimensional space. ''I believe this is explained in George Polya's HowToSolveIt.--ApoorvaMuralidhara'' This applies directly to how ExtremeProgramming generates design: * DoSimpleThings to satisfy one UserStory. * DoSimpleThings to satisfy the next UserStory. * RefactorMercilessly to merge the two solutions into a reuse-based design. See FeynmanAlgorithm to hear someone bragging they are too smart to have to do it like that. And all too often, you do the exact opposite: * generalize the problem * trivially solve the generalized version * bring the solution back to the special case ---- CategoryMath CategoryProblemSolvingStrategy