Software architecture provides a blueprint for developing a system and plays a vital role in addressing quality-related aspects such as performance, security, and scalability. The architecture of a software system has to ensure that design is able to support all requirements as well as support any changes requested by the customer.
A common belief is that for a large and critical application, architecture needs to be planned well in advance to adequately meet all functional and nonfunctional requirements. This presentation will stress the need for agility in architecture and design for large/critical applications. It will examine the role of software architecture and design on failures of past software projects and why plan-driven architecture and design were not able to adapt to changes easily but rather introduced unnecessary complexity in the system. We will propose a strategic and goal-oriented approach that systematically combines evolutionary design with plan-driven development.