The causes of performance changes in a distributed system often elude even its developers. This paper develops a new technique for gaining insight into such changes: comparing request ﬂows from two executions (e.g., of two system versions or time periods). Building on end-to-end request-ﬂow tracing within and across components, algorithms are described for identifying and ranking changes in the ﬂow and/or timing of request processing. The implementation of these algorithms in a tool called Spectroscope is evaluated. Six case studies are presented of using Spectroscope to diagnose performance changes in a distributed storage service caused by code changes, conﬁguration modiﬁcations, and component degradations, demonstrating the value and efﬁcacy of comparing request ﬂows. Preliminary experiences of using Spectroscope to diagnose performance changes within select Google services are also presented.