added a getReason() to Failure that returns an Optional