- How many users are we designing for? (expected scale)
- Is the workload read-heavy or write-heavy?
- What data can we never lose? (durability constraints)
- How fast must the system feel? (latency, perceived performance)
- What consistency guarantees do we need?
- What are the storage and retention requirements for photos?
- Are there special features (sharing, comments, stories, editing)?
- Are third-party integrations required (CDNs, authentication providers)?
- What are the failure and recovery expectations (RTO/RPO)?
- Any compliance, privacy, or moderation requirements?

How to convert answers into architecture decisions
- Define the scope and prioritize the system’s non-functional requirements (scale, latency, durability).
- Map each requirement to a concrete component or pattern:
- Read-heavy: introduce caches (in-memory, CDN) and read replicas.
- Strong delete consistency: ensure synchronous operations or employ distributed transactions for deletes.
- Large media storage and retention: use object storage (S3-style) with lifecycle rules.
- Low latency perceived by users: place static media behind a CDN and use edge caching.
- For each component you propose, explicitly state which interview requirement it satisfies and what trade-offs it introduces.
- Reads dominate → Cache layer (reduce DB load, faster responses). Use TTLs and invalidation strategies tailored to freshness requirements.
- Strong consistency for deletes → enforce synchronous writes to the canonical datastore or implement a delete-confirmation workflow.
- Large photo storage with infrequent access → object storage + lifecycle tiering (hot to cold), and serve through CDN for global performance.
- High availability and low RTO → multi-region replication, automated failover, and frequent backups.

- Verbalize assumptions and ask for confirmation. Example: “I’ll assume 10M monthly active users unless you say otherwise.”
- Tie every architecture decision back to a requirement. This shows intentional design rather than guesswork.
- Sketch a high-level diagram only after you’ve solidified the main constraints.
- Discuss trade-offs and alternative approaches briefly (cost, complexity, latency).
- If time permits, call out edge cases (data retention, abuse detection, rate limiting).
- Designing Data-Intensive Applications — Concepts on consistency and durability
- What is a CDN? (Cloudflare) — CDN basics and benefits
- Object storage overview (AWS S3) — Photo storage patterns
Begin every design discussion by eliciting requirements. Use those answers as justification for each major architectural choice you make during the rest of the design.