Home

Awesome

<p align="center"> <img src="banner.png" height="400"> <h1 align="center"> Awesome Software Architecture <br> <a href="https://github.com/mehdihadeli/awesome-software-architecture/actions/workflows/ci.yml"><img alt="build-status" src="https://img.shields.io/badge/build-passing-brightgreen.svg?style=flat-square" /></a> <a href="https://github.com/sindresorhus/awesome" ><img alt="awesome" src="https://awesome.re/badge-flat2.svg?style=flat-square" /></a> <a href="https://github.com/mehdihadeli/awesome-software-architecture/blob/main/LICENSE" ><img alt="license" src="https://img.shields.io/badge/License-CC0_1.0-E91E63.svg?style=flat-square" /></a> </h1> </p>

Curated list of awesome articles and resources to learn and practice software architecture, patterns and principles. This repository will be updated continuously, keep yourself up to date .

I created this repository to share a set of links that I found valuable and inspiring and I share them with others to improve our knowledge together ✌️.

🚀 Go ahead to the official web page here: > 🌐 https://awesome-architecture.com


Contents

Note: Bellow contents is not complete yet and it's in progress, and I will complete the descriptions over the time, but you are feel free to contribute this part.

Software Architecture

TopicDescription
Software ArchitectureSoftware architecture refers to the fundamental structures of a software system and the discipline of creating such structures and systems.

Actor Model Architecture

TopicDescription
Actor Model ArchitectureThe Actor Model is a programming paradigm in which the basic unit of execution is the actor. In the Actor Model, an actor does work by using messages to express actions upon a system or other actors within the given system
Akka .NETAkka.NET is a toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications on .NET.
Microsoft OrleansOrleans is a cross-platform framework for building robust, scalable distributed applications.
ProtoActorUltra fast distributed actors for Go, C# and Java/Kotlin.

Algorithms

TopicDescription
AlgorithmsAn algorithm is a procedure used for solving a problem or performing a computation.

AI

TopicDescription
AIArtificial intelligence topics
AI - RAGRetrieval-Augmented Generation (RAG)

Clean Architecture

TopicDescription
Clean ArchitectureThe Clean Architecture is the system architecture guideline proposed by Robert C. Martin (Uncle Bob) derived from many architectural guidelines like Hexagonal Architecture, Onion Architecture, etc...

Onion Architecture

TopicDescription
Onion ArchitectureThe Onion architecture, introduced by Jeffrey Palermo, and it is a form of layered architecture and we can visualize these layers as concentric circles.

Hexagonal Architecture

TopicDescription
Hexagonal ArchitectureThe Hexagonal Architecture or Ports and Adapters architecture, introduced by Alistair Cockburn and it's an architectural pattern that allows input by users or external systems to arrive into the Application at a Port via an Adapter, and allows output to be sent out from the Application through a Port to an Adapter.

Vertical Slice Architecture

TopicDescription
Vertical Slice ArchitectureThe vertical slice architecture is a technique that helps us build maintainable applications by separating the application around features or vertical slices.

Event Driven Architecture

TopicDescription
Event Driven ArchitectureEvent-driven architecture is a software design pattern in which decoupled applications can asynchronously publish and subscribe to events via an event broker.

Service Oriented Architecture

TopicDescription
Service Oriented ArchitectureService Oriented Architecture (SOA) is a software architecture design pattern in which application components provide services to other components using a communication protocol over a network. SOA aims to achieve loose coupling between software components, allowing them to be easily replaced or updated without affecting the rest of the system.

Domain Driven Design

