Software Design and Software Architecture are the two most important phases of the Software Development Life Cycle. Both sounds confusing sometimes, let’s understand the differences clearly.
|Topic||Software Architecture||Software Design|
|It is||“What” we are building||“How” we are building|
|Definition||Software architecture refers to the fundamental structures of a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations.||Software design is the process of defining software methods, functions, objects, and the overall structure and interaction of your code so that the resulting functionality will satisfy your users requirements.|
|Level||Structure – focuses on abstraction which can be used by multiple designs||Implementation – plan to implement the architecture|
|Example||The architecture of a building contains structure of rooms, staircases, basic services like water, heating, ventilation, etc.||The design of a building contains interior design, flooring, interior materials, decorations, furnitures, and additional services, etc.|
|Identifies||Components and elements that needs to be included in the software.||It focuses on how the software will be built.|
|Is About||Software architecture is about overall structure of the software and where various software components fits into. It’s about what we want to do.||Software design is about individual software components and modules. It’s about how we want to achieve that.|
|Characteristics||Overall system setup – includes structure of the software you want to build
Fundamental elements – core functionalities and core elements
High-level structures – which describes availability, scale, performance, reliability, fault-tolerance, monitoring, maintenance, etc.
What is being built – address the needs and requirements of stackholders
|Correctness – as per the software requirements
Efficiency – efficient and useful as per consumer expectation
Understability – easy to understand and easy to communicate
Maintainability – easy to maintain
|Artifacts||Documentation, diagrams, charts or anything else which helps stackholders communication.||Design specification documents, flow charts, diagrams, known limitations, design model, wireframes, UML diagrams, etc.|
|Patterns||Serverless architecture, Event-driven architecture, Microservices Architecture, SOA, MVC, 3-tier, etc.||GOF (Gand of Four) patterns, SOLID principles, Read more design patterns.|
There are few aspects where Software Design and Software Architecture share. That’s the point where both the terminologies confuses a lot. It’s a two separate stages in the software development process, which usually tend to overlap.
- They both concerned with the interactions and relationships of various components and elements in the Software
- Software design should be aligned with the Software architecture
- Software design uses the Software architecture
Software architecture and design is two sides of a coin, that depends on each other for completeness and success.