@joshmh there's a difference between programmer and runtime errors. Programmer errors are, for example, forgetting to pass a parameter or mistyping that parameter. We want to notify developer about them as soon as possible.

Runtime errors are, for example, `ECONNREFUSED` from the remote server.

In this case we want to throw on wrong protocol and encoder string because it's a typical programmer error, a misconfiguration or mistype or whatever.

Sounds good?