'''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