Modern systems are enormously complex; many applications today comprise millions of lines of code, make extensive use of software frameworks, and run on complex, multi-tiered, run-time systems. Understanding the performance of these applications is challenging because it depends on the interactions between the many software and the hardware components. This paper describes and evaluates an interactive and iterative methodology, temporal vertical proﬁling, for understanding the performance of applications. There are two key insights behind temporal vertical proﬁling. First, we need to collect and reason across information from multiple layers of the system before we can understand an application's performance. Second, application performance changes over time and thus we must consider the time-varying behavior of the application instead of aggregate statistics. We have developed temporal vertical proﬁling from our own experience of analyzing performance anomalies and have found it very helpful for methodically exploring the space of hardware and software components. By representing an application's behavior as a set of metrics, where each metric is represented as a time series, temporal vertical proﬁling provides a way to reason about performance across system layers, regardless of their level of abstraction, and independent of their semantics. Temporal vertical proﬁling provides a methodology to explore a large space of metrics, hundreds of metrics even for small benchmarks, in a systematic way.