Loading...
Loading...
Staff · 50 min
Also asked as: GitHub notifications, Slack activity feed, Linear inbox, Facebook notifications, Jira notifications.
Read it once, then start the timer and work without scrolling.
Design a cross-channel notification center that delivers in-app, push, and email notifications with a consistent read state across every device a user owns.
Everything below is a model answer. You will get far more out of this drill by attempting it cold first — set the timer, talk through it out loud, and only then compare.
A 50-minute phase plan you can practise against a clock.
Interactive · Drill rehearsal timer
6:00
Time remaining in Clarify and scope.
What you should establish before drawing a single box.
Architecture, data, interfaces, and optimisations — the RADIO body.
The half of the answer most candidates skip entirely.
Naming how the system breaks, and what the user sees when it does, is the cheapest way to signal production experience. Work through these before the interviewer has to ask.
The interviewer will challenge you. Rehearse the concession, not just the defence.
Interviewer
This is three systems — in-app, push, email — each with its own delivery semantics. Why not let each team own their own channel and skip the coordination layer entirely?
Model response
Decentralizing would ship faster and each team would move independently, which is a real benefit and the reason organizations end up there naturally. The thing it structurally cannot deliver is shared read state and shared rate limiting, and those are precisely what the user experiences. If each channel owns its own state, a user who reads on their phone still gets an email an hour later, and there is no place in the system that knows they have already received four notifications this minute. Those are not polish issues — they are what drives people to turn everything off. So my line is that fan-out, preference resolution, dedupe, and read state must be one service, while rendering and provider integration per channel can absolutely stay with the owning teams. Centralize the decision, distribute the delivery.
Interviewer
Server-authoritative read state means a round trip for every mark-read. That will feel sluggish compared to just tracking it locally.
Model response
The latency concern is right and I would not make the user wait on the network to see an item dim — that is optimistic UI and it is non-negotiable. What I am rejecting is client-authoritative, not optimistic. The distinction matters when devices disagree: if the client is the authority, a phone that was offline while you cleared your inbox on desktop will happily resurrect the badge when it reconnects, and there is no principled way to resolve it. With server authority the reconciliation rule is trivial: server wins, earliest readAt wins for concurrent marks. So the user sees an instant local update and never sees the round trip, but the truth converges to one place. If this were a single-device product I would keep read state local and skip the whole mechanism.
Interviewer
You are suppressing push based on presence. Presence is unreliable — a laptop that went to sleep still looks present. You will drop notifications people needed.
Model response
Presence is genuinely unreliable and a naive suppression rule does drop things, particularly with sleeping laptops and backgrounded mobile tabs. That is why suppression should be a delay rather than a cancellation. The rule I would implement is: if a device reports active presence within the last thirty seconds, hold the push and re-evaluate after a couple of minutes; if the notification is still unread by then, send it regardless of what presence claims. Presence being wrong now costs a two-minute delay rather than a lost notification. I would also exclude high-priority types from suppression entirely — an on-call page or a security alert should never be delayed on a heuristic. And I would monitor it directly: the metric is notifications that stayed unread past the suppression window, and if that number is high the heuristic is not earning its place.
Interviewer
A full notification-type-by-channel preference matrix is a lot of product surface. Most users never open settings. You are building a configuration system for a handful of power users.
Model response
The adoption data almost certainly supports you — the long tail of preference toggles goes largely unused, and a matrix UI is a genuine maintenance burden with its own migration problems every time a notification type is added. Where I would push back is that the matrix has two distinct audiences. Individual users mostly do not touch it, but workspace administrators in an enterprise context absolutely do, and 'we cannot turn off this notification type org-wide' is a real deal-blocker in sales conversations. The compromise I would ship first is a small set of presets — all, important only, mentions only, none — backed by the full matrix underneath, with the granular UI exposed only in an advanced section. That way the data model supports the enterprise ask without the default experience becoming a control panel, and if the presets turn out to be sufficient we simply never build the advanced UI.
Specific signals an interviewer is listening for on this prompt.
Turn one attempt into retained skill.