We review an approach to engineering design and simulation that we have developed over several years. Our research exploits a fundamentally new method of programming that is ideally suited to creating computer-based design environments where state, state change and the agents of change can be modelled. The programming method is general-purpose and has significant connections with object-oriented, functional and spreadsheet programming paradigms. We consider its application as a basis for environments for modelling systems of interacting agents, as a mode of knowledge representation and as an implementation technique. Our approach is thus of interest from both a computer science and an engineering perspective.