Software architecture
Software architecture is a critical aspect of software development that involves the structuring of software systems. It defines the overall design and organization of the system, including its components, their interactions, and the principles guiding its design and evolution. A well-designed architecture ensures that a system is scalable, maintainable, and adaptable to changing requirements.
Understanding software architecture is essential for developers, architects, and anyone involved in the software development process. It provides a blueprint for both the system and the project, helping teams to navigate complexity and make informed decisions.
- Architectural Patterns: Common solutions to recurring design problems, such as Layered, Event-Driven, Microkernel, Microservices, and Space-Based architectures.
- Design Principles: Guidelines that influence the structure and behavior of the system, including modularity, separation of concerns, and encapsulation.
- Quality Attributes: Non-functional requirements that define the system’s performance, security, maintainability, and usability.
List of content


May 15, 2020
REST playground
In this post, you will learn the core principles and motivations behind REST, introduced by Roy Fielding. Discover how REST addresses challenges in network-based applications, contrasts with RPC, and promotes decoupling of client and server. Understand the importance of a uniform interface, media types, and effective resource modeling. Explore the...


May 8, 2024
Microfrontends
Microfrontends extend the concept of microservices to the frontend world. They involve breaking down a web application into smaller, more manageable pieces, each owned by different teams. This allows for independent development, deployment, and scaling of frontend components. Each microfrontend can be built using different technologies and frameworks, enabling teams...


May 8, 2024
Microservices
Microservices architecture is a design approach where a single application is composed of multiple loosely coupled, independently deployable services. Each service focuses on a specific business function and communicates with other services through well-defined APIs. This architecture promotes scalability, flexibility, and faster development cycles by allowing teams to work on...


May 8, 2024
MVC
Model-View-Controller (MVC) is a software architectural pattern that separates an application into three interconnected components the Model, the View, and the Controller. The Model represents the application's data and business logic, the View displays the data (user interface), and the Controller handles user input and updates the Model. This separation...
References
Blog posts
- SOFTWARE ARCHITECTURE PATTERNS - LAYERED, EVENT-DRIVEN, MICROKERNEL, MICROSERVICES, SPACE-BASED AND CQRS
- Fundamental Software Architectural Patterns
- Implementations
- Reading
Papers
-
On the Criteria To Be Used in Decomposing Systems into Modules
- Famous paper from David Parnas the criterias for decomposing systems, for some this is the paper that started the conversation around modules and how to evolve architecture.
- Big Ball of Mud
- HOW DO COMMITTEES INVENT? - by MELVIN E. CONWAY
Resources that mention quality attributes
- Living Documentation: Continuous Knowledge Sharing by Design, First Edition
- Architectural Quality Attributes for the Microservices of CaRE Thomas Schirgi April 2021