Building reliable and performant distributed programs that span cloud machines and devices is a challenging endeavor, but one that more and more developers are required to tackle. Foremost among the challenges is effectively handling restart, reconnection, and recovery to a valid state.