TopicDescription
Domain Driven DesignThe key concepts and principles of Domain Driven Design, which emphasizes the importance of building a software system around a shared understanding of the business domain and the use of ubiquitous language.
Value ObjectsThe concept of value objects in Domain Driven Design, which are immutable objects that represent a concept or measurement and are characterized by their value, rather than their identity.
AggregationThe concept of aggregation in Domain Driven Design, which is a way of grouping objects together to form a logical unit that can be treated as a single entity.
Anemic Domain ModelThe Anemic Domain Model anti-pattern in Domain Driven Design, which refers to a model where the domain objects contain little or no behavior and the business logic is instead implemented in separate services.
Rich Domain ModelThe Rich Domain Model pattern in Domain Driven Design, which advocates for placing behavior and business logic in the domain objects themselves, rather than in separate services.
Domain ModelThe Domain Model concept in Domain Driven Design, which is a representation of the core concepts, entities, and relationships that make up a business domain.
Domain ServiceThe Domain Service concept in Domain Driven Design, which is a stateless, transactional operation that performs a business task and is not associated with any specific entity.
Application ServiceThe Application Service concept in Domain Driven Design, which is responsible for coordinating the execution of multiple domain services to achieve a higher-level business goal.
Domain EventsThe Domain Events concept in Domain Driven Design, which are messages that represent a significant occurrence within the business domain and can be used to trigger downstream processes or updates to other systems.
Integration EventsThe Integration Events concept in Domain Driven Design, which are messages that represent a significant occurrence in the context of an external system and can be used to trigger downstream processes or updates to the local system.
Bounded ContextThe Bounded Context concept in Domain Driven Design, which is a way of dividing a large, complex business domain into smaller, more manageable parts that are defined by a common language, context, and set of boundaries.
InfrastructureThe Infrastructure concept in Domain Driven Design, which includes all the components and systems that support the operation of the application, such as databases, message brokers, and third-party services.
Tactical Design PatternsThe Tactical Design Patterns in Domain Driven Design, which are recurring solutions to common problems that arise when building domain models, services, and repositories.
Strategic Design PatternsThe Strategic Design Patterns in Domain Driven Design, which are high-level principles and patterns that guide the overall architecture and organization of a large, complex software system.
MappingsThe concept of mappings in Domain Driven Design, which are the mechanisms used to transform data between the domain model and other parts of the system, such as the database or user interface.
Domain PrimitivesThe Domain Primitives concept in Domain Driven Design, which are simple, immutable value types that represent basic concepts in the domain, such as dates, times, and quantities.
EnumThe Enum concept in Domain Driven Design, which is a special type of domain primitive that represents a discrete set of values.
Exception and ValidationThe concepts of exception handling and validation in Domain Driven Design, which are important mechanisms for ensuring the correctness and robustness of the application.

Data Driven Design

TopicDescription
Data Driven DesignData-Driven Design is a software development methodology that emphasizes the use of data and analytics to inform design decisions. It involves collecting, analyzing, and using data to create and improve software products, services, and experiences. This approach relies on empirical evidence to guide design choices, and it requires a strong data infrastructure and analytics capabilities. Data-Driven Design can help organizations create more effective, efficient, and user-friendly products and services by making informed decisions based on real-world data. It can also lead to better customer engagement, increased revenue, and improved user satisfaction.

CQRS

TopicDescription
CQRSCQRS (Command Query Responsibility Segregation) is a design pattern that separates the concerns of command execution and data querying in a system. The basic idea behind CQRS is to split the application model into two separate models: one for reading data and another for writing data. This allows the two models to be optimized for their specific purposes, and provides benefits such as better scalability, performance, and maintainability. The CQRS pattern is often used in conjunction with event sourcing, which is a technique for capturing all changes to an application state as a sequence of events. Together, CQRS and event sourcing can provide a powerful way to build highly scalable and fault-tolerant systems.

Microservices

