The original drivers specification for maxTimeMS required that:
In languages that have exceptions, drivers will declare a new exception type ExecutionTimeout. This new exception is raised when the driver detects the server error code 50 in the server's response to a query, getMore, or command.
However, since then error code 50 (ExceededTimeLimit) has been re-used by the server to report errors unrelated to maxTimeMS. This confuses application authors when they receive an ExecutionTimeout exception when they haven't specified maxTimeMS.
I'm not sure it's possible, but it would be beneficial to users if the server stopped using error code 50 for anything but maxTimeMS-related timeouts.