Events must be Consequential

I have a rule in application design. A user event, like a button click, must only exist if it will eventually change some state. This state could be inside the application itself, as with a scroll bar, or it could be on a server, as in the case of submitting a form, or it could be a state change in the real world, as in the case of a garage door opener.

This rule is extremely difficult to find exceptions for, but not impossible. What if the garage door is already open when the user selects to open it? No change will occur. This realization forced me to update my rule to allow for events which can conditionally fail to update state. Now the rule is that user events must only exist if there is some case where they would result in a state change.

This rule may seem so generic as to not be useful, but these kinds of absolute rules can solidify thinking. Now, whenever I plan to create a new button on a screen, I can ask myself what state the event will, which might help me to discover if my state exists far away from the source of the event. When I ask myself what state will change, I know that some state will exist which could be altered. Each event relates to some state, otherwise the event shouldn't exist.