TopicDescription
MicroservicesA brief introduction to the concept of microservices, including their benefits and drawbacks, as well as common characteristics of microservices architecture.
CommunicationAn overview of the different communication patterns and protocols that can be used in microservices architecture, such as synchronous vs. asynchronous communication, REST vs. message-based communication, and the use of service buses.
Composite UIA discussion of the Composite UI pattern, which involves combining multiple microservices into a single user interface, and the different approaches to implementing it, such as server-side composition vs. client-side composition.
Service BoundariesAn exploration of how to define and enforce service boundaries in microservices architecture, including strategies for identifying service boundaries and techniques for implementing them, such as domain-driven design and bounded contexts.
TestingA guide to testing microservices, including strategies for testing individual services and testing the interactions between services, as well as tools and frameworks for testing microservices.
API GatewayAn introduction to the concept of an API Gateway, which acts as a single entry point for clients to access multiple microservices, and the benefits and drawbacks of using an API Gateway.
API Gateway - AmbassadorA specific implementation of an API Gateway using the Ambassador open-source project, including an overview of its features and how to configure and deploy it.
API Gateway - KongA specific implementation of an API Gateway using the Kong open-source project, including an overview of its features and how to configure and deploy it.
API Gateway - OcelotA specific implementation of an API Gateway using the Ocelot open-source project, including an overview of its features and how to configure and deploy it.
ObservabilityAn exploration of the concept of observability in microservices architecture, which involves the ability to monitor and debug distributed systems, and the different techniques and tools for achieving observability, such as logging, tracing, health checks ,and monitoring.
Observability - Distributed TracingA deep dive into the use of distributed tracing as a tool for achieving observability in microservices architecture, including an overview of how distributed tracing works, common tracing frameworks, and how to instrument microservices for tracing.
Observability - MonitoringAn overview of the different types of monitoring that can be used in microservices architecture, such as system monitoring, application monitoring, and business monitoring, and the different tools and approaches for monitoring microservices.
Observability - DiagnosticsAn overview of the different techniques and tools for diagnosing and debugging issues in microservices architecture, including log analysis.
Observability - LoggingLogging is an important aspect of observability in microservices architecture. This topic covers different logging frameworks and strategies used for monitoring and troubleshooting distributed systems.
Observability - CorrelationIdCorrelation ID is a technique used to track requests across multiple microservices. This topic explains what Correlation ID is and how it is implemented in a distributed system.
Observability - Tools - EFKEFK stack (Elasticsearch, Fluentd, and Kibana) is a popular logging and observability solution. This topic covers the basics of EFK, how it works, and how to set it up in a microservices architecture.
Observability - Tools - ELKELK stack (Elasticsearch, Logstash, and Kibana) is another popular logging and observability solution. This topic covers the basics of ELK, how it works, and how to set it up in a microservices architecture.
Observability - Tools - Fluent BitFluent Bit is a lightweight and efficient log processor and forwarder. This topic covers the basics of Fluent Bit, how it works, and how to set it up in a microservices architecture.
Observability - Tools - FluentDFluentd is an open-source log collector and aggregator. This topic covers the basics of Fluentd, how it works, and how to set it up in a microservices architecture.
Observability - Tools - LokiLoki is a horizontally-scalable, highly-available log aggregation system. This topic covers the basics of Loki, how it works, and how to set it up in a microservices architecture.
ResiliencyResiliency is the ability of a system to recover from failures and continue functioning. This topic covers different resiliency patterns and strategies used for building fault-tolerant microservices.
Resiliency - IdempotencyIdempotency is a technique used to ensure that an operation can be safely retried without causing unintended effects. This topic explains what idempotency is and how it can be implemented in a microservices architecture.
Resiliency - High AvailabilityHigh availability is a property of a system that ensures it remains operational even in the face of hardware or software failures. This topic covers different high availability patterns and strategies used for building fault-tolerant microservices.
SecuritySecurity is a critical aspect of any distributed system. This topic covers different security challenges and strategies used for securing microservices.
Security - Key VaultA key vault is a secure storage location for storing cryptographic keys, certificates, and secrets used by a microservices architecture. This topic explains what a key vault is and how to use it to securely manage sensitive data in a microservices
Tools - CAPCAP (short for "CAPability") is a distributed transaction solution for microservices that is based on the idea of eventual consistency. It provides an event bus with an Outbox pattern, which allows you to publish messages/events to multiple microservices in a reliable and transactional way. CAP is written in .NET Core
Tools - DaprDapr (Distributed Application Runtime) is an open-source framework for building microservices-based applications. It provides a set of building blocks, such as state management, pub/sub messaging, and service-to-service invocation, that help developers to focus on writing business logic rather than infrastructure code. Dapr is designed to be language-agnostic and can be used with any programming language and any cloud or edge environment. This topic covers the key features of Dapr and how to use it to build distributed applications.
Tools - Mass TransitMass Transit is an open-source distributed application framework for .NET. It provides a set of abstractions and building blocks for building scalable and fault-tolerant microservices-based applications. Mass Transit supports various messaging technologies, such as RabbitMQ, ActiveMQ, and Azure Service Bus, and provides features such as request-response, pub/sub messaging, and message routing. This topic covers the key features of Mass Transit and how to use it to build distributed applications.
Tools - NService BusNService Bus is a commercial distributed application framework for .NET. It provides a set of abstractions and building blocks for building scalable and reliable microservices-based applications. NService Bus supports various messaging technologies, such as RabbitMQ, Azure Service Bus, and Amazon SQS, and provides features such as request-response, pub/sub messaging, and message routing. This topic covers the key features of NService Bus and how to use it to build distributed applications.
Tools - SteelToeSteeltoe is an open-source framework for building .NET microservices-based applications that run on Cloud Foundry and Kubernetes. Steeltoe provides a set of libraries and building blocks, such as service discovery, circuit breakers, and security, that help developers to build and operate cloud-native applications. Steeltoe is designed to be modular and can be used with any .NET framework, such as ASP.NET, .NET Core, and .NET Framework. This topic covers the key features of Steeltoe and how to use it to build cloud-native applications.
Tools - TyeTye is an open-source development tool for building, testing, and deploying microservices-based applications. Tye provides a simple and fast way to develop and run applications locally using containers, without the need to manage the infrastructure. Tye supports various programming languages, such as .NET, Java, and Node.js, and integrates with popular tools such as Docker, Kubernetes, and Helm. This topic covers the key features of Tye and how to use it to develop and deploy microservices-based applications locally.
Tools - wolverineWolverine is an open-source project that provides a next-generation command and message bus for .NET. It allows developers to build scalable and distributed applications by enabling communication between different parts of the application through a message-based architecture. Wolverine is built on top of the Jasper Framework and provides features such as distributed command routing, message serialization, and versioning. It supports both synchronous and asynchronous message handling, and can be used with various transport protocols such as HTTP, RabbitMQ, and Azure Service Bus.

