The document describes a run-fail-grow approach for tailoring object-oriented runtimes to create very small customized runtimes. A virtualization infrastructure called Tornado uses a run-fail-grow algorithm to run an application, detect failures when missing dependencies are encountered, copy over the missing code from a reference application, and resume execution. Experiments show the approach can reduce runtime sizes by up to 99% compared to traditional runtimes, resulting in tailored runtimes as small as 10KB that are still able to support features like reflection. The approach works for dynamic languages and offers advantages over traditional static/dynamic tailoring solutions in supporting a wide range of applications and runtime configurations.