← Stripe Interview Insights

Stripe·Software Engineer·Online Assessment (OA)·Intermediate

Intermediate
Apr 2026

Summary

Stripe SWE interview with a KYC verification coding problem. Pretty domain-specific, which I wasn't expecting for a standard engineering round.

Questions Asked (1)

Q1

Given a list of business account records, each containing 6 KYC fields including a statement descriptor field, and a blocklist of generic descriptor strings, write a function that outputs VERIFIED or NOT_VERIFIED for each record. A record fails if any field is missing or empty, if the statement descriptor is outside a specific character length range, or if the descriptor matches any blocklist entry case-insensitively.

Algorithms & Data StructuresAPI & IntegrationsTechnical Trade-offs
Author's notes

The multi-rule layering is what got me.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements and edge cases, then outline a function that iterates through each record, checks for missing fields, validates the descriptor length, and performs a case-insensitive blocklist check. Emphasize efficiency (e.g., using a set for the blocklist) and discuss trade-offs like normalization (trimming whitespace) and handling of special characters.

Pro tip: Mention that you would normalize the descriptor (e.g., trim whitespace and convert to lowercase) before length and blocklist checks to avoid false negatives, and discuss how to handle Unicode characters if relevant.

1. Clarify requirements and edge cases

Ask about the exact KYC fields, the allowed length range for the descriptor, and whether the blocklist matching should consider substrings or exact matches. Also clarify how to handle whitespace and case sensitivity.

2. Design the validation logic

For each record, check that all 6 fields are present and non-empty. Then validate the statement descriptor: trim it, check its length against the allowed range, and check if it matches any blocklist entry case-insensitively.

3. Optimize for performance

Convert the blocklist to a set of lowercase strings for O(1) lookups. If the blocklist is large, consider a trie or other data structure for efficient matching.

4. Handle edge cases and return results

Decide on behavior for null/undefined fields, empty strings after trimming, and descriptors with leading/trailing spaces. Return an array of 'VERIFIED' or 'NOT_VERIFIED' corresponding to each record.

5. Discuss trade-offs and testing

Talk about time/space complexity, potential false positives/negatives, and how you would test the function with unit tests covering missing fields, boundary lengths, and blocklist matches.

Key Points to Mention

  • Case-insensitive matching: normalize both the descriptor and blocklist entries to lowercase (or use casefold) before comparison.
  • Length validation: ensure the descriptor length is within the specified range after trimming whitespace.
  • Missing field detection: check for null, undefined, or empty strings (after trimming) for all 6 fields.
  • Efficiency: use a set for the blocklist to achieve O(1) lookup per record, and consider early termination for failed records.
  • Edge cases: handle Unicode characters, leading/trailing spaces, and empty blocklist.
  • Testing: include unit tests for boundary conditions (e.g., descriptor exactly at min/max length) and blocklist matches with different cases.

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