Modular Monolith

TopicDescription
Modular MonolithModular Monolith is an architectural approach that combines the advantages of monolithic and microservices architectures. It aims to build a monolithic application with a modular design that allows it to be divided into smaller, more manageable parts, each with its own clear responsibilities and interfaces. This approach allows teams to develop and deploy features independently, while still maintaining a single codebase and database. The modular design also facilitates the testing and maintenance of the application, as well as the scaling of individual modules.

Architectural Design Principles

TopicDescription
Architectural Design PrinciplesA comprehensive overview of the most important principles that should be considered when designing software architecture.
CAPThe CAP theorem, which describes the trade-offs that must be made in distributed systems between consistency, availability, and partition tolerance.
CohesionThe concept of cohesion, which refers to the degree to which the elements within a module or component are related and work together to achieve a single purpose.
CouplingThe concept of coupling, which refers to the degree to which one module or component depends on another.
Command Query SeparationThe Command Query Separation (CQS) principle, which recommends that methods should either change the state of an object (commands) or return a value (queries), but not both.
Cross Cutting ConcernsCross-cutting concerns are features or requirements that cut across multiple components or modules in a system, such as security, logging, or transaction management.
Dependency InversionThe Dependency Inversion principle, which states that high-level modules should not depend on low-level modules, but both should depend on abstractions.
DRYThe Don't Repeat Yourself (DRY) principle, which states that code should not be duplicated within a system, but instead should be abstracted into reusable functions or modules.
EncapsulationEncapsulation is the principle of hiding implementation details of an object or module from its users, and providing a well-defined interface for interacting with it.
Fail Fast Design PrinciplesFail-fast design principles aim to reduce the impact of errors and failures in a system, by detecting them as early as possible and stopping the execution of the system before the error propagates further.
Composition Over InheritanceThe Composition over Inheritance principle, which recommends favoring composition (building complex objects by combining simpler ones) over inheritance (creating new classes by extending existing ones) when designing object-oriented software.
GRASPThe General Responsibility Assignment Software Patterns (GRASP) are a set of guidelines for assigning responsibilities to objects and modules in a software system.
Interface SegregationThe Interface Segregation principle, which states that clients should not be forced to depend on interfaces they do not use, and that interfaces should be designed to be cohesive and focused on a single purpose.
Inversion ControlThe Inversion of Control (IoC) pattern, which is a technique for decoupling the dependencies between modules or components in a system, by inverting the direction of the dependencies.
KISSKeep It Simple, Stupid (KISS) is a design principle that encourages keeping systems and solutions as simple as possible to avoid unnecessary complexity and increase maintainability.
Open Closed PrinciplesThe Open-Closed Principle (OCP) is a design principle that promotes the idea of writing code that is open to extension but closed to modification, meaning that new features should be added to a system without changing its existing codebase.
Persistence IgnorancePersistence Ignorance (PI) is a design principle that encourages decoupling business logic from persistence logic to increase flexibility, maintainability, and testability.
Single ResponsibilityThe Single Responsibility Principle (SRP) is a design principle that advocates for a class or module to have only one reason to change, meaning it should only have one responsibility or job.
Strangler Fig PatternThe Strangler Fig Pattern is an approach to software modernization that involves gradually replacing an existing system with a new one, module by module, rather than attempting to migrate it all at once.
SolidSOLID is an acronym for five object-oriented design principles (Single Responsibility Principle, Open-Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, and Dependency Inversion Principle) that aim to make software systems more maintainable, scalable, and testable.
YagniYou Aren't Gonna Need It (YAGNI) is a principle that advises against writing code for features that are not yet needed, to avoid adding unnecessary complexity to the codebase and focus on delivering only what is required.

