Show notes
Designing for Failures
Failure flags and benign values
Sometimes responding with a
nilis good enough, i.e.def save
# some failing code
rescue
nil
endRelated to this is the concept of "benign values"
The system might replace the erroneous value with a phony value that it knows to have a benign effect on the rest of the system
When the system's success doesn't depend on the outcome of the method in question, using a benign value may be the right choice. Benign values are also helpful in making the code more testable.
Example:
begin response = HTTP.get_response(url) JSON.parse(response.body)rescue Net::HTTPError { 'stock_quote' => '' }end- Instead of 'puts
'ing, we can usewarn`
Warning as errors
Check out this hack:
module Kernel def warn(message) raise message endendwarn 'uh oh'Remote failure reporting
- At OL we use Bugsnag
- Idea of bulkheads -> a wall beyond which failures cannot have an effect on other parts of the system
- you should put bulkheads between external services and processes
Circuit breaker pattern
Ending the program
- Calling
exitends the whole program - Remember that time I used
exitin the Whiz Tutor codebase?
Picks
John: User Onboard - https://www.useronboard.com/ by https://twitter.com/samuelhulick
JP: singlediv.com - https://twitter.com/samuelhulick



