Let's say there is some feature in an application (accessed via a button) that only becomes available once a number of criteria are met.
Off the top of my head, there are 3 options here:
Hide the button
When the relevant form/screen is loaded, the button is not visible if the criteria have not been met.
Pros: It is crystal clear that the option isn't available
Cons: There could be a large number of support calls due to the "missing" functionality
Disable the button
Grey out the button if the criteria have not been met
Pros: The user can see that the option is available but isn't currently valid
Cons: There could be a large number of support calls as they can't press the button
Button always enabled
The user can always press the button, but a message is displayed saying what missing criteria need to be met
Pros: The users are told why the option isn't available
Cons: The message will have to change as the criteria change. The criteria may also not mean much to the user and there may be some support calls to clarify what the message means
I realise this is somewhat abstract, and I'm loathe to give a concrete example as the point I'm making might be lost, but consider:
There is a weekly sales report button available on the application which becomes valid when:
- A manager is logged in (or a manager gives temporary access)
- It is a monday morning
- A printer is attached
- The figures are available on the server following completion of some backend process
- Are there general rules that can be applied here or is it a question of context/preference?
- Are there any other options other than those listed above?
My only other thought was that if the option isn't available, a screen could pop up with a checkbox type list detailing the criteria that haven't been met (much like a SQL Server install) but this feels like overkill.