Philosophy

  1. Have a clear understanding of a problem.
  2. Decompose it into subproblems can be matched to existing solutions.
  3. Analyze the tradeoff between existing solutions and provide appropriate abstraction.