I started with object storage and a metadata layer which felt right, but I spent way too long on the upload flow and didn't get to the ML feature extraction pipeline until they nudged me.
Start by clarifying functional and non-functional requirements, then estimate scale (billions of users, hundreds of billions of files). Design a high-level architecture covering upload, storage, metadata, indexing, and serving, then dive into key components like media processing, search, and sync, discussing trade-offs and scalability.
Pro tip: Emphasize how you would leverage Google's existing infrastructure (e.g., Colossus, Bigtable, Spanner) and highlight the importance of metadata design and indexing for fast queries at scale.
Clarify functional requirements (upload, download, browse, share, sync) and non-functional (availability, durability, latency). Estimate scale: billions of users, hundreds of billions of files, petabytes of storage, and high read/write throughput.
Outline core components: client apps, API gateway, upload service, media processing pipeline, storage layer (blob store + metadata DB), indexing services, and CDN for serving. Ensure separation of concerns and scalability.
Design metadata schema (e.g., Bigtable/Spanner) for efficient queries by date, album, face, location. Use blob storage (e.g., Colossus) for media files. Discuss sharding, replication, and consistency trade-offs.
Describe asynchronous processing for thumbnails, transcoding, and ML-based feature extraction (face, object, location). Build inverted indexes for fast search and browsing.
Design sharing via access control lists and signed URLs. Implement cross-device sync using change logs and push notifications. Serve media via CDN with caching and adaptive streaming.
AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.