One of the paradoxes of defensive programming is that during development, you’d like an error to be noticeable – you’d rather have it be obnoxious than risk overlooking it. But during production, you’d rather have the error be as unobtrusive as possible, to have the program recover or fail gracefully.