system designs and patterns¶
There are many many system design patterns to learn and understand. It really depends on your business usecase, resources, strategies, business needs, and the engineering infrastructure you are looking into build.
key architectural patterns¶
The following are derived from Neo Kim's ultra popular system design newsletters. I really liked how he break it down into the following common system design patterns at a high level. I highly recommend the subscription. I also really like how he makes learning system designs super fun and are able to decompose from such a complex topic into chunks of essentials that you should focus on before hopping into more complicated architecture!
I will actually dive deeper into each of this components later to help you understand what each of this architectural patterns would entailed.
Layered Architecture
- Separating software into logical and independent layers.
Microservices Architecture
- Creating an application with small and independent services.
Event-Driven Architecture
- Services communicate via events for scalability and flexibility.
Service-Oriented Architecture
- Organizing software into reusable and loosely coupled services.
Hexagonal Architecture
- Implementing clear separation between core logic and external interfaces.
Component-Based Architecture
- Organizing software into reusable, self-contained components.
Model-View-Controller
- Separating data, presentation, and user interaction layers.
Domain-Driven Design
- Focusing on understanding and modeling core business domains.
Command Query Responsibility Segregation
- Separating read and write operations in the system for scalability.
Event Sourcing
- Storing the state changes as a sequence of events.