in order to support users in finding bad code, we should introduce Warnings subclasses similar to django for example `RemovedInPytest40Warning(DeprecationWarning)` we can then use the normal warnings modules to start and show those warnings, and even error out once we do a release this enables a few positives 1. control over what deprecation show 2. disconnect breaking a feature from removing its code (a warning error can be disabled by users or subsequent releases depending on need)