I find that it's most flexible to make optional arguments, such as ``msg``, passable only as object properties. Otherwise, when you add more optional args, you'll be doing stuff like this: ``showRetryError(assertion, code, null, {otherOpt: foo})`` which is error prone -- you might forget to pass a null.