← SoFi Interview Insights

SoFi·Software Engineer·Onsite - System Design / Architecture·Senior

SeniorPrefer not to say
Jun 2026

Summary

System design round at SoFi for a software engineer role. One meaty question that covered a lot of ground, from ingestion to fan-out to retry logic. Felt like a senior-level bar even if the title didn't say so explicitly.

Questions Asked (1)

Q1

Design a system that notifies users when market prices change for the symbols they're tracking. Users have watchlists, you have access to a third-party data vendor with both REST and WebSocket APIs, and you need to push near-real-time alerts via mobile, email, or in-app notifications.

System DesignAPI & IntegrationsTechnical Trade-offs
Author's notes

This question has a lot of layers and I kind of learned that the hard way.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then design a high-level architecture that ingests real-time data from the vendor's WebSocket, processes it against user watchlists, and dispatches notifications through multiple channels. Focus on decoupling components with message queues, handling failures gracefully, and optimizing for low latency and high throughput.

Pro tip: Emphasize the importance of idempotency and deduplication in notification delivery to avoid spamming users, and discuss how to handle vendor WebSocket disconnections with automatic reconnection and state recovery.

1. Clarify Requirements and Scale

Ask questions to understand the number of users, watchlist sizes, update frequency, latency expectations, and notification preferences. This will guide architectural decisions.

2. High-Level Architecture

Outline the main components: data ingestion from vendor WebSocket, a processing service that matches price changes to user watchlists, a notification service that sends alerts via mobile, email, and in-app, and a database for user data and watchlists.

3. Deep Dive into Key Components

Detail the data ingestion (handling reconnects, backpressure), matching logic (efficiently checking many watchlists), and notification dispatch (queuing, retries, rate limiting). Discuss trade-offs between push vs. pull, and batch vs. real-time processing.

4. Scalability and Reliability

Explain how to scale horizontally (e.g., partitioning by symbol or user), ensure fault tolerance (redundant consumers, dead-letter queues), and maintain low latency (in-memory caches, efficient data structures).

5. Wrap Up and Trade-offs

Summarize the design, reiterate key trade-offs (e.g., consistency vs. latency, cost vs. performance), and suggest potential improvements or monitoring strategies.

Key Points to Mention

  • Use of WebSocket for real-time data ingestion with fallback to REST for historical or missed data.
  • Message queue (e.g., Kafka) to decouple ingestion, processing, and notification for scalability and reliability.
  • Efficient matching of price updates to user watchlists using inverted indexes or caching.
  • Notification delivery guarantees: at-least-once with idempotency, retries, and dead-letter queues.
  • User preference management and rate limiting to prevent notification fatigue.
  • Monitoring and alerting for system health, latency, and vendor API issues.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.