Things that you have to do, you might as well do them early when you have time to do them. In functional language terms, this is called eager evaluation.
Good decision makers know how to delay decisions until the need to be made without delaying the decision too long.
Example: When you wear shoes with shoelaces, do you untie your shoelaces before taking your shoes off?
Eager method: untie them because you will have to do it anyway when you put your shoes on, and it is better for the shoes in the long run to do this. Of course, you can always force your foot into the shoe without untying the laces next time, but that may not be good for the shoe, or your foot.
Lazy method: pull your foot out because it is faster now, but you will have to untie the shoelaces anyway to put the shoes on next time. And, there will most probably be a next time.
Which method do you use?
In the Army, one always waits until you see if they really want you to do what they asked you to do.
That is what employees often do, too. They wait to see if you really wanted what you said that you wanted.
Students do the same thing. Most people do.
An important concept in making decisions that involve getting information into the computer is that of eager versus lazy evaluation.
Lazy evaluation delays evaluation until it is required. So, data would be computerized as needed. If the data is never needed, it is never computerized. The advantage is that no more work is done than necessary.
A lazy evaluation scheme for relating zip codes to cities and states could be expressed using the following pseudo code algorithm.
Ask the customer for their zip code
Lookup the zip code in the database
IF the zip code is in the database THEN
Ask the customer if the city and state are correct
IF correct THEN
do nothing
ELSE
resolve the discrepancy in some manner
ENDIF
ELSE
ask the customer their city and state
enter the new information with the zip
ENDIF
Notice how such a method will incrementally provide the relations needed. If a relation is never needed, no time or effort is expended obtaining and processing that information.
As another example, consider a pizza shop that delivers. Even if a database containing the phone numbers and addresses of everyone in the county were available and up-to-date, it might be better to use a lazy method to obtain such information, adding phone numbers and addresses, as well as useful comments about the customer, when a customer places an order over the phone. If there are a significant number of repeat customers, as one would hope there would be, savings would be realized starting with the second call. In this case, a primary key for this example might be the phone number. And, if Caller-ID is available, a link to the computer might even obviate the need to ask the customer for their phone number.
As a practical matter, the database could be purged of customers who have not ordered for more than a specified amount of time (say, one or two years).
As another example, instead of computerizing an entire manual of parts for a piece of equipment, which would involve a significant amount of effort, only ordered parts could be computerized, both to track the status of the parts and assuming that a payoff may occur if the same part is ordered more than once.
Aside: The title of the author's Ph.D. dissertation was
Issues in the implementation of lazy functional languages (1990), which was intimately involved with the ideas of copy-update problems, sharing properties, and eager and lazy evaluation in both sequential and parallel modes of execution.