• Get clarity on problem
  • Ask about input data and what it means
  • Ask about output data and what it means
  • Come up with examples
  • Come up with edge cases and outliers
  • Come up with brute force solution
  • State brute force verbally and in comments
  • State time and space complexity
  • Optimize and iterate
  • Test algorithm with one of the inputs
  • Find bugs
  • Get feedback if everything is addressed or something is missing