Design for Failure: Your software should break