  Robot task execution when situated in real-world environments is fragile. As
such, robot architectures must rely on robust error recovery, adding
non-trivial complexity to highly-complex robot systems. To handle this
complexity in development, we introduce Recovery-Driven Development (RDD), an
iterative task scripting process that facilitates rapid task and recovery
development by leveraging hierarchical specification, separation of nominal
task and recovery development, and situated testing. We validate our approach
with our challenge-winning mobile manipulator software architecture developed
using RDD for the FetchIt! Challenge at the IEEE 2019 International Conference
on Robotics and Automation. We attribute the success of our system to the level
of robustness achieved using RDD, and conclude with lessons learned for
developing such systems.
