Fault-Tolerant Distributed Systems By Design