Software Design and Architecture
Clean architecture, DDD, API design, patterns, and service boundaries.
Lessons
- Design Patterns in Java — Practical Catalog
- KISS, DRY & YAGNI
- API Design — Clear Contracts Clients Can Trust
- API Gateway — Edge Entry for Microservices
- Quality-Attribute Scenarios
- The Twelve-Factor App — Cloud-Native Baselines
- OOP Fundamentals — Encapsulation, Inheritance, Polymorphism
- Distributed Rate Limiting — Shared Quotas Across Many Pods
- Batch vs Stream Processing — When to Wait, When to Flow
- SOLID Principles — Maintainable Object Design
- Client–Server Architecture — Request Work From a Shared Machine
- Rate Limiter Design — Case Study
- REST vs. GraphQL — Fixed Resources vs. Client-Driven Queries
- Fan-out on Write vs Fan-out on Read
- Microservices Architecture — Independently Deployable Pieces
- REST vs. RPC — Wire Protocol and API Paradigm Trade-offs
- WebSockets — Full-Duplex Connections for Real-Time Apps
- Notification System Design — Reference Architecture
- What Is an API? — Contracts Between Programs
- Peer-to-Peer Architecture — Nodes as Equals
- Push vs Pull — Who Initiates Data Movement
- Scalability — Vertical, Horizontal, and Elastic Growth
- Serverless Architecture — Managed Compute on Demand
- Service Discovery — Finding Instances That Change
- Splitting a Monolith Safely (Strangler Fig)
- Stateful vs. Stateless Architecture — Managing Session State
- Sync vs Async Communication — Wait or Don’t Wait
- Vertical vs Horizontal Scaling — Bigger Machine or More Machines?