
Study high-level designs for geofencing, instant messaging, and mobile push notification systems, covering battery efficiency, traffic analysis, caching, pull and push data updates, third-party integrations via api or webhooks.
Caching geofences handles millions of SDK requests by serving data from the cache, boosting performance and reducing backend traffic for the geofencing service.
Explore how a webhook delivery pipeline uses an events service, a message queue, and a deliver service to retry failed requests with exponential backoff, decoupled queues, and dead-letter handling.
Post production note on design...
Explore a messaging solution that supports one-to-one and group messaging, presence, read and delivery status, file sharing, location sharing, and audio/video calls across mobile, desktop, and web clients.
Explore a backend messaging design where an api routes client requests to messaging, delivery, and acknowledgement services, stores read/delivery status in a messaging database, and supports conversations, contacts, and groups.
Explore time-range sharding for message systems by partitioning data monthly. Analyze read/write traffic distribution and capacity planning for current-month bottlenecks when events alter data volume.
Learn hashing-based sharding using a conversation id as the partition key and modulo-n distribution for data. Ensure that single-conversation reads and writes stay on a single shard, reducing cross-shard queries.
Explore how replication enhances fault tolerance in the message history database, preventing data loss by using primary/secondary or multi-master setups and promoting a secondary to primary during failures.
Store message history on the client to scale for millions of users and enable local or cloud backups, while the backend stores messages temporarily and transfers them between users.
Explore the design of a mobile push notification service, defining user segments by activity, location, or VIP attributes, monitoring statuses like sent, clicked, failed, and routing to push providers.
Explore how a push notification system orchestrates backend, operators, SDKs, and providers to define segments, send targeted messages, and track delivery and engagement.
Define an operator-friendly high level design that routes backend requests via an api service to applications, segmentation, delivery, and notification services.
Explore how segmentation data grows with per-device custom attributes and location history, and calculate storage needs for 100 million devices.
Analyze segmentation writes for static device properties like the device operating system, app version, and country; contrast dynamic last active time and location history with small per-request data.
Operators define segmentation criteria with multiple conditions, store location data in a separate database via vertical partitioning to improve indexing and scalability, while the application layer becomes more complex.
Apply rate limiting to protect system availability by enforcing per-user API limits and using tokens or API keys to identify users, returning 429 when exceeded.
Learn how a decoupled notification and delivery system uses asynchronous messaging to meet high throughput and availability. Multiple service instances publish to a queue, enabling parallel processing and fault tolerance.
System design is part of the technical interview process in some companies. It is often a brainstorming session between the interviewer and the interviewee about the design of a software system.
Format of the Course
In this course, we study the design of a set of selected software systems with a top-down approach. In each case, we start by defining the requirements, then do a high level design of the system, and then design some of the subsystems.
The discussions are driven by questions. After each question, you can pause the video and give your own answer to practice for system design interviews. After each question, I give an answer based on my opinion. Since I intent to teach the concept being discussed, my answer might be longer than a regular answer given in an interview.
Design questions might be open-ended and might have more than one answer.
For the efficiency of the course, and not to talk about the same concept again and again, each case will include questions on selected concepts.
Concepts and Techniques
During this journey, you will encounter both domain specific questions and questions on several design techniques and concepts, such as:
High Level Design
Battery Efficiency
Request Traffic Analysis
Data Analysis
Stateless Services
Caching
Sharding
Fast Data Retrieval
Webhooks
WebSocket
Data Management
Preventing Overload
...