UPDATE!: I will be updating this repository with a new structure that better supports Obsidian.
This README won't be updated anymore and it will reference content from the /legacy
folder.
I'll iteratively move new versions of such content (and new stuff!) to ./READMEv2.md which will eventually become the main README and can be opened with Obsidian for better navigation.
- Software Architect Handbook
- System design
- Design principles
- Design patterns
- Architectural Styles & Patterns
- Data storage
- Software types
- Operating systems
- Refactoring & code smells
- Programming paradigms
- Software Engineering Culture
- Testing
- General concepts
- Tooling - Language Agnostic
- Technology specifics
For a complete System Design study, you should also be familiar with Databases related topics such as CAP Theorem. This section assumes prior knowledge about such topics, but you can also read about those in this very same repo.
- Introduction
- How to approach a design
- Performance Measures
- Response time
- Responsiveness
- Latency
- Throughput
- Load
- Load sensitivity
- Capacity
- Scalability
- Load Balancing
- Sustainability
- Scalability
- Caching
- RAID
- Consistency
- Availability
- Fail-over
- Replication
- Choosing a Database
- CDN: Content Delivery Network
- Stateless web tier
- Multi-data center
- Message Queue/Message Broker
- Logging, metrics, automation
- Scaling from zero to millions of users
- Back-of-the-envelope Estimation
- A Framework for System Design Interviews
- Hashing
Problems | Solutions |
---|---|
Instagram News Feed - Gaurav Sen | Solution |
Key-value store | Solution |
Unique ID generator in distributed systems | Solution |
URL shortener | Solution |
Web crawler | Solution |
Notification system | Solution |
News feed system | Solution |
Chat system | Solution |
Search autocomplete system | Solution |
Youtube | Solution |
Google Drive | Solution |
- Common Architectural Principles
- OO Design Principles
- DRY
- GRASP
- Hollywood Principle
- SOLID
- KISS
- WET
- YAGNI
- Gateway
- Mapper
- Layer Supertype
- Separated Interface
- Registry
- Value Object
- Special Case
- Plugin
- Service Stub
- Record Set
Please check the this repository for a detailed explanation and examples of each of the following patterns.
- Identity Field
- Foreign Key Mapping
- Association Table Mapping
- Dependent Mapping
- Embedded Value / Aggregate Mapping
- Serializd LOB
- Single Table Inheritance
- Class Table Inheritance / Root-Leaf Mapping
- Concrete Table Inheritance
- Inheritance Mappers
- Application Model / Presentation Model
- Humble View / Passive View
- MVC: Model View Controller
- MVP: Model View Presenter
- MVVM: Model View View-Model
- Front Controller
- Page Controller
- Supervising Controller
- Template View
- Transform View
- Two Step View
Recommended book: https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture
- MVC and Hexagonal Architectures as Precursors
- MVC Problems
- Tradeoffs
- What is Architecture
- Keeping options open
- Plugin Architecture - Model Controller Presenter (MCP)
- Request and Response Models
- Screaming Architecture
- Testable Architecture
- Humble Object Pattern
- Services and boundaries
- Test Boundaries
- The Fragile Tests Problem
- Code organization
- Target Hardware Bottleneck
- The Missing Advice
- Glossary
- Introduction
- History
- Architectural Properties
- Architectural Constraints
- Five key principles
- Semantics of HTTP APIs
- Benefits and alternatives
- Coupling and Cohesion
- Own their data
- DDD - Mapping aggregates and bounded contexts
- Monolith
- Planning a Migration
- Splitting the Monolith
- Decomposing the Database
- Splitting Apart the Database
- Split the Database First
- Split the Code First
- Schema Separation
- Shared Static Data
- Dealing with Transactions
- Growing Pains
- Trade-Offs
- When to avoid
- CAP/Brewer's Theorem
- BASE
- Object-oriented databases
- Database Scaling
- Vertical Scaling (Scaling Up)
- Horizontal Scaling (Sharding)
- Data Replication
- Consistency Models
- Strong Consistency vs Weak Consistency
- Eventual Consistency
- Strong Eventual Consistency (SEC)
- Synchronization techniques
- Handling failures
- Failure detection
- All-to-all multicasting
- Gossip protocol
- Handling temporary failures
- Sloppy quorum
- Hinted handoff
- Handling performance failures
- Anti-entropy protocol
- Handling data center outage
- Failure detection
- Data consistency primer
- Strong consistency
- Eventual consistency
- Inconsistency resolution
- Data partitionioning primer
- Horizontal partitioning (sharding)
- Vertical partitioning
- Fuctional partitioning
- ACID: Atomicity, Consistency, Isolation, Durability
- Isolation Levels
- Transactions
- Read Phenomena
- 2PC Protocol / XA Transactions
- Views
- Joins
- Stored Procedures
- Indexing
- ORM: Object-relational Mapping
- Object-relational impedance mismatch
- Overview
- HBase
Although some techniques and patterns are relevant for all kinds of software, many are relevant for only one particular branch.
- Enterprise Applications
- Multithreading
- Parallelism & Concurrency
- Process & Thread
- Models of Computation
- OOP Introduction
- Objects and Classes
- Class-based vs Prototype-based languages
- Foundational concepts
- 4 Pillars of OOP
- Abstraction
- Inheritance
- Encapsulation
- Polymorphism
- Abstract Class
- Mixin Class
- Traits
- Interface & Type
- 4 Pillars of OOP
- Techniques
- Advanced concepts
- 80/20 Rule
- Beyoncé Rule: If you liked it, put a CI test
- Churn Rule: Teams should internalize deprecation
- Constantine's law: Favor high cohesion
- Conway's law: Systems reflect organization's communication structure
- Hyrum's Law: The Law of Implicit Dependencies
- Occam's Razor: The simplest explanation
- Pareto principle: The 80/20 rule
- What is Software Architecture?
- The Software Architect
- The First Derivative
- Evolutionary Design
- Development Overconfidence
- Is Quality Worth the Cost?
- Concurrency
- Distribution Strategies
- Layering
- Resilience vs Robustness
- Developer Struggle
- Mapping to Relational Databases
- Organizing Domain Logic
- Session State (stateful vs stateless sessions)
- Technical Debt
- Leaky Abstractions
- Abstract Syntax Tree
- CRUD
- First-class citizen
- Modularization
- Side Effect
- SPOF: Single Point of Failure
- Web API
- Telepresence: tool that is aiming to make a hybrid local/remote developer workflow easier for Kubernetes users.
- Pact: customer-driven contracts.
- Cybersecurity Handbook
- Networking
- Telecommunications
- Encryption
- etc.
- Golang Handbook
- Go In Practice
- Java Handbook
- JS Handbook
- React
- Redux
- Data Science