A large system that requires decomposition.


Designing a complex systems with high- and low-level issues.

Known Uses

  • Virtual Machines

  • APIs

  • Information Systems


  • Source code changes should not ripple through the system

  • Interfaces should be stable

  • Parts of the system should be exchangeable

  • Reusability of low-level issues for other systems

  • Better understanding and maintainability

  • Complex components needs further decomposition

  • Crossing components boundaries may impede performance, especially if substantial amount of data must be transferred over several boundaries

  • The system is build by a team of programmers, and work has to be subdivided along clear boundaries


  • Reuse of layers

  • Support for standardization

  • Dependencies are kept local

  • Exchangeability


  • Cascades of changing behavior

  • Lower efficiency

  • Unnecessary work

  • Difficulty of establishing the correct granularity of layers