System Design Template - amitbhilagude/userfullinks GitHub Wiki

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