In a single second, a modern processor can execute billions of instructions and a program's behavior can change many times. Some programs change behavior drastically, switching between periods of high and low performance, yet system design and optimization typically focus on average system behavior. Instead of assuming average behavior, it is now time to model and optimize phase-based program behavior.