This paper describes a programming methodology called model-based programming which supports development of systems with complex activities accessing large volumes of data. This methodology utilizes multiple levels of data model formality providing some powerful features for systems that are built using this methodology. For example, unlike most traditional systems, information can be programmed into an application during all phases of the system lifecycle - from development through daily use. Second, the way information is entered will dictate how much reasoning the system will perform on it. This provides options for the user when they enter information; they can enter information quickly and get less system management, or they can enter information more formally and the system will take more responsibility.