In his most recent (as of this writing) blog entry Brad Abrams writes about an idea we've been kicking around and which I happen to like very much.
I think though that adding a few more details is necessary to help get the best possible feedback.
The idea is that there would be conditional compilation sections in the IL itself, these sections would always be present in the IL so every machine would have the capacity to run that code. Depending on configuration, the JIT would either compile that IL into machine code, or else ignore it. By default, every developers box would be configured to get all the debug checks and my mom's machine would be configured to not get them.
Properties of this system if it could be made to work:
In order to avoid problems like putting the wrong code into a debug block (similar to putting necessary functions into assert statements that are compiled away) we'd want to invest in FXCop like rules to statically evaluate the content of such blocks. In particular “demands” would be frowned upon.
My thesis is that this feature increases developer productivity by allowing greater checking at no end-user cost and giving easy access to that checking when it is most needed while also giving a net increase in performance for the existing libraries after retrofit. In contrast to other complexity-adding features (and make no mistake, this is a complexity addition), my mom's working set can be expected to get smaller, not bigger.
I believe in giving developers very sharp tools when warranted. I think this is warranted.