System Design Problems

1. URL Shortener

Requirements

Design

Trade-offs


2. Chat Application

Requirements

Design

Trade-offs


3. Rate Limiter

Requirements

Design

Trade-offs


4. News Feed

Requirements

Design

Trade-offs


5. File Storage System

Requirements

Design

Trade-offs


6. Ride Hailing System

Requirements

Design

Trade-offs


7. Notification System

Requirements

Design

Trade-offs


8. Real-time Analytics

Requirements

Design

Trade-offs


9. Feature Flags

Requirements

Design

Trade-offs


10. Video Streaming Platform

Requirements

Design

Trade-offs


11. Search Autocomplete

Requirements

Design

Trade-offs


12. API Gateway

Requirements

Design

Trade-offs


Common Patterns & Snippets

Idempotent Endpoint

def process_request(request_id, data):
    if processed(request_id):
        return get_stored_result(request_id)
    
    result = execute_business_logic(data)
    store_result(request_id, result)
    return result

Retry with Jitter

import random
import time

def retry_with_jitter(func, max_retries=3, base_delay=1):
    for attempt in range(max_retries):
        try:
            return func()
        except Exception as e:
            if attempt == max_retries - 1:
                raise e
            
            delay = base_delay * (2 ** attempt) + random.uniform(0, 1)
            time.sleep(delay)

Outbox Pattern

def process_order(order_data):
    with transaction():
        # Business logic
        order = create_order(order_data)
        
        # Store event in outbox
        outbox_event = OutboxEvent(
            event_type="order_created",
            payload=order.to_dict(),
            status="pending"
        )
        db.session.add(outbox_event)
        db.session.commit()

# Background worker processes outbox
def process_outbox():
    events = OutboxEvent.query.filter_by(status="pending").limit(100)
    for event in events:
        publish_event(event.payload)
        event.status = "sent"
        db.session.commit()

Design Decision Framework

1. Functional Requirements

2. Non-Functional Requirements

3. Constraints

4. Trade-offs Analysis

5. Estimation