AO
Back
Harvey AI Common Problems

Design Mint / Payment Scheduling System

System DesigneasyLast reported September 2025
By AceOffer · Updated September 2025 · Reported 1× across 50+ reports

Understanding the Problem

Design a system similar to Mint.com — a personal finance aggregation platform that periodically pulls transaction data from users' external bank and financial accounts. The system must schedule recurring external API calls (pull-only model, no push/webhook support from banks), handle call failures gracefully, and scale efficiently under high load across many users and accounts. Key concerns: how to schedule and trigger pulls, how to retry failed external calls, and how to partition the job queue when data volume is large.

Functional Requirements

Structured requirements coming soon. For now, see the full problem statement above and the deep-dive prompts below.

Non-Functional Requirements

Latency, throughput, availability, consistency targets — being authored.

The Set Up

Defining the Core Entities

Core entities (Request, Batch, Worker, Cache, etc.) — being authored.

The API

POST /endpoint → describe request shape GET /endpoint → describe response shape (API spec being authored)

High-Level Design

Component diagram + walkthrough mapping each functional requirement to a system flow — being authored.

Potential Deep Dives

These are the directions the interviewer is likely to push you. Each one has multiple valid solutions at different quality tiers.

1)How do you handle the queue under very high load with millions of accounts? (when: Candidate proposes a simple single queue)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

2)What happens when an external bank API call fails? How do you handle repeated failures? (when: Candidate does not address failure scenarios)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

3)Banks only support pull — how does that change your design? (when: Candidate proposes push/webhook)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

4)How do you avoid pulling the same account twice simultaneously? (when: Candidate finishes core design)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

What is Expected at Each Level?

L4 / Mid-level

Cover happy path. Clarify scope. Identify the obvious bottleneck. Pick a reasonable storage and reasonable scaling approach.

L5 / SeniorTarget

All of the above plus: explicit failure handling, durability vs latency trade-offs, choose the right batching/caching strategy, articulate why.

L6 / Staff+

All of the above plus: organizational concerns (rollout, migration, on-call), quantitative analysis, multi-region considerations, what could go wrong with the proposed solution at 10x scale.

Insider Notes

Common mistakes: Assuming push/webhook support from external banks; Designing a single global queue without partitioning, which becomes a bottleneck at scale; Not addressing failure/retry strategy for external calls; Ignoring idempotency and duplicate transaction insertion

What passers do: Clearly articulates the pull-only constraint and builds the scheduler design around it; Proposes queue partitioning strategy proactively when discussing scale; Covers failure handling with backoff, retry limits, and dead-letter queues; Discusses idempotency for transaction deduplication

Why people fail: Ignoring the pull-only constraint and proposing a push/event-driven model; Proposing a naive single-queue design without discussing partitioning; Not addressing what happens when external calls fail repeatedly

Edge cases probed: Pull-only constraint (no push/webhook from banks); High-volume queue partitioning; Persistent external call failures / degraded accounts; Duplicate transaction deduplication; Per-bank API rate limit enforcement

Alternative approaches: Cron-based scheduling (Simple to implement for small scale, but does not handle uneven load distribution, missed jobs on failure, or fine-grained retry logic well.); Push/webhook model (Not applicable here due to the pull-only constraint imposed by bank APIs, but would reduce polling overhead if available.); Stream-processing (Kafka-based) (Using Kafka topics partitioned by account for scheduling provides good throughput and replay capability, but adds operational complexity and is less natural for time-based scheduling.)

Harvey AI · System Design · Last reported September 2025
Is this helpful?