In 1999, Cary Millsap and Jeff Holt set out to create the optimal method for optimizing a system. They weren’t just looking for a way to make systems faster, they were looking for the fastest way to make systems faster. They wanted a method with no wasted time, no wasted steps. They were looking not just to optimize systems, but to optimize the businesses that used these systems. Most of all, they wanted to optimize themselves. They started with an analysis of the problems that people were having when they tried to improve the performance of their systems.
The first problem they found is that people were focusing on the wrong things. If performance is your problem, then utilization statistics, hit and miss ratios, subsystem performance metrics, …these are the wrong things. Since a performance experience is always either a throughput or response time experience, you first need to express your performance problem as either a throughput problem, or a response time problem. In either case, your next step should be to measure how your program spends its time. A profile shows that.
A profile is like an invoice for response time. An invoice is easy to analyze. There are only two ways that a total price can be too high: (i) some quantity is too large, or (ii) some unit price is too high. Quantity and price are the only two problems you can have. Likewise there are only two ways that a response time can be too big: (i) some call count is too large, or (ii) some call duration is too high. Reducing call counts is the best way to reduce response time. (It is in fact also the best way to reduce call durations.) You learn these things quickly when they’re easy to measure.