Software architecture and software design are the two main important parts or phases of software development. These two terms are very confusing to everyone. This article describes a basic overview of software architecture and software design, software architecture VS software design.
Software Architecture focuses more on the interaction between the externally visible components of the system where as the Design is about how the internal components of the system interact with each other. Software Architecture is more about what we want the system to do and Software Design is about how we want to achieve that. Software Architecture is at a higher level of abstraction than the Software Design. Software Architecture is concerned with issues beyond the data structures and algorithms used in the system.
Software Architecture shows how the different modules of the system communicate with each other and other systems. What language is to be used? What kind of data storage is present, what recovery systems are in place? Like design patterns there are architectural patterns. Such MVC, 3-tier layered design, etc.
Software design is about designing the individual modules / components. What are the responsibilities, functions, of module x or class Y? What can it do, and what not? What design patterns can be used? UML diagram/flow chart/simple wireframes (for UI) for a specific module/part of the system.
Software Architecture is the design of the entire system, while Software Design emphasizes on a specific module / component / class level.
All architecture is design but not all design is architecture.
Software Architecture is “what” we are building.
Software Design is “how” we are building.