Interview guides · Super.Money
Super.Money Software Engineer Interview Guide
Super.Money Software Engineer interview guide: reported rounds, questions and how candidates describe the process.
The 60-second brief
Super.Money (operated by GetClarity Fintech Services) is a high-growth fintech platform built to modernize consumer finance through high-throughput UPI payments, credit products, and interactive financial rewards. As a Software Engineer at Super.Money, you will build and maintain core, high-availability microservices capable of handling massive transactional spikes without sacrificing reliability or sub-100ms response times. Engineers in this role own critical backend and platform components—ranging from real-time leaderboard systems, polling infrastructure, and event-driven pub-sub frameworks to automated data migration tools and resilient API gateways.
This guide is scoped to a Software Engineer candidate at Super.Money.
Focus areas
- System Design
- Logging Systems (Sync/Async, Levels, Sinks)
- Machine Coding / LLD Implementation
The Super.Money interview process
Super.Money candidates report 4 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.
Online Assessment
Initial technical round where candidates complete automated testing and coding challenges.
What to demonstrate
- Initial technical round where candidates complete automated testing and coding challenges
- Depth in System Design
How to prepare
- Answer aloud and timed: Design a Logger System supporting synchronous and asynchronous logging, multiple configurable output sinks (e.g., console, file, DB), thread safety, custom log levels, and high-throughput execution.
- Answer aloud and timed: Build a fully functional, in-memory Pub-Sub Library supporting dynamic creation/deletion of topics, parallel publishing, thread safety, consumer offset management, exception handling, and configurable retention/replay mechanisms.
Hands-on Coding Challenges
Candidates engage in practical coding tasks to demonstrate their coding speed and quality.
What to demonstrate
- Candidates engage in practical coding tasks to demonstrate their coding speed and quality
- Depth in System Design
How to prepare
- Answer aloud and timed: Design an interactive Room Booking System focusing on capacity management, concurrent reservation locking, search filters, and edge-case handling.
- Answer aloud and timed: Design Google Calendar micro-classes and endpoints, handling recurring events, time zone conversions, conflict resolution, and notification scheduling.
Interactive Design Sessions
Candidates participate in system design discussions to showcase architectural thinking.
What to demonstrate
- Candidates participate in system design discussions to showcase architectural thinking
- Depth in System Design
How to prepare
- Answer aloud and timed: Design an extensible LRU and LFU Cache module with custom evictions, support for high concurrency, and parameterized retention policies.
- Answer aloud and timed: Given a complete binary tree structured in an array (using a parent-child relationship where
parent = child / 2), find the position of the last node in sub-linear ( or better) time.
Hiring Manager Conversations
Final discussions with the hiring manager to evaluate overall fit and readiness.
What to demonstrate
- Final discussions with the hiring manager to evaluate overall fit and readiness
- Depth in System Design
How to prepare
- Prepare two projects you led end to end, each with the decision you owned and what it cost.
- Have three questions about the team's roadmap and how success is measured in the first six months.
Where candidates lose points
Prioritize Executable Object-Oriented Code
During machine coding, prioritize a running end-to-end program with simple logic over an overly engineered, incomplete application. Ensure your code compiles and passes baseline driver tests.
Master Concurrency Primitives
Be ready to explain and demonstrate thread-safe mechanics, reentrant locks, and atomic operations in your machine coding and LLD interviews.
Structure Your SQL and Schema Explanations
When answering database questions, explicitly state your indexing strategy, dynamic partitioning choices, and query trade-offs before writing your raw SQL queries.
Do not skip edge cases in machine coding
Candidates are frequently rejected for failing to handle input validation, thread-safety conditions, or unexpected exception states in their submission.
Questions & practice
Build a fully functional, in-memory Pub-Sub Library supporting dynamic creation/deletion of topics, parallel p
Medium · Machine Coding & Low-Level Design (LLD)
Build a fully functional, in-memory Pub-Sub Library supporting dynamic creation/deletion of topics, parallel publishing, thread safety, consumer offset management, exception handling, and configurable retention/replay mechanisms.
Approach
- Say what the runtime actually does before reasoning about the code.
- Name what is shared across threads and what owns each piece of state.
- Identify the window where an invariant is briefly untrue.
- Distinguish a value from a reference to it, and say which one you handed out.
Follow-up
- What happens if two callers reach this at the same time?
- Where could this allocate more than you expect?
Given a complete binary tree structured in an array (using a parent-child relationship where `parent = child /
Medium · Data Structures & Algorithms (DSA)
Given a complete binary tree structured in an array (using a parent-child relationship where parent = child / 2), find the position of the last node in sub-linear ( or better) time.
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Given an array of stock costs, their associated returns, and a fixed initial capital limit, calculate the maxi
Medium · Data Structures & Algorithms (DSA)
Given an array of stock costs, their associated returns, and a fixed initial capital limit, calculate the maximum possible profit (a variant of the budget-constrained knapsack problem solvable via dynamic programming or priority queues).
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Find the -th Smallest Pair Distance among an array of integers using binary search on answer spaces combine
Medium · Data Structures & Algorithms (DSA)
Find the -th Smallest Pair Distance among an array of integers using binary search on answer spaces combined with a two-pointer scan.
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Given a string representation of a non-negative integer, Remove K Digits to yield the smallest possible numeri
Medium · Data Structures & Algorithms (DSA)
Given a string representation of a non-negative integer, Remove K Digits to yield the smallest possible numerical value.
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Given an array, find the Next Greater Element variation while maintaining optimized time and space complexity.
Medium · Data Structures & Algorithms (DSA)
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
How do you manage concurrent write operations on limited financial assets (e.g., flash deals, inventory, walle
Medium · Execution, Operational & Behavioral Scen
How do you manage concurrent write operations on limited financial assets (e.g., flash deals, inventory, wallet credits) to prevent race conditions and over-allocation?
Approach
- Say what the runtime actually does before reasoning about the code.
- Name what is shared across threads and what owns each piece of state.
- Identify the window where an invariant is briefly untrue.
- Distinguish a value from a reference to it, and say which one you handed out.
Follow-up
- What happens if two callers reach this at the same time?
- Where could this allocate more than you expect?
Design a relational and non-relational database schema for a multi-tenant payment or reward system, detailing
Medium · High-Level System Design (HLD) & Databas
Design a relational and non-relational database schema for a multi-tenant payment or reward system, detailing index placement, dynamic partitioning, and join query optimizations.
Approach
- Name the grain you start from and join outward from it.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which index the query would use, and what makes it unusable.
- Handle the rows that do not match: that is usually the actual question.
Follow-up
- How does the query change if that join becomes one-to-many?
- What happens to this when the table is ten times larger?
Stop tag and share joins from fanning out a page
Medium · join fan-out · semi-joins · many-to-many
resource_tag is (resource_id, tag_id) with PK (resource_id, tag_id); resource_share is (resource_id, shared_with_user_id, permission). The tagged-and-shared listing inner-joins resource to both, filters tenant_id, tag_id = ANY(3, orders by updated_at DESC and takes 50. Pages come back with fewer than 50 distinct resources and the total in the header is far too high. Explain the row multiplication, rewrite both the page query and the count query so each is correct, and name the index each one needs. PostgreSQL 16.
Approach
- Do the arithmetic against the predicates that are actually there. An inner join emits one row per matching child row, and both joins are filtered: tag_id = ANY(3 admits one user's share rows. So a resource holding three of the requested tags and shared with $3 once yields three rows, not one — the multiplier is its count of matching tags times its share rows for that single user, and that second factor is 1 unless the table admits duplicate (resource_id, shared_with_user_id) pairs. LIMIT 50 then limits rows rather than resources, and COUNT(*) counts pairs — the header is the product, not the population.
- Reject DISTINCT as the fix. It deduplicates after the product has been built, so the planner must materialise and sort the fanned-out set before the LIMIT can apply, and it leaves any SUM or AVG in the same select list wrong.
- Rewrite both filters as semi-joins, keeping resource as the only row source: AND EXISTS (SELECT 1 FROM resource_tag rt WHERE rt.resource_id = r.resource_id AND rt.tag_id = ANY($2)) and the same shape against resource_share. A semi-join stops at the first match per resource and preserves the driving index order, so ORDER BY updated_at DESC, resource_id DESC LIMIT 50 still stops after 50 rows.
- Count with the same predicates and no join at all: SELECT count(*) FROM resource r WHERE r.tenant_id = $1 AND r.status = 'active' AND EXISTS (...) AND EXISTS (...). Nothing multiplies a resource, so the number is the population.
Follow-up
- The filter changes from 'any of these tags' to 'all of these tags'. Rewrite it and state what it costs relative to the ANY form.
- A resource can be shared with the same user twice under different permissions. Does your count change, and should it?
Design a Logger System supporting synchronous and asynchronous logging, multiple configurable output sinks (e.
Medium · Machine Coding & Low-Level Design (LLD)
Design a Logger System supporting synchronous and asynchronous logging, multiple configurable output sinks (e.g., console, file, DB), thread safety, custom log levels, and high-throughput execution.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Design an interactive Room Booking System focusing on capacity management, concurrent reservation locking, sea
Medium · Machine Coding & Low-Level Design (LLD)
Design an interactive Room Booking System focusing on capacity management, concurrent reservation locking, search filters, and edge-case handling.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Design an extensible LRU and LFU Cache module with custom evictions, support for high concurrency, and paramet
Medium · Machine Coding & Low-Level Design (LLD)
Design an extensible LRU and LFU Cache module with custom evictions, support for high concurrency, and parameterized retention policies.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Design a custom Min Stack structure that supports push, pop, top, and retrieving the minimum element in
Medium · Data Structures & Algorithms (DSA)
Design a custom Min Stack structure that supports push, pop, top, and retrieving the minimum element in constant time.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Design a Real-Time Leaderboard and Voting System for an IPL fantasy tournament supporting high-concurrency use
Medium · High-Level System Design (HLD) & Databas
Design a Real-Time Leaderboard and Voting System for an IPL fantasy tournament supporting high-concurrency user predictions, rapid score updates, automated milestone tracking, and user notifications.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Design the backend architecture for an Online Chess System, focusing on real-time matchmaking algorithms, conc
Medium · High-Level System Design (HLD) & Databas
Design the backend architecture for an Online Chess System, focusing on real-time matchmaking algorithms, concurrent player queues, dynamic pairing mechanisms, and state persistence.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Design a scalable Cron Scheduler system capable of scheduling, persisting, and executing millions of distribut
Medium · High-Level System Design (HLD) & Databas
Design a scalable Cron Scheduler system capable of scheduling, persisting, and executing millions of distributed recurring tasks reliably.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Given a high-traffic SQL database, formulate an architecture and execution plan to perform data migration to a
Medium · High-Level System Design (HLD) & Databas
Given a high-traffic SQL database, formulate an architecture and execution plan to perform data migration to a new storage engine with minimal to zero downtime.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
You observe an API SLA breach where endpoint latency exceeds 100ms during peak transaction hours. Walk through
Medium · Execution, Operational & Behavioral Scen
You observe an API SLA breach where endpoint latency exceeds 100ms during peak transaction hours. Walk through your step-by-step diagnostic strategy, triage workflow, immediate mitigation tactics, and long-term fix.
Approach
- Say who the caller is and what they do when the call fails halfway.
- Define the identity of a request so a retry cannot double-apply it.
- Separate accepted, pending, failed and confirmed; they are different facts.
- Design the error taxonomy before the success shape; callers branch on it.
Follow-up
- What happens if the caller retries after a timeout?
- How does a client discover it is on an old version of this contract?
Describe how you model complex business processes using state machines, workflow engines (e.g., Temporal), and
Medium · Execution, Operational & Behavioral Scen
Describe how you model complex business processes using state machines, workflow engines (e.g., Temporal), and transactional sagas in a microservice environment.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Edge instances grow 400 MB per hour until the nightly restart
Hard · memory leak · heap analysis · metric cardinality
Edge API instances start at 700 MB resident and grow about 400 MB/hour; a nightly rolling restart has hidden it for weeks. Growth continues unchanged when request rate halves overnight, p99 degrades in the last hours before an instance is recycled, and heap used immediately after a forced full GC rises monotonically. The service holds no product state. Name the discriminating measurement that separates the plausible causes, give the most likely cause, and give the fix and how you would verify it.
Approach
- Separate resident memory from live heap first, because they fail differently. Resident size can grow from fragmentation, native buffers or thread stacks while the heap is flat; heap used after a full GC rising monotonically is the measurement that says objects are reachable and not being released. You already have it, so this is retention, not fragmentation, and that closes off half the candidate list.
- Use the rate's independence from traffic as the discriminator. Growth that continues at half the request rate rules out per-request objects that are merely slow to collect and points at a structure that grows with distinct values observed rather than with call volume. Write the candidates that have that property: a metrics registry keyed on a high-cardinality label, an unevicted cache, an interner, a per-key lock map.
- Take two heap snapshots an hour apart and diff by retained size, reading the dominator tree, not by allocation count or instance count. Expect one root holding a map with millions of entries, then follow the reference chain to the code that inserts and never removes. Allocation profilers point at churn, which is the wrong signal here.
- The candidate that fits this service is an observability label carrying an identifier, such as a request path recorded before templating so that /v1/resources/48213 becomes its own metric series. That grows with distinct ids seen, is independent of rate, and explains the late p99 degradation, since GC cost rises with the size of the live set.
Follow-up
- Post-GC heap is now flat but resident size still creeps. What are you looking at, and does it matter?
- How would you have detected this before an OOM, given the nightly restart masked the trend?
Suggested practice checklist
Built from the rounds and topics Super.Money candidates report.
Day 1 — Map the Super.Money loop
- Write out the reported sequence: Online Assessment, Hands-on Coding Challenges, Interactive Design Sessions, Hiring Manager Conversations.
- For each round, write one sentence on what it is judging, from the description above, and mark the one you are least ready for.
Deliverable: A one-page map of the 4 reported rounds, with the weakest marked.
Day 2 — Work System Design
- Spend the session on System Design, which Super.Money candidates report being tested on.
- Write one worked example in System Design and time yourself on it.
Deliverable: One timed worked example in System Design.
Day 3 — Work Logging Systems (Sync/Async, Levels, Sinks)
- Spend the session on Logging Systems (Sync/Async, Levels, Sinks), which Super.Money candidates report being tested on.
- Write one worked example in Logging Systems (Sync/Async, Levels, Sinks) and time yourself on it.
Deliverable: One timed worked example in Logging Systems (Sync/Async, Levels, Sinks).
Day 4 — Work Machine Coding / LLD Implementation
- Spend the session on Machine Coding / LLD Implementation, which Super.Money candidates report being tested on.
- Write one worked example in Machine Coding / LLD Implementation and time yourself on it.
Deliverable: One timed worked example in Machine Coding / LLD Implementation.
Day 5 — Answer out loud: Machine Coding & Low-Level Design (LLD)
- Answer aloud, timed: Design a Logger System supporting synchronous and asynchronous logging, multiple configurable output sinks (e.g., console, file, DB), thread safety, custom log levels, and high-throughput execution.
- Answer aloud, timed: Build a fully functional, in-memory Pub-Sub Library supporting dynamic creation/deletion of topics, parallel publishing, thread safety, consumer offset management, exception handling, and configurable retention/replay mechanisms.
Deliverable: Spoken answers to 2 reported Machine Coding & Low-Level Design (LLD) question(s), under time.
Day 6 — Answer out loud: Data Structures & Algorithms (DSA)
- Answer aloud, timed: Given a complete binary tree structured in an array (using a parent-child relationship where
parent = child / 2), find the position of the last node in sub-linear ( or better) time. - Answer aloud, timed: Given an array of stock costs, their associated returns, and a fixed initial capital limit, calculate the maximum possible profit (a variant of the budget-constrained knapsack problem solvable via dynamic programming or priority queues).
Deliverable: Spoken answers to 2 reported Data Structures & Algorithms (DSA) question(s), under time.
Day 7 — Answer out loud: High-Level System Design (HLD) & Database Architecture
- Answer aloud, timed: Design a Real-Time Leaderboard and Voting System for an IPL fantasy tournament supporting high-concurrency user predictions, rapid score updates, automated milestone tracking, and user notifications.
- Answer aloud, timed: Design the backend architecture for an Online Chess System, focusing on real-time matchmaking algorithms, concurrent player queues, dynamic pairing mechanisms, and state persistence.
Deliverable: Spoken answers to 2 reported High-Level System Design (HLD) & Database Architecture question(s), under time.
Behavioural preparation
Behavioural rounds judge the decision you made and what it cost.
Design Google Calendar micro-classes and endpoints, handling recurring events, time zone conversions, conflict
Medium · Machine Coding & Low-Level Design (LLD)
Design Google Calendar micro-classes and endpoints, handling recurring events, time zone conversions, conflict resolution, and notification scheduling.
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
Walk me through a logical puzzle (e.g., dynamic seating arrangements under constraint rules) and explain your
Medium · Execution, Operational & Behavioral Scen
Walk me through a logical puzzle (e.g., dynamic seating arrangements under constraint rules) and explain your systematic path to finding the optimal arrangement.
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
Estimate work you have never done and defend the range
Hard · estimation · backfills · expand-contract
You are asked to estimate a change you have never attempted: add a column to a 100-million-row table, populate it, move reads across, and drop the old shape. Give a range with the assumptions that generate it, including batch size, the signal your backfill throttles on, and wall-clock hours, and name the three unknowns that would move the number most. Then describe a real estimate you gave under comparable ignorance: how you expressed its uncertainty, what you committed to, and how wrong you turned out to be.
Approach
- Decompose into independently deployable steps before estimating anything: add the column nullable, write both shapes, backfill in batches, verify, move reads, stop writing the old shape, drop it. That is four deploys spread over days, and the calendar estimate is dominated by them rather than by the loop's runtime.
- Do the arithmetic aloud for the part that has arithmetic in it: batch size times number of batches times per-batch duration, at a write rate the primary can absorb alongside roughly 1.2k writes per second of production traffic. The loop is throttled by replication lag and lock waits, not by how fast it can issue statements.
- Price the schema step by its lock rather than its statement duration. In PostgreSQL an ALTER TABLE taking ACCESS EXCLUSIVE waits for every open transaction on that table while later queries queue behind it, so a millisecond change issued during a thirty-second analytics query stalls that table for thirty seconds. Adding a nullable column with a non-volatile default avoids a rewrite from version 11; a new index wants CREATE INDEX CONCURRENTLY, which cannot run inside a transaction block and leaves an invalid index behind if it fails.
- Express the answer as a range whose endpoints each trace to a stated assumption, then name the cheapest experiment that collapses it, which is almost always running one real batch against the real table and multiplying.
Follow-up
- How do you verify the backfill genuinely finished, given rows written by production traffic while it ran?
- Where does the backfill resume from after a worker is killed mid-batch, and what makes that resume point trustworthy?