Separation Heuristics

When to separate

  • Separate when the performance of a highly integrated product is not needed
  • Create manageable problems by separating system elements
  • Use more separation when product performance is already good enough
  • Use more separation when transactions cost are low
  • Use more separation to reduce risk. . . and reward
  • Use more separation when the cost of failure is high
  • Some separation is always required to create a manageable situation

Separate using modules

  • Manage system elements using abstraction and modularity
  • Manage abstraction and modularity with interfaces
  • Maintain a system-level model that guides the development of individual modules
  • Isolate variability, risk, and uncertainty
  • Isolate areas likely to change
  • Group related elements and separate unrelated
  • Group elements with high rates of information or energy exchange
  • Group elements that are frequently used together
  • Separate to send finished products to other modules
  • Separate to reduce complexity differences between system elements
  • Separate so modules exchange inputs and outputs at similar levels of abstraction
  • Separate so modules each do specific and different things
  • Separate to create checks and balances
  • Separate using physical barriers or space
  • Separate with time delays between action and response
  • Separate based on knowledge needed to perform tasks, not the order in which tasks occur
  • Separate frequently used functionality

Interface modules

  • Design interfaces to manage module interconnections
  • Make the interfaces clear and visible
  • Simplify interfaces to limit complexity imposed on the overall system
  • Design interfaces to be significantly simpler than the modules
  • Simplifying the interface usually requires more complex modules
  • Design interfaces to increase the probability a module can be changed without affecting the interface
  • Design interfaces between the system and the environment
  • Design external module functionality before internal functionality
  • Minimize physical points of contact
  • Standardize physical interface types
  • Enforce the interface requirements
  • Test the interfaces before testing the complete system
  • Create better, rather than more, interfaces
  • Use interfaces to minimize dependencies between modules (loose coupling)
  • Only send data to modules with “a need to know”
  • Use activity sequencing to minimize interdependencies
  • Postpone fixed connections until the last possible moment
  • Use control limits to identify issues and intervene before reaching hard limits
  • Create collections of reusable modules
  • Use configuration options to adjust and reuse modules
  • Set default configuration to cover all but exceptional situations
Facebook
Twitter
LinkedIn

Leave a Reply

Your email address will not be published. Required fields are marked *