System Design Template - amitbhilagude/userfullinks GitHub Wiki
- Question about the scope of system design.
- Draw Architectural Diagram with Very high-level modules and required cloud offering
- Object-Oriented Design with detailed component designs like Class Digram, Database Schema design, each API endpoint
- Both
- Start Capturing Requirements.
- Functional
- Project-specific
- Non-Functional
- Expected Users?
- How users are distributed? Are they Geo-Distributed?
- What SLA, RTO, and RPO? DR scenarios? Active-Active or Active-Passive?
- Storage Choice?
- Expected Storage size, Forcast, Geo-Replication, and Backup requirements?
- Microsoft's well-architected framework
- Reliability
- DR?
- Auto healing and learning from Failure
- High availability? Availability set and Availablity zone.
- Security
- Security in Depth with all layered security.
- Any Goverence compliance required for country-specific requirements e.g. GDPR
- Performance efficient
- Autoscaling and load balancing
- Network performance like cache-aside pattern and geo-regional deployment
- Choose storage plan and plan partitioning
- Web Application Performance
- On-prem with high-speed
- Operation excellence
- DevOps: IaaC
- Core, Infrastructure and Application level monitoring
- Testing strategy
- Cost Optimised
- Choose the right plan
- Pay as a go
- Serverless computing
- Budget calculator
- Best Patterns(Object Oriented): Domain-Driven Design or Model-Driven Design
- Domain-Driven Design:
- BoundedContext, Entity, Aggregate, repositories, etc.
- Architecture Style: Monolith or Microservices or Event-driven or Web-queue-worker or Big data or Big Compute
- Architecture Pattern: Layers or Clean Architecture(Object Oriented)
- N-Tier(UI, Business Layer, Data Layer)
- Clean Architecture(Web, Core, Infrastructure, SharedKernel)
- Architecture Pattern Implementation
- Deep-dive in each Project
- Web: Define API Endpoints.
- Core: Business logic. We will have a more detailed class diagram, Relationships, etc.
- Infrastructure: Finalasing Storage
- SharedKernel: Logging Framework, Authentication Implementation, Guard Clauses, Extensions
- Design Patterns: Strategy pattern, Repository pattern, Adapter pattern, State pattern.
- SOLID Principles
- Cloud Decisions
- Storage Options
- Database: Structured DB: SQL, Non-Structured DB: Cosmos DB.
- Hosting
- Hosting Service: Paas Service like App service, Azure function, Service Fabric, AKS.
- Load balancing: Application Gateway, Azure Front-door, Standard Load balancer, Traffic Manager.
- Security: WAF, Authentication\Authorisations(OpenIdConnect, OAuth 2.0).
- Monitoring
- App Insights
- API endpoints and Object-Oriented design
- API Endpoints
- Database schema
- Class diagram
- Define the Classes, Inheritance, Interfaces, and Design patterns
- Production readiness and Code Quality
- Code review
- Unit Testing Automation
- Integration Testing Automation
- Functional Testing Automation
- Security Checks and Quality Gates as part of Build pipeline e.g. Sonarqube
- Pen Testing
- Load/performance Testing
- Assumption, Risk, and area of improvements
- Requirement Traceability Matrix