Library/Software Engineering/Complex Systems


 * Protocols - syntax and semantics to communicate between diverse components
 * Layering - abstraction and isolation from component-level details, relative independence
 * Naming - allowing components to be found simply and dynamically, conventions
 * Resource Allocation - indirect acquisition to enforce management of shared resources