I just realized that my entire software design ethos is ‘power to the people’.
I started to argue over whether an interface (one that modifies some mutable object, however unfortunate it is) should no-op, throw an exception, or warn when it’s already been done once and runs again.
To no-op is to say “we know better than you and will do what we consider the Right Thing”.
To throw an exception is to say “we know better than you and will make you do what we consider the Right Thing”.
To warn the developer using the module is to say “we have more experience here, and say what we think … but your call. Go for it!”