Design Patterns

TopicDescription
Design PatternsA comprehensive list of design patterns with examples and explanations of how they can be used to solve common software design problems.
Adapter PatternThe Adapter Pattern is a structural design pattern that allows objects with incompatible interfaces to work together by providing a wrapper that adapts the interface of one object to match the interface of another. Actually The Adapter acts as a wrapper between two objects. It catches calls for one object and transforms them to format and interface recognizable by the second object.
BuilderTODO...
Chain of ResponsibilityTODO...
Command Message PatternTODO...
Command PatternTODO...
Decorator PatternsTODO...
Factory PatternsTODO...
Mediator PatternsTODO...
Observer PatternsTODO...
Query-Object PatternsTODO...
Repository PatternTODO...
REPRTODO...
Service LocatorTODO...
SingletonTODO...
Specification PatternTODO...
State PatternTODO...
Strategy PatternsTODO...
Transaction-Script PatternsTODO...

Cloud Design Patterns

TopicDescription
Cloud Design PatternsTODO...
Ambassador PatternTODO...
Anti Corruption Layer PatternTODO...
BFFTODO...
Bulkhead PatternTODO...
Circuit BreakerTODO...
Exactly One DeliveryTODO...
Gateway AggregationTODO...
Gateway PatternTODO...
Inbox PatternsTODO...
Outbox PatternsTODO...
Saga PatternsTODO...
Sidecar PatternsTODO...
Strangler Fig PatternsTODO...

Cloud Best Practices

TopicDescription
Cloud Best PracticesTODO...

Cloud Native

TopicDescription
Cloud NativeTODO...

Platform as a Service

TopicDescription
HerokuTODO...
NetlifyTODO...
OpenShiftTODO...
RancherTODO...

Infrastructure as a Service

TopicDescription
Infrastructure as a ServiceTODO...
NomadTODO...
PulumiTODO...
TerraformTODO...

DevOps

TopicDescription
ContainerdTODO...
DockerTODO...
Docker - Docker ComposeTODO...
KubernetesTODO...
Kubernetes - ServicesTODO...
Kubernetes - Deployment StrategiesTODO...
Kubernetes - Deployment Tools - ArgoCdTODO...
Kubernetes - Deployment Tools - FluxTODO...
Kubernetes - Deployment Tools - HelmTODO...
Kubernetes - Deployment Tools - JenkinsTODO...
Kubernetes - Deployment Tools - Kubernetes OperatorTODO...
Kubernetes - Deployment Tools - KustomizeTODO...
Kubernetes - Ingress ControllerTODO...
Kubernetes - Ingress Controller - NginxTODO...
Kubernetes - Ingress Controller - TraefikTODO...
Kubernetes - Other Tools - K3sTODO...
Kubernetes - Other Tools - KindTODO...
Kubernetes - Other Tools - TiltTODO...

Reverse Proxy - Load Balancing

TopicDescription
Load BalancingTODO...
Reverse ProxyTODO...
EnvoyTODO...
HAProxyTODO...
MetalLBTODO...
NginxTODO...
TraefikTODO...
YarpTODO...

Service Discovery And Registry

TopicDescription
Service DiscoveryTODO...
ConsulTODO...
EurekaTODO...

Service Mesh

TopicDescription
Service MeshTODO...
IstioTODO...
LinkerdTODO...
MaeshTODO...

Object Oriented Design

TopicDescription
Object Oriented DesignTODO...

Systems Design

TopicDescription
Systems DesignTODO...
Consistent HashTODO...

Scaling

TopicDescription
ScalingTODO...

Back Pressure

TopicDescription
Back PressureTODO...

Clean Code

TopicDescription
Clean CodeTODO...

Abstraction

TopicDescription
AbstractionTODO...

Design Best Practices

TopicDescription
Design Best PracticesTODO...
12 FactorTODO...
Strongly Typed IdsTODO...
Thin ControllersTODO...

