Design a Personal Bookmark Sync Service
We want to build a service that lets users save web bookmarks from any of their devices and have them automatically synchronized across all of their other devices. The service should expose a simple API for adding, removing, and listing bookmarks, and handle the background sync process.
This brief is incomplete on purpose, as it would be in a real interview. Ask the interviewer about the users, the features, the targets and the traffic — whatever you uncover is added below.
- Users can add a new bookmark (URL plus optional title and tags) from any device.
- Users can delete an existing bookmark from any device and have the deletion propagate to all other devices.
- When a device comes online, it receives the latest set of bookmarks for the user.
- List bookmarks
- Retention policy
- Sync latency
- High availability
- Daily active users
- Operations per user
- Bookmark record size
- high‑level component diagram
- API definition for add, delete, list, and sync endpoints
- data model sketch (tables/collections)
- sync flow description (client‑server interaction)
- failure‑handling strategy for device offline scenarios
The candidate defines concise request/response schemas for add, delete, list, and sync, covering required fields, pagination, and error handling.
A logical schema that stores bookmarks efficiently, supports tag queries, and can scale with the stated record size and volume.
Explanation of how changes are captured, propagated (e.g., event log or version vector), and reconciled on devices, including conflict resolution.
Design includes replication, failover, and handling of partial outages without data loss.
Shows awareness of read/write patterns, partitioning/sharding strategy, and capacity planning for the given scale.
Justifies choices (e.g., push notifications, long polling, or client‑side polling) that meet the low sync latency requirement.
Every functional requirement in the brief is visibly served by something on the board, and the non-functional targets are addressed rather than ignored.
Components are labelled, data flows are drawn as connections between them, and the direction of each flow is unambiguous.
Focus on the high‑level architecture, data model, API design, and the sync flow. Do not dive into UI implementation details, authentication mechanisms, or third‑party browser extensions.
- Views
- 2