As the size of software systems increases, the algorithms and data structures introduced in Unit 4 are no longer the major design problems. When systems are constructed from many components, the organization of the overall system—the software architecture—is the new design challenge. Software architecture design has been addressed in several ways including informal diagrams and descriptive terms, module interconnection languages, templates and frameworks for systems that serve the needs of specific domains, and formal models of component integration mechanisms.