Anti Patterns

TopicDescription
Anti PatternsTODO...
Big Ball of MudTODO...
Code SmellsTODO...
God ObjectTODO...
Leaky AbstractionsTODO...
Partial ObjectTODO...
Static ClingTODO...

Eventual Consistency

TopicDescription
Eventual ConsistencyTODO...

Messaging

TopicDescription
MessagingTODO...
Async APIs DocumentationTODO...
Messaging-patternsTODO...
KafkaTODO...
RabbitmqTODO...
NatsTODO...
ZeroMQTODO...
Change Data Capture (CDC)TODO...

Distributed Transactions

TopicDescription
Distributed TransactionsTODO...

Distributed Locking

TopicDescription
Distributed LockingTODO...

Eventual Consistency

TopicDescription
Eventual ConsistencyTODO...

RESTful API Design

TopicDescription
RESTful API DesignTODO...

gRPC

TopicDescription
gRPCTODO...

Caching

TopicDescription
CachingTODO...

Functional Programming

TopicDescription
Functional ProgrammingTODO...

Concurrency

TopicDescription
ConcurrencyTODO...

Sharding

TopicDescription
ShardingTODO...

Refactoring

TopicDescription
RefactoringTODO...

Database

TopicDescription
Database - NoSQL - NoSQLTODO...
Database - NoSQL - MongoDBTODO...
Database - NoSQL - RavenDBTODO...
Database - NoSQL - CosmosdbTODO...
Database - NoSQL - DocumentdbTODO...
Database - Relational - Relational DatabaseTODO...
Database - Relational - PostgresTODO...
Database - Relational - SQLTODO...
Database - ReplicationTODO...
Database - ShardingTODO...

Relational Database

TopicDescription

Microsoft Azure Cloud

TopicDescription
Microsoft Azure CloudTODO...
AKSTODO...
Azure API ManagementTODO...
Azure App Service PlanTODO...
Azure App ServiceTODO...
Azure ArcTODO...
Azure ConfigurationTODO...
Azure FunctionsTODO...
Azure Load BalancingTODO...
Azure Logic AppTODO...
Azure ResourceTODO...
Azure Resource ManagerTODO...
Azure SQL ServerTODO...
Azure Security - Azure Key VaultTODO...
Azure Security - Azure Active DirectoryTODO...
Azure MessagingTODO...
Azure Messaging - Azure Service BusTODO...
Azure Messaging - Azure Event GridTODO...
Azure Messaging - Azure Event HubTODO...
Azure Messaging - Azure QueueTODO...
Azure Messaging - Azure Web Pub SubTODO...
Azure NoSQLTODO...
Azure NoSQL - CosmosDBTODO...
Azure StorageTODO...
Azure Storage - Blob StorageTODO...
Azure Storage - File StorageTODO...
Azure Storage - Queue StorageTODO...
Azure Storage - Table StorageTODO...

Modeling

TopicDescription
ModelingTODO...
Architecture DiagramTODO...
Class DiagramTODO...
Component DiagramTODO...
Conceptual ModelingTODO...
Data Model NotationsTODO...
Domain StroytellingTODO...
ER DiagramsTODO...
Event ModelingTODO...
Event StormingTODO...
Logical ModelingTODO...

Open Source

TopicDescription
Open SourceTODO...

Code Review

TopicDescription
Code ReviewTODO...

Interview

TopicDescription
InterviewTODO...

Architecture Decision Records (ADR)

TopicDescription
Architecture Decision Records (ADR)TODO...

Micro-Frontend

TopicDescription
Micro-FrontendMicro-frontends are revolutionizing the development landscape by allowing independent implementation of a business subdomain, all with the same and different technologies.

Others

TopicDescription
OthersTODO...

🙏 Special Thanks

Thanks to the authors of the links for their valuable content, I gather them in one place for finding topics to read easier.

⭐ Support

If you like, feel free to ⭐ this repository, it helps out :)

Thanks a bunch for supporting me!

🤝 Contribution

Contributions are always welcome! Please take a look at the contribution guidelines pages first.

Thanks to all contributors, you're awesome and this wouldn't be possible without you! The goal is to build a categorized community-driven collection of very well-known resources.

<a href="https://github.com/mehdihadeli/awesome-software-architecture/graphs/contributors"> <img src="https://contrib.rocks/image?repo=mehdihadeli/awesome-software-architecture" /> </a>