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.
Differences:
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. |
Similarities:
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.