'''Name:''' ModelYourEnvironment '''Aliases:''' Working Model, Run Simulations, Make Predictive Assessments '''Context:''' The environment interacts with the system in subtle ways that are now creating macroscopic anomalies. These anomalies occurred only infrequently in the past, but were dealt with on a case-by-case basis. '''Problem:''' A system has limited view of what external forces impact its internal environment. Seemingly chaotic behavior constantly disrupts smooth functioning. '''Forces:''' Most likely, no one person understands the environment as a whole. The environment may have changed substantially, making the previous set of working assumptions invalid. Greater sophistication is required to accurately reflect the environment's impact and to ward off potentially devastating conditions that arise from it. '''Solution:''' Create a model of the environment that incorporates existing assumptions about the interaction between the environment and the system. Create simulations that test the viability of those assumptions against historical data. Then create simulations which model current conditions that yield predictions about future results. If the results of actual conditions do not match the predictions, inspect and adjust the model as appropriate. When across several iterations of historical / predictive simulations the model stabilizes, identify key improvements that take advantage of new knowledge about the environment. Allow all participants in the system to use the model as a reference for future problem solving. '''Resulting Context:''' The system is now adjusted to function with more realistic assumptions about what might impact it. '''Design Rationale:''' When the system-environment interaction reaches a certain threshold of complexity, simplistic notions of what conditions might arise become obsolete. In order to integrate the viewpoints of all the participants in the system, a centralized notion of the environment must be built. It serves as a reference point, where strategies for improvements can be compared and measured. It is not an absolute reflection of the environment, but simplifies it enough so that one person can grasp it well enough to make better decisions. '''Examples:''' Trading Systems, Steel Manufacturing, Complex Adaptive Systems. '''Related Patterns:''' ModelYourSelf Written by DavidCymbala ---- This may (?) have a couple of examples in MichaelJackson's early methods: JacksonStructuredProgramming and JacksonSystemDevelopment. In the first method you make an explicit model of all the possible and significant patterns of data and then use this to construct the code. In the second method (when the data is not well defined before hand) you explicitly construct a simulation model of the part of the world with which the software is interacting (as a large number of interacting dynamic objects), secondly work out ways to connect the simulation to the user's world, and then place the functionality that the user asks for in this model. -- DickBotting