This seems like it’d be a common question, but I cannot find it. Perhaps “system value” is the wrong phrase.
Anyway, by “system value” I mean the built-in values that a system has for a given concept. For example, if I have a list of categories (e.g., mexican, american, italian, etc…) where would you store them? Would you hard-code them (maybe an enum) or put in the database?
If you say hard-coded, would your answer change if users could create new categories? Obviously you’d have to store the new ones in the database (or another medium like xml) but would you leave the standard system values hard-coded, and then merge them at run-time?
There are some symbolic values which are true constants for an application (e.g. the value of pi, or the maximum value an integer can represent). Putting them into source code is fine.
If you foresee that a user should need to change the values, you need to put them into an external configuration (or database) file. Having some values in code and some in the configuration is confusing; for lists, it may also be difficult to have the user remove values he does not want.
For values that are in a configuration file, you still want to keep them under source control. For this, the common options are: