I've heard two conflicting principles for UI design.
- disable or hide functions that are not applicable to the current state of the program (maybe this is more for large forms such as in surveys)
- always make apparent all functions so that the user knows what's there (also so screen readers can read all functions). An example of where this is NOT done is how in spotify you need to hover over a cover to see the playback controls.
OK. Concrete example. Say I have a map app. The user enters an address. Should the "go!" button be disabled, grayed out or completely hidden until the user has entered an address (since obviously it wouldn't make sense to search for something before the user has even typed it in)?