← Stripe Interview Insights

Stripe·Software Engineer·Technical Phone Screen·Intermediate

IntermediatePrefer not to say
May 2026Remote

Summary

Stripe phone screen for a software engineer role, centered entirely on one multi-part coding problem about invoice reconciliation. The problem kept expanding with each sub-task and it felt like the whole interview was designed to see how far you could push a single solution before it broke.

Questions Asked (1)

Q1

Build an invoice reconciliation system: given a list of invoices and a list of payments (each with an id, amount, currency, timestamp, etc.), match payments to invoices and identify any discrepancies such as overpayments, underpayments, duplicates, or unmatched records. Then extend the solution to handle multi-currency conversion, partial payments, and refunds across three incremental parts.

System DesignData ModelingTechnical Trade-offs
Author's notes

The first part felt manageable, just matching ids and flagging mismatches.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and defining a clear data model for invoices and payments, then design a matching algorithm that handles the core cases (exact matches, over/underpayments, duplicates, unmatched). Structure your answer incrementally: first solve the basic reconciliation, then extend to multi-currency, partial payments, and refunds, discussing trade-offs and edge cases at each step.

Pro tip: Emphasize idempotency and auditability: in a payment system like Stripe, reconciliation must be deterministic and traceable. Mention using immutable ledgers and unique transaction IDs to prevent duplicate processing.

1. Clarify Requirements and Define Data Model

Ask clarifying questions about matching rules (e.g., exact amount vs. fuzzy), currency handling, and expected scale. Define schemas for Invoice and Payment with fields like id, amount, currency, timestamp, status, and references.

2. Design Core Matching Algorithm

Outline a two-pass approach: first match exact payments to invoices by amount and currency, then handle discrepancies. Use hash maps for O(n) lookup and track unmatched invoices/payments.

3. Handle Discrepancies and Edge Cases

Detect overpayments, underpayments, duplicates (same id or same amount/timestamp), and unmatched records. Define rules for each (e.g., flag for review, auto-apply credit).

4. Extend to Multi-Currency, Partial Payments, and Refunds

Introduce currency conversion using exchange rates at transaction time, support partial payments by tracking remaining balance, and model refunds as negative payments linked to original payments.

5. Discuss Trade-offs and Scalability

Compare batch vs. streaming reconciliation, discuss consistency guarantees, and propose indexing strategies for large datasets. Mention idempotency and audit trails.

Key Points to Mention

  • Data modeling: use unique IDs, timestamps, and immutable records for auditability.
  • Matching algorithm: two-pass approach with hash maps for efficiency, handling exact and fuzzy matches.
  • Discrepancy handling: define clear rules for over/underpayments, duplicates, and unmatched items.
  • Multi-currency: convert using historical exchange rates and store both original and converted amounts.
  • Partial payments and refunds: track remaining balances and link refunds to original payments.
  • Scalability and trade-offs: batch vs. real-time, indexing, idempotency, and consistency.

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