| Today our civilization is highly dependent upon software-intensive systems. Software-intensive systems are those systems that are highly dependent upon computing infrastructure and software for the basic functionality they provide and the properties they possess. Architecture design of software-intensive systems as a separate and distinct discipline within software engineering is about 15 years old, depending upon who you ask and how they define architecture design. System design dates back to around 1945 and formally emerged from the RAND laboratories building large government weapons and data systems. Much of this early work in systems design and engineering was funded by the U.S. Department of Defense. The design of large complex systems in those early years tended to focus on partitioning the system into electromechanical elements, and integrating the elements into a system. At that time data automation hardware was very large and expensive to buy and maintain. Software applications were relatively small and still insignificant in terms of complexity and cost compared to hardware. Early systems engineering approaches and techniques emerged from this domain and were deeply influenced by government, military, and large business organizations. The systems engineering community still retains much of the spirit of this domain to this day. As systems requirements became more demanding, and computer hardware became cheaper and smaller, the demand for software in these complex systems grew exponentially. Software applications grew in complexity, and the cost of software quickly rose exponentially. In many ways, traditional systems engineering approaches and methods did not, and arguably still do not, address systemic software design. Because of the role and importance of software in modern systems and the dramatic impact if poorly designed, a system must be designed holistically. Traditional systems engineering approaches emerged from the design of electromechanical systems, and systemic software design was left behind for many years by this community. What experience has shown is that the computer hardware, peripherals, software, and other electromechanical parts of the system cannot be designed and built in isolation without first designing the overall architecture of the system. This is true for embedded or IT-oriented software-intensive systems. |