This document discusses analyzing algorithms through scientific methods. It describes estimating running time, performing mathematical analysis, formulating order-of-growth hypotheses about scaling, using input models in experiments, and measuring space usage. The goal is to predict performance, compare algorithms, and avoid performance bugs through understanding theoretical performance characteristics. Key aspects covered include performing reproducible experiments, validating hypotheses by repeated testing, and analyzing results to form power law models relating running time to problem size.