Software design is the process of conceptualizing the software requirements into software implementation. This is the initial phase within the software development life cycle shifting the concentration from the problem to the solution.
When conceptualizing the software, the design process establishes a plan that takes the user requirements as challenges and works to identify optimum solutions. The plan should determine the best possible design for implementing the intended solution.
The software architecture of a system depicts the system’s organization or structure, and provides an explanation of how it behaves. A system represents the collection of components that accomplish a specific function or set of functions. In other words, the software architecture process provides a sturdy foundation on which software can be built.
A series of architecture decisions and trade-offs impact quality, performance, maintainability, and overall success of the system. Failing to consider common problems and long-term consequences can put your system at risk.
There are multiple high-level architecture patterns and principles commonly used in modern systems. These are often referred to as architectural styles. The architecture of a software system is rarely limited to a single architectural style. Instead, a combination of styles often make up the complete system.
And then, what is the difference between Software Design and Software Architecture?
Software design provides everything that software developers need to know to produce consistent software that implements the required functionality. This includes specifications of services, components, integrations, data models and algorithms.
Software architecture places big-picture constraints on the design to ensure that it aligns with the business and technology strategy of an organization. This includes considerations such as compliance, technology standards and operational efficiency. Architecture is intended to prevent designs from repeating known mistakes or being inconsistent with the rest of the organization.
How are they related?
Software architecture exposes the structure of a system while hiding the implementation details. Architecture also focuses on how the elements and components within a system interact with one other. Software design delves deeper into the implementation details of the system. Design concerns include the selection of data structures and algorithms, or the implementation details of individual components.
Architecture and design concerns often overlap. Rather than use hard and fast rules to distinguish between architecture and design, it makes sense to combine them. In some cases, decisions are clearly more architectural in nature. In other cases, decisions focus heavily on design and how it helps to realize that architecture.
To learn it in a more practical way:
Software Design is a plan that gives enough detail for developers to implement consistent software.
Software Architecture is a plan that constrains software design to avoid known mistakes and achieve an organization’s business and technology strategy.
The level of software design is: implementation
The level of software architecture is: structure