Tale of software architect(ure): Part 1 (Software Architecture and Software Design)
Saiful Islam Rasel
Senior Engineer, SDE @ bKash | Ex: AsthaIT | Sports Programmer | Problem Solver | FinTech | Microservice | Java | Spring-boot | C# | .NET | PostgreSQL | DynamoDB | JavaScript | TypeScript | React.js | Next.js | Angular
Story:
My uncle Salam wants to build a house. So he first hire Rafiq to plan the construction of his new house. Rafiq first try to understand uncle's needs: How many bedrooms do he want? Do he prefer a modern or traditional style? Will the house be two stories or one? Should there be a backyard and a garage?
Then Rafiq creates the blueprint of the house, which represents the high-level structure of his house. This blueprint shows where the rooms will be, how the electrical systems will be laid out, how plumbing will work, and the relationships between the major parts of the house. These decisions include:
At this stage, the architecture of his house is defined. It’s a big-picture plan, showing the major sections and how they fit together. Though he haven't yet figured out the detailed specifications of each room or part of the house, but the overall structure is in place. Once the architect’s work is done, it becomes difficult and expensive to change core elements of the plan, like adding an extra floor or switching the location of the garage.
Secondly, after the architect is done with the blueprint, Salam bring in a builder designer named Borkot to focus on the details. Borkot's job is to build and plan out the specific layout, look, and function of each room. He help decide things like:
Borkot takes the broad plan from the architect and makes detailed decisions about each component in the house. These decisions ensure that every part of the house is functional, practical, and aesthetically pleasing.
What is Software Architecture?
Software Architecture refers to the high-level structure of a software system. It defines the major components of the system, their relationships, and how they interact with each other. It sets the foundational blueprint for the entire system, ensuring that it meets both functional and non-functional requirements such as performance, scalability, security etc.
Key Aspects of Software Architecture:
Components: These are the primary building blocks of the system, such as modules, services, or subsystems. Components can range from individual classes or objects to larger systems like databases or APIs.
Relationships: How components interact with each other, including communication protocols, data exchange methods, and control flows. This could be in the form of client-server interactions, data pipelines, or event-driven architectures.
Patterns and Styles: Architectural patterns provide tried-and-tested solutions to recurring problems. Common architectural patterns include:
Non-Functional Requirements: Architecture focuses heavily on system qualities like:
Technological Choices: Software architecture involves making decisions about the tools, frameworks, languages, and platforms that will be used. For example, deciding to use cloud services, databases, or messaging systems.
Abstraction and Decoupling: Architectural design aims to reduce complexity by abstracting details and decoupling components so they can evolve independently. This results in systems that are modular, easier to understand, and more maintainable.
Architectural Decisions: These are decisions that have a long-term impact on the system, such as selecting between a monolithic or microservices architecture. These decisions are difficult to change later in development because they affect the entire structure.
Importance of Software Architecture:
Examples of Software Architecture:
What is Software Design?
Software Design refers to the process of defining how individual components of a software system will function, interact, and be implemented. It operates at a lower level than software architecture and focuses on the details necessary to translate the overall system architecture into functional code. Software design ensures that each part of the system meets its requirements and can work together as a cohesive whole.
Key Aspects of Software Design:
Detailed Blueprint of Components:
Design Patterns:
领英推荐
Functional Requirements:
Algorithms:
Data Structures:
Low-Level Design (LLD):
Modularity and Reusability:
Error Handling and Edge Cases:
User Interface (UI) Design:
Testing and Validation:
Software Design Phases:
Importance of Software Design:
Examples of Software Design:
Similarities or Relations between Software Architecture and Design:
Differences between Software Architecture and Design:
Summary:
Think of software architecture as the blueprint of a house, which shows the overall structure and layout, and software design as the detailed decisions for the interior, where each room’s layout and functionality are refined. Both architecture and design are essential for creating a functional, scalable, and maintainable system, just as both the blueprint and interior design are crucial for building a home that's both livable and aesthetically pleasing.
To get a good house we need good architecture and design. Similarly to get a good useful software system we need a solid architecture with perfect design/implementation.
Software Engineer at Astha IT
1 个月It was a great read to get the fundamentals brother. The read will be more pleasant if you could improve the spacings and indentations. Thank you.
Cloud & Software Architecture Enthusiast | BSc CSE (Ongoing) | Diploma in Computer Technology
2 个月I am waiting for next part
Cloud & Software Architecture Enthusiast | BSc CSE (Ongoing) | Diploma in Computer Technology
2 个月This is fantastic discussion about software architecture and design. Many many thanks for valuable content.