Robust optimization over time (ROOT) is the combination of robust optimization and dynamic optimization. In ROOT, frequent changes to deployed solutions are undesirable, which can be due to the high cost of switching between deployed solutions, limitations on the resources required to deploy new solutions, and/or the system's inability to tolerate frequent changes in the deployed solutions. ROOT is dedicated to the study and development of algorithms capable of dealing with the implications of deploying or maintaining solutions over longer time horizons involving multiple environmental changes. This paper presents an in-depth review of the research on ROOT. The overarching aim of this survey is to help researchers gain a broad perspective on the current state of the field, what has been achieved so far, and the existing challenges and pitfalls. This survey also aims to improve accessibility and clarity by standardizing terminology and unifying mathematical notions used across the field, providing explicit mathematical formulations of definitions, and improving many existing mathematical descriptions. Moreover, we classify ROOT problems based on two ROOT-specific criteria: the requirements for changing or keeping deployed solutions and the number of deployed solutions. This classification helps researchers gain a better understanding of the characteristics and requirements of ROOT problems, which is crucial to systematic algorithm design and benchmarking. Additionally, we classify ROOT methods based on the approach they use for finding robust solutions and provide a comprehensive