A long while ago MichaelJackson proposed that many real software systems should be considered as a real time simulations of the real world plus special functions to report on the state of the model and control it. See JacksonSystemDevelopment?