1. default values: What will most users in most places find most useful/least infuriating?
2. configuration files (system-wide, then user): What will most users on this system want most of the time? What will this particular user want most of the time?
3. environment variables: How should this session (i.e., a potentially large series of related executions) be tailored?
4. command line options: What is most useful for this particular run?
I was also taught that:
- figuring out how to go from an option to the name of a corresponding environment variable to a line in a config file should be both straightforward and well documented; and
- sometimes you need a more complex configuration than is cleanly supportable through any other method than a file. In such a case, the location of that file can itself be passed through options and the environment.