Software that serves a changing environment. By allowing variable data to be introduced, the program can solve the same problem for different users, types of data or situations. For example, the Windows version of this encyclopedia could be programmed to read a title every time it starts up and thus be used for any type of dictionary. Writing generalized routines compared to "hard coding" a solution is always more time consuming. For example, a table-driven system allows the application to be customized by editing a table that is read rather than changing the programming code. Designing such an application takes time to design the table entries and speculate all the ways the table might be changed. Essentially, a high-level program generator or development system is a generalized program. All the ways the user might wish to customize the program must be considered ahead of time in order to make them high-level choices rather than low level coding. Contrast with hard coded.