Software Architect Handbook
- Software Architect Handbook
- General Concerns
- Design Principles
- Refactoring
- Programming Paradigms
- Design Patterns
- Types of Software
- System Design
- Architectural Styles & Patterns
- Data Storage
- Technology specifics
- Operating Systems
- Data Science & Big Data
- Software Engineering Culture
- Testing
- Frontend
- Glossary
- Tooling - Language Agnostic
- Z-Index, other repositories
General Concerns
About Architecture
- What is Software Architecture?
- The Software Architect
- The First Derivative
- Evolutionary Design
- Development Overconfidence
- Is Quality Worth the Cost?
About Engineering
- Concurrency
- Developer Struggle
- Distribution Strategies
- Layering
- Mapping to Relational Databases
- Organizing Domain Logic
- Resilience vs Robustness
- Session State
- Technical Debt
Design Principles
- Common Architectural Principles
- OOP Principles
- OO Design Principles
- DRY
- GRASP
- Hollywood Principle
- SOLID
- KISS
- WET
- YAGNI
Refactoring
Programming Paradigms
Structured
OOP: Object Oriented Programming
- 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
Functional
Design Patterns
Base Patterns
- Gateway
- Mapper
- Layer Supertype
- Separated Interface
- Registry
- Value Object
- Special Case
- Plugin
- Service Stub
- Record Set
General / Architectural
Gang of Four Patterns
Please check the this repository for a detailed explanation and examples of each of the following patterns.
Domain Logic
Data Source & Persistence
Object Relational
Behavioral
Structural
- 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
Metadata Mapping
Web Presentation
- 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
Distribution
Offline Concurrency
Session State
Anti-Patterns
Types of Software
Altouhgh some techniques and patterns are relevant for all kinds of software, many are relevant for only one particular branch.
- Enterprise Applications
System Design
For a complete System Design study, you should also be familiar with Databases related topics such as CAP Theorem.
- Introduction
- Where to start
- Performance Measures
- Response time
- Responsiveness
- Latency
- Throughput
- Load
- Load sensitivity
- Capacity
- Scalability
- Sustainability
- Scalability
- Load Balancing
- 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
System Design - Case Studies
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 |
Architectural Styles & Patterns
Recommended book: https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture
Three-Layer System (Martin Fowler)
Service Oriented Architecture (SOA)
Ports & Adapters / Hexagonal
Clean 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
REST: Representational State Transfer
- Introduction
- History
- Architectural Properties
- Architectural Constraints
- Five key principles
- Semantics of HTTP APIs
Flux & Redux
Domain-Driven Design
Microservices
- 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
Data Storage
-
- Vertical Scaling (Scaling Up)
- Horizontal Scaling (Sharding)
-
- Strong Consistency vs Weak Consistency
- Eventual Consistency
- Strong Eventual Consistency (SEC)
-
Synchronization techniques
-
- 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
- Data consistency primer
- Strong consistency
- Eventual consistency
- Inconsistency resolution
Data partitioning
- Data partitionioning primer
- Horizontal partitioning (sharding)
- Vertical partitioning
- Fuctional partitioning
Relational Databases
- 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
Wide-column store
- Overview
- HBase
GraphQL
Technology specifics
Specifics that should be considered while developing a software solution relying on a particular technology.
- Golang Handbook
- Go In Practice
- Java Handbook
- JS Handbook
- React
- Redux
Operating Systems
- Multithreading
- Parallelism & Concurrency
- Process & Thread
- Models of Computation
Linux
Data Science & Big Data
Software Engineering Culture
Laws & Theorems
- 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
Working Methodologies
Testing
E2E Testing
Frontend
- Atomic design
- Design system
- Legacy lifecycle of frontend
- Areas of frontend
- Accessibility testing
- CSR vs SSR
Glossary
- Abstract Syntax Tree
- CRUD
- First-class citizen
- Leaky Abstraction
- Modularization
- Side Effect
- SPOF: Single Point of Failure
- Web API
Tooling - Language Agnostic
- Telepresence: tool that is aiming to make a hybrid local/remote developer workflow easier for Kubernetes users.
- Pact: customer-driven contracts.
Z-Index, other repositories
- Cybersecurity Handbook
- Networking
- Telecommunications
- Encryption
- etc.