Karat · Software Engineer
Updated · 2026-09-24

Karat Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Karat works in technical hiring. Its trained Interview Engineers run live technical interviews, and its Software Engineers build the software behind them. Reported work includes the Karat Studio collaborative coding environment, real-time video streaming services and automated grading systems, plus the integrations and data pipelines that connect Karat's interviewing infrastructure to enterprise applicant tracking systems and client codebases. The recurring engineering problems described for the role are real-time synchronization, data security and high availability.

This guide covers the four stages candidates report for the Software Engineer role: a recruiter call, the Karat Qualify test, the Karat Core Interview and an onsite loop. It also covers the question categories reported for this role: CS fundamentals and complexity, multi-part algorithmic coding, system and API design, and code review. Each stage comes with preparation steps. There are also original practice problems with worked solutions for SQL modelling, parsing-heavy coding and retry-safe API design.

Karat candidates report 4 rounds · ≈ 3-5 weeks. The stages below are what candidates describe, not a published process.

Evolve APIs without breaking pinned SDK clientsScope every query and cache key by tenantKeep money in integer minor units

42 min read

Practice 15 Software Engineer prompts
3Company bank questionsSnapshot · Sep 24, 2026 PT
9Candidate experiences ↗Read their reports
15Practice promptsAcross five skill areas
3With worked solutionsIncluded in the practice prompts

Software Engineers at Karat build and maintain the infrastructure behind its technical interviews. Reported work includes the Karat Studio collaborative coding environment, real-time video streaming services and automated grading systems, with real-time synchronization, data security and high availability as the recurring engineering problems.

The title covers more than one kind of seat. One reported variant is a Community Engineer role within the Brilliant Black Minds initiative, building tools, mock-interview platforms, community portals and feedback loops for aspiring Black software engineers. Another is Senior Deployment Engineering, building custom integrations, APIs and data pipelines between Karat's interviewing infrastructure and enterprise applicant tracking systems, and working with external engineering leaders on secure data ingestion. Across variants, reported work includes contributing to Karat Studio, taking part in code reviews, and working with product managers, UX designers and operations teams who support the Interview Engineers.

The listed must-have skills are proficiency in Python, Java, Ruby or JavaScript/TypeScript, plus backend development, RESTful API design and relational databases. The nice-to-haves are AWS or GCP, Docker and Kubernetes, React, and test automation tools such as Selenium or Playwright. Use the recruiter call to find out which seat you are interviewing for. Then weight your preparation toward it: API and integration design for deployment work, front-end review for React-heavy seats.

Candidates describe a standardized interview format. They report that coding questions come as a sequence of parts that build on each other, and that they run their code against pre-configured test cases in the Karat Studio IDE. In practice, reach a correct first part quickly, write it as small helpers the follow-ups can extend, and test as you go.

01

Recruiter Call

reported

Candidates describe a first call with a recruiter about the role and fit. This title covers several different jobs: product work on the Karat Studio collaborative coding environment, deployment work integrating Karat's platform with enterprise clients, and community tooling within the Brilliant Black Minds initiative. Use the call to find out which one this seat is. Also ask about the next steps: whether the Karat Qualify test comes first, when the Karat Core interview is scheduled, and what the onsite rounds cover for this team. Ask which languages the coding environment supports and whether looking up syntax is allowed. That way the later rounds hold no logistics surprises.

What to demonstrate

  • Whether your experience maps to the specific seat (Studio product work, deployment and integrations, or community tooling) rather than to the whole posting
  • Whether you can describe backend, REST API and relational-database work you have done in concrete terms, since the role requirements list those as must-haves
  • Whether what you want next matches the seat, for example integration work with external engineering teams versus product work on the core platform

How to prepare

  • Mark every line of the posting as done, adjacent or new, and write one sentence for each adjacent line naming the closest thing you actually built
  • Prepare a short account of one API you designed and one database schema you owned, with the trade-off you made in each
  • Bring questions that change your preparation: which seat this is, whether Qualify comes before Core, which languages the IDE offers, whether lookups are allowed, and what the onsite covers
PracHub interview research
02

Karat Qualify

reported

Candidates describe Karat Qualify as a 15-minute multiple-choice test on general coding logic, algorithms and backend fundamentals. You take it on your own, with no live interviewer. Candidates report that some start here instead of with the recruiter call, and that passing opens scheduling for the Karat Core interview. Multiple-choice against a short clock is a different skill from live coding. You need to read a snippet and know its output or complexity without running it, and to rule out wrong options quickly instead of deriving every answer from scratch.

What to demonstrate

  • Reading code logic correctly without executing it, including loop bounds, off-by-one behaviour and mutation
  • Recognising the time and space complexity of standard algorithms and data structures on sight
  • Backend fundamentals; the reports give no specifics, so HTTP, REST and relational-database basics are the safe core to review

How to prepare

  • Build a one-page complexity table for arrays, hash maps, balanced BSTs, heaps, sorting, and BFS/DFS over V vertices and E edges, and quiz yourself from memory
  • Predict the output of ten short snippets in your main language before running them, and log every miss by topic
  • Refresh HTTP methods and status codes, what an index speeds up and what it costs on writes, and inner versus left joins
PracHub interview research
03

Karat Core Interview

reported

Candidates describe this as a live video session of about 60 minutes with a trained Karat Interview Engineer. It opens with a brief introduction and a short technical quiz or system design discussion, followed by a coding challenge that starts with an easy problem and gets harder as you progress. You write code in the Karat Studio IDE and run it against pre-configured test cases during the session. Reports also say you may look up basic syntax and library documentation while coding, and that you can request a redo with a different Interview Engineer and new questions within 24 hours. Confirm both with your recruiter before relying on them. Later parts build on earlier ones, so aim for a correct first part, reached quickly, in code the follow-ups can extend.

What to demonstrate

  • Short, accurate answers to CS fundamentals such as BFS versus DFS complexity, hash table versus balanced BST search, and garbage collection in Java
  • A working first part, tested against the provided cases, finished early enough to reach the follow-up parts
  • Code split into helpers, so a follow-up changes one function instead of forcing a rewrite
  • Saying your approach, edge cases and complexity out loud before and while you type

How to prepare

  • Rehearse a short spoken answer for each reported fundamentals question until each one fits comfortably in under a minute
  • Practise multi-part problems in one sitting, such as the grid progression from neighbour coordinates to BFS path existence to backtracking string search, reusing one neighbour helper
  • Code in a plain editor without autocomplete, and run tests after each helper rather than at the end
  • Open the Karat Studio environment from your preparation materials and learn how to select a language, run the test cases and read console output
PracHub interview research
04

Onsite Loop

reported

Candidates describe the onsite loop as several rounds with internal Karat engineers and managers, reported to run three to four hours in total. The rounds cover system architecture, practical coding, collaborative code reviews and behavioural scenarios. The reports do not tie any specific question to this stage, so prepare by category: use the reported design and code-review questions in this guide as practice material without assuming where they will come up. Change your approach between rooms: in coding, finish and test; in design, agree requirements before drawing architecture; in behavioural answers, name the people and the decisions.

What to demonstrate

  • Whether a design answer starts from requirements and failure behaviour (callers, limits, retries, what happens when a dependency is down) before choosing components
  • Whether a code review finds concrete bugs, performance issues and security problems, and explains each fix and how to verify it
  • Whether practical coding ends with something that runs and has been checked against an edge case
  • Whether behavioural answers name your own decision, the people involved and a checkable outcome

How to prepare

  • For system architecture, work through the reported design questions as category practice; for the rate-limiting API, write the contract end to end: how the caller is identified, the limit response (429 with Retry-After), and what the client does next
  • For the reported notification and code-execution designs, state how a retry avoids duplicate work and what happens when one channel or worker pool is down, before drawing queues
  • Review a piece of your own old code for style, security and testability, then refactor one function into testable pieces and explain each change
  • Prepare four behavioural stories: unclear requirements, a project in trouble, a code review you led, and a performance decision
PracHub interview research

9 candidate reports. Individual accounts describe a particular role and hiring cycle.

Software Engineer

Karat Software Engineer interview with three English and three coding questions

Technical Screen

My Karat process began with a structured sequence of questions that felt a little relentless. After the initial stages, I answered three English questions and then moved straight into three coding problems. The first coding prompt asked whether a solution met the requirements. I was then asked more focused computer science questions about time and space complexity. The other coding problems were…

Read full experience
Software Engineer

Karat Software Engineer interview with a moderate algorithm question

Technical Screen

The interview started with a casual introduction from the interviewer, which made the conversation feel less cold. I then talked through my background, including my achievements, previous experiences, and how I’d handled challenges on earlier projects. It felt like that discussion was meant to provide context before the technical portion. Afterward, I worked through a moderate algorithm question.…

Read full experience
Software Engineer

Karat Software Engineer interview: one-hour live coding and system design session

Other → Technical ScreenOutcome: rejected

The process started with a short, multiple-choice qualifying test. I could choose topics such as backend, general coding logic, or algorithms and data structures. After I passed, I was invited almost immediately to schedule the actual interview. The main technical interview was a live online video session that lasted about an hour. It combined discussion and analysis questions with a system desig…

Read full experience
Software Engineer

Karat Software Engineer interview: written Splunk exam and video problem

Online Assessment → Technical ScreenOutcome: rejected

I started with a written exam sent by email. It focused directly on Splunk-related engineering topics. I completed it and thought I had passed, so I moved on to a video round where I solved a problem during the call. Even after that, I couldn't move forward, and the rejection left me more puzzled than informed. What bothered me most was the uncertainty about the role. I didn't know which position…

Read full experience
Software Engineer

Karat Software Engineer interview with learning materials before rejection

OtherOutcome: rejected

I was surprised by how much Karat tried to include "learning" before making a final decision. What they called onboarding felt like an extension of the interview process. I studied their learning materials for a while and completed a couple of practice interviews, then still got rejected after about a week. The part that threw me off was that it didn't feel like optional preparation. It felt like…

Read full experience

PracHub editorial advice for the preparation topics above.

01

Polishing the first part of a multi-part coding question until the follow-up parts never arrive

Candidates describe the Karat Core coding challenge as a sequence that starts easy and builds, and you only reach the later parts by getting through the earlier ones. Get a correct, tested first part, state its complexity, and move on. Mention the optimisation you would make rather than making it. To practise, run the grid progression from the question bank against a timer you do not extend: Neighbor Coordinates for Zeros, then Path Existence in 2D Grid with BFS, then 2D Grid String Search with backtracking.

02

Writing part one as a single block with hardcoded sizes and targets, then rewriting it when the follow-up changes the input

Because the parts build on each other, split parsing, the neighbour or move function, and the search into separate helpers from the start, and pass sizes and targets in as parameters. Then when a follow-up asks for every path instead of one, or a large-input version of a string parser, you change one function instead of starting over.

03

Writing the whole solution before running it against the provided test cases in Karat Studio

Candidates report running their code against pre-configured test cases during the session, so run it after each helper works. When a case fails, read its input before changing any code. Explore the Karat Studio environment from your preparation materials beforehand: language selection, running tests, and console output. Keep inline comments light, because some candidates report the IDE mishandling heavily commented code.

04

Giving slow or vague answers in the CS fundamentals segment

Reported questions include BFS versus DFS time and space complexity, searching a balanced BST versus a hash table, memory allocation and garbage collection in Java, and REST versus other protocols. For each, prepare an answer of two or three sentences with the exact complexity and one case where the answer changes. For example: both traversals take O(V+E) time, but BFS holds up to a whole level in its queue while DFS holds one path. A hash table lookup is O(1) on average and O(n) when many keys collide, while a balanced BST is O(log n) and keeps its keys in order. Say each answer aloud until it is short.

05

Opening a reported design question, such as the rate-limiting API or the notification system, with boxes and queues instead of requirements and failure behaviour

The rate-limiting prompt asks for endpoints, request payloads and response codes, so write those first: what identifies the caller, what the limit response looks like, and what the client does after a 429. For the notification system, say how a retry avoids sending twice and what happens when email, SMS or push is down, before choosing any components. The design worked exercise in this guide practises the same retry and partial-failure reasoning.

Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.

12 technical prompts3 include a worked solution

Given a list of user session logs, find the most common sequence of pa…

medium
data structures and algorithms

Given a list of user session logs, find the most common sequence of pages visited by users within a specific time window.

Approach
  1. Name the brute-force solution and its complexity before improving on it.
  2. Restate the input: its shape, its size, and what is guaranteed about it.
  3. State the target complexity and say which constraint rules the naive version out.
Follow-up
  • Which test case would catch an off-by-one here?
  • What is the worst case, and how likely is it on real data?

Implement a custom data structure that supports insert, delete, and ra…

medium
data structures and algorithms

Implement a custom data structure that supports insert, delete, and random element retrieval operations in constant time.

Approach
  1. Name the brute-force solution and its complexity before improving on it.
  2. State the target complexity and say which constraint rules the naive version out.
  3. Choose the data structure from the access pattern, not from familiarity.
Follow-up
  • Which test case would catch an off-by-one here?
  • How does this change if the input no longer fits in memory?

Parse and verify a timestamped multi-signature webhook header

easyWorked solution
parsinghmacconstant-time-comparereplay-protection

An inbound webhook carries a signature header of at most 1 KiB shaped t=<unix seconds>,v1=<64 hex chars>, with up to five v1 values during secret rotation and possibly unknown scheme keys. You hold the raw request body bytes and the currently active signing secrets. Write the parser and the verifier: accept when any active secret reproduces a signature and the timestamp is within a five-minute tolerance in either direction, reject otherwise. Single left-to-right pass over the header, no regular expression. State what is inside the MAC and why.

Approach
  1. Parse in one scan: split on ,, then on the first = only, since a value may itself contain = under a future scheme. Accept t exactly once and treat a second t as a reject rather than last-wins. Push every v1 onto a short list and ignore any other key, so a v2 can be introduced later without breaking this verifier.
  2. Say what is signed: HMAC-SHA256 over the exact byte string <t>.<raw body bytes>, yielding 32 bytes or 64 hex characters. The timestamp sits inside the MAC because otherwise an attacker replays yesterday's body with its still-valid signature and only has to edit the header timestamp.
  3. Hash the bytes as received. Verifying against a re-serialised JSON body is the usual defect: key order, whitespace and number formatting all change the bytes while the parsed objects compare equal, so signatures fail for honest senders and the popular 'fix' is to stop checking.
  4. Compare in constant time over fixed-length digests. Decode the hex to 32 bytes, accumulate acc |= a[i] ^ b[i] across the whole length, and test acc == 0 at the end. Evaluate every candidate without an early exit; at five candidates that is five HMACs over the body, linear in body size and negligible beside the network.
  5. Apply the tolerance as a two-sided bound, rejecting when |now - t| > 300 seconds. A sender whose clock runs ahead of yours is an ordinary case, and an unbounded future timestamp is a free replay window.
  6. Complexity: O(L) over the header producing k candidates, plus k HMACs at O(|body|) each. Space is O(k) beyond the body itself. Do the cheap rejections, including the tolerance check, before any cryptography runs.
Worked solution 15 min
  1. Write the grammar on one line before coding: header := field (',' field)*, field := key '=' value, split on the first = only.
  2. Implement the parser to return {t: int, v1: [hex, ...]}, rejecting a missing t, a duplicate t, any v1 that is not 64 hex characters, and a header over 1 KiB, all before any cryptography runs.
  3. Implement the verifier: for each active secret compute HMAC-SHA256(secret, f'{t}.'.encode() + raw_body), compare it in constant time against each parsed v1, and OR the results with no early exit.
  4. Test with a valid signature; the same body with t moved 400 seconds into the past; the same body with t 400 seconds into the future; a header carrying an unknown v2= alongside a valid v1; and a body re-serialised with different JSON key order.
EXPECTED RESULTThe valid case accepts. Both out-of-tolerance cases reject, including the future one. The unknown `v2` field is ignored and the `v1` still verifies. The re-serialised body fails, which is correct and is exactly why the raw bytes must be retained.
Follow-up
  • The body is 40 MB. What changes about where you verify, and what can you do before the whole body has arrived?
  • A customer reports that signatures fail for exactly the requests whose body contains a non-ASCII character. What is your first hypothesis?
  • How do you rotate the signing secret with no failed deliveries, and how long do both secrets stay live?

Roughly ninety minutes on weeknights with one longer weekend block. The plan cuts scope rather than compressing everything, on the assumption that one thing finished per night beats four half-started.

Small steps. Visible outcomes.0 / 7 completed
ONE WEEK · YOUR PACE

Prepare, practise & reflect

One practical outcome each day. Spend longer where you need it.

0 / 7 done
01Recruiter call prep and a cold coding baseline
  • Mark each line of the posting as done, adjacent or new, and write which seat you are aiming at: Karat Studio product work, deployment and enterprise integrations, or community tooling.
  • Write your recruiter questions: which seat this is, whether Karat Qualify comes first, which languages the Karat Studio IDE offers, whether lookups are allowed, and what the onsite rounds cover.
  • Solve Path Existence in 2D Grid cold with BFS in a plain editor, then write one sentence on what slowed you down.

Deliverable: A marked-up posting, a recruiter question list, and one cold coding attempt with a note on what blocked it.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Worked solution ↗
02Karat Qualify: complexity and backend fundamentals
  • Write the Big-O of array index and insert, hash map get and put, balanced BST search and insert, heap push and pop, comparison sort, and BFS/DFS over V vertices and E edges from memory, then check each one.
  • Predict the output or complexity of ten short snippets in your main language before running them, and log every miss by topic.
  • Refresh HTTP methods and status codes, index costs, and inner versus left joins, and practise joins with the bank question Join tables to map userId to name.
  • Work the SQL worked exercise on credential revocation to rehearse constraint and index reasoning.

Deliverable: A one-page complexity and backend-fundamentals sheet, plus a log of the snippet predictions you got wrong.

Practice prompt ↗Practice prompt ↗
03Karat Core: the CS fundamentals segment
  • Write short spoken answers for the reported questions: BFS versus DFS complexity, balanced BST versus hash table search, Java memory allocation and garbage collection, and REST versus other protocols.
  • Add the neighbouring topics: context switching and OS modes, threads and locks, stack versus heap, how a memory leak happens in a garbage-collected program, and what happens during an HTTPS request.
  • Say each answer aloud, cut any that runs past a minute, and keep one concrete example per answer.

Deliverable: A fundamentals card with a short answer and one example for each topic, each rehearsed aloud.

Practice prompt ↗Practice prompt ↗
04Karat Core: multi-part grid and data-structure coding
  • Work the grid progression in one sitting: Neighbor Coordinates for Zeros, then Path Existence in 2D Grid, then 2D Grid String Search, reusing one neighbour helper throughout.
  • Implement the insert, delete and getRandom structure with an array plus a map from value to index, deleting by swapping with the last element, and state why each operation is average O(1).
  • Validate nested brackets with a stack, then try Calculator Parser With Variables as a stretch.
  • Run tests after each helper and state the complexity before moving to the next part.

Deliverable: Three multi-part solutions built on shared helpers, each with complexity stated and tests run as you went.

Practice prompt ↗Practice prompt ↗Worked solution ↗
05Parsing, logs and follow-up changes
  • Do the coding worked exercise on parsing and verifying a multi-signature webhook header, which drills a single-pass parser and early rejection of bad input.
  • Solve the session-log question: group logs by user, sort each group by time, and count page sequences inside the window with a hash map. Then say what changes when the input is large.
  • Warm up on the bank's Validate password and list rule violations, and Implement obstacle-course run statistics, splitting each into helpers before coding.

Deliverable: The session-log solution and two parsing-style solutions, each with one follow-up you handled in writing.

Practice prompt ↗Practice prompt ↗
06Design questions, code review and behavioural stories
  • Write the rate-limiting API contract: endpoints, payloads, the 429 response with Retry-After, and where the counters live.
  • Work the design worked exercise on the retry-safe batch ingest endpoint, then apply its retry and partial-failure reasoning to the reported notification-system and real-time code-execution questions.
  • Review a piece of your own old code for style, security and testability, and refactor one function into testable pieces.
  • Write four behavioural stories: unclear requirements, a project in trouble, a code review you led, and a performance decision.

Deliverable: One API contract, two design sketches with retry handling, a refactor with notes, and four stories.

Practice prompt ↗Practice prompt ↗
07Full Core-format rehearsal and logistics
  • Run a mock in the reported Core shape: a brief introduction, a short fundamentals quiz, then a multi-part coding problem in a plain editor with tests.
  • Straight afterwards, write down where you lost time and fix only those moments.
  • Confirm the logistics with your recruiter: language, lookup rules, and whether the redo option applies to you.
  • Warm up only on a problem you have already solved from a blank file, and open no new material.

Deliverable: Mock notes naming where you lost time, plus a one-page card with fundamentals answers, your reusable helpers and the logistics.

Practice prompt ↗Practice prompt ↗Worked solution ↗

Expand any day for tasks and deliverables. Your progress is saved on this device.

Candidates describe behavioural scenarios among the onsite rounds, and this role's question bank includes prompts on leading through unclear requirements, recovering a project in trouble, and explaining a practical code review. Prepare four or five stories that each name your own decision, the people involved and a result someone could check. Include at least one about working with product managers or designers, since the role description lists that collaboration as part of the job.

Ship metered billing with a named deduplication horizon

medium
technical debtdeduplicationdeadline pressuredetectors

Metered billing must be on in three weeks. usage_event is partitioned daily, so its unique index must include the partition key and deduplicates only within a day: a producer retry that crosses midnight, or a replay run a week later, gets through. A cross-partition dedup store is two weeks you do not have. Describe shipping with debt you named in advance: what you shipped, what you wrote down, the detector you added, the trigger and date for paying it off, and what you would have refused to ship under the same pressure.

Approach
  1. Show you can separate the two kinds of debt, because that distinction is what the question actually probes. Debt that costs engineering time later is shippable on a deadline. Debt that silently corrupts a number a customer gets charged for is not shippable unless the corruption is detectable, and detectability is the whole negotiation.
  2. Make the exposure narrow and measured rather than gestural. The hole is duplicates whose occurrences straddle a UTC day boundary, plus any replay older than partition retention. Measure it before arguing about it: how often an idempotency_key recurs at all, and the distribution of the gap between first and last occurrence. If the ninety-ninth percentile of that gap is four minutes, the residual risk is a small band around midnight and you can say so numerically.
  3. Add the detector before the feature, not after. A nightly job counting keys that appear in more than one partition is one grouped scan over recent partitions, and it converts a silent overcount into a page. State what it costs to run and what it fires on.
  4. Buy the cheap half of the real fix immediately: extend partition retention so the dedup horizon exceeds the producer's maximum retry window plus the longest replay you intend to support. That reframes retention as a correctness parameter rather than a storage cost, which is the sentence you need on record before someone optimises the bill.
  5. Make repayment mechanical instead of aspirational: a dated entry with a named owner, plus a threshold that pulls the date forward — first detector hit above N events, or first customer dispute. Debt with a trigger gets paid; debt with only a date does not.
  6. Answer the second half honestly by naming what you would refuse under identical pressure: the sealing path, because a sealed row is frozen and a wrong number there stops being a bug and becomes an adjustment line, a dispute and an audit question.
Follow-up
  • The detector fires on forty duplicate events for one tenant, and two of their invoices have already sealed. What happens next?
  • Whom did you tell that the billing numbers had a known hole, and in what words?
  • Finance asks you to cut storage by shortening partition retention. What do you say, and to whom?

Reverse a webhook ordering decision after measuring its cost

medium
reversing decisionshead-of-line blockingat-least-onceapi contracts

You argued for strict per-subscription ordering in webhook-delivery, which means one in-flight attempt per subscription. It shipped. Three months later a single unresponsive endpoint holds one subscription's queue at a six-hour backlog, and two customers report events arriving out of order anyway once their own retries are counted. Describe a decision you reversed: what you originally optimised for, the measurement that changed your mind, what the reversal cost in engineering time and customer change, and how you told the people who had already built on the original guarantee.

Approach
  1. State the original decision as a trade you made knowingly. Ordering across a network requires a single in-flight attempt per subscription, and its price is head-of-line blocking whenever one endpoint is slow. 'We priced it wrong' is a much stronger opening than 'we did not realise', and it is usually the true one.
  2. Bring the measurement that flipped it, not the anecdote: backlog age at the ninety-ninth percentile per subscription, the share of subscriptions where one slow endpoint gated an otherwise healthy queue, and the delivery throughput lost to serialisation. A reversal justified by complaints is indistinguishable from a reversal justified by fatigue.
  3. Name what you learned about the guarantee itself, which is the engineering content of this story. At-least-once delivery means a retried event already arrives after newer ones and the consumer already must be idempotent, so a guarantee the customer has to defend against anyway was never worth what it cost to provide.
  4. Describe the migration, because reversing a published contract is the hard half and the part candidates skip. Parallel attempts behind a per-subscription flag, a monotonically increasing sequence number added to the envelope so order-sensitive consumers can sort or discard, documentation that states at-least-once and unordered in those words, and a deprecation measured in quarters because the client is a pinned SDK inside a build pipeline you cannot see or redeploy.
  5. Give the cost in the two currencies that matter: engineer-weeks, and how many customers had to change code. Then say who you told before it shipped rather than in a changelog afterwards, and which large customer you left on the old behaviour and for how long.
  6. Close with the signal you now weight differently, stated as something you would do earlier next time: measuring the blocking cost on the slowest decile of endpoints before committing to the guarantee, rather than after a customer noticed.
Follow-up
  • A customer insists they need ordering. What do you offer them that is not global serialisation?
  • How did you choose the deprecation window given that you cannot see or redeploy the clients?
  • What would have to be true for you to reverse back?

Estimate a tenant-leading index migration you have never run

hard
estimationonline migrationindex buildsuncertainty

Someone needs a date. usage_event carries an index on (occurred_at) and needs (tenant_id, occurred_at); the largest tenant holds roughly a hundred times the median tenant's rows, the table is partitioned daily with years of retention, and you have never run a migration on a table this large. Give an estimate you would defend: how you decompose the work, the two or three numbers you would go and measure first, the range and confidence you state, and what you commit to when the person asking needs a single date today.

Approach
  1. Refuse the bare number and then give one anyway, in the form that is actually useful: a range plus the measurement that collapses it. 'Four to eleven days; one afternoon building this index on a restored copy of the largest partition takes that to within a day' is an answer, while 'it depends' is not.
  2. Decompose by failure mode rather than into equal chunks, because that is where estimates go wrong. On a partitioned parent you create the index ON ONLY the parent, build each partition's index with CREATE INDEX CONCURRENTLY, then ALTER INDEX ... ATTACH PARTITION, at which point the parent index becomes valid. CONCURRENTLY does not block writes but scans each partition twice, waits out older transactions, cannot run inside a transaction block, and on failure leaves an invalid index you must drop concurrently and retry.
  3. Name the two unknowns that dominate and price them: build time on one restored partition of realistic size, and whether the planner actually chooses the new index for the skewed tenant, since selectivity for a tenant holding most of the rows is a different question from selectivity for the median tenant. Both are half-day measurements against a replica, and both are cheaper than being wrong by a week.
  4. State the assumptions the range is conditional on, because that is what makes a slip a re-estimate instead of a credibility event: no partition above a stated row count, one concurrent build at a time so it does not compete with ingest for I/O, and an ingest backlog that can absorb the added write amplification while both indexes exist.
  5. Budget the step nobody budgets: verification and the old index's removal. Dropping the old index is fast, but deciding it is safe to drop means confirming no plan still uses it, and that confirmation waits on real traffic across a full weekly cycle rather than on your patience.
  6. Answer the single-date request honestly. Commit to a date for the first checkpoint — the measured build number from the replica — and to re-estimating on that date, and say plainly what you are not committing to yet. A date with a scheduled re-estimate is worth more to the asker than a confident wrong one, and you should say why in those words.
Follow-up
  • The concurrent build fails half way through the largest partition. What is the state of the database and what do you do next?
  • Your estimate slips by sixty percent. Which assumption broke, and at what point would you have known?
  • The person asking needs the date for a customer commitment. Does your answer change?
  • 01

    Tell me about a project where the requirements were unclear. How did you get enough clarity to start, what did you prioritise, and what did you change once you learned more?

  • 02

    Describe a project that hit a major obstacle. What was your part in recovering it, who outside engineering did you work with, and what would you do earlier next time?

  • 03

    Walk through a code review where you found a style, security or best-practice problem. How did you raise it, how was it fixed, and how did you confirm the fix?

  • 04

    Tell me about a time you had to decide whether code was fast enough. What did you measure, and what did you deliberately not optimise?

  • 05

    Describe a feature where the user experience and the technical constraints pulled in different directions. How did you and the product manager or designer settle it?

  • 06

    Tell me about a bug or a bad call that was yours. What check would have caught it, and does that check exist now?

PracHub interview preparation framework
Is this an official Karat interview guide?

No. It is PracHub's own research and practice material for the Software Engineer role at Karat. Rounds and questions reflect what candidates have reported, not a process Karat has published, and they change over time. Confirm the current format and scope with your recruiter.

PracHub interview research
How does the Karat redo option work?

Candidates describe a redo option for the Karat Core interview. If you feel the session did not reflect your ability, you can request a second attempt within 24 hours, with a different Interview Engineer and a new set of questions, and the hiring team considers your best attempt. Confirm the current policy with your recruiter, and still prepare as if the first attempt is the only one. The redo uses the same format, so write down what went wrong the first time and fix that before rebooking.

PracHub interview research
Why does the Karat Core interview feel scripted?

Candidates report that Karat Interview Engineers follow a standardized, structured protocol, so the session can feel formal. Use that predictability. Because the format repeats, you can rehearse the opening, the fundamentals quiz and the multi-part coding flow in advance. Do not read a neutral reaction as a bad sign. Keep narrating your approach, edge cases and complexity so your reasoning is visible.

PracHub interview research
How hard are the coding questions?

Candidate reports put the coding questions at roughly LeetCode Easy to Medium, and describe the coding portion as a sequence that starts easy and builds. The bank questions for this role range from easy grid problems, such as neighbour coordinates and BFS path existence, to harder ones, such as 2D grid string search with backtracking and a calculator parser with variables. Practise finishing the easy part fast rather than only solving hard problems slowly.

PracHub interview research
Can I use Google during the coding portion?

Candidate reports say you may look up basic syntax, library documentation or language APIs during the coding portion. Confirm the rule at the start of the session. Use it for a forgotten function name, not for an algorithm. Looking up an approach costs more time than it saves and leaves you explaining code you did not reason through.

PracHub interview research
What is the Karat Qualify round?

Candidates describe Karat Qualify as a 15-minute multiple-choice test on coding logic, algorithms and backend fundamentals, taken on your own. Passing it is reported to open scheduling for the Karat Core interview. To prepare, review standard complexities, predict the output of short code snippets without running them, and refresh backend basics such as HTTP methods, status codes and relational-database queries.

PracHub Software Engineer practice
Which CS fundamentals should I review for the quiz segment?

Start with the reported questions: BFS versus DFS time and space complexity, searching a balanced BST versus a hash table, memory allocation and garbage collection in Java, and REST versus other protocols. Then cover the other topics reported for this role: threads and locks, stack versus heap, how a memory leak happens in a garbage-collected program, what happens during an HTTPS request, and context switching and OS modes. Prepare an answer of two or three sentences for each, with one example.

PracHub Software Engineer practice
What does the onsite loop cover?

Candidates describe several rounds with internal Karat engineers and managers, covering system architecture, practical coding, collaborative code reviews and behavioural scenarios. The reports do not tie specific questions to the onsite, so prepare by category. For architecture, work through the reported design questions: a rate-limiting API with its endpoints, payloads and response codes, a multi-channel notification system with high availability and retries, and a real-time code-execution system. For code review, practise finding bugs, performance problems and security issues in real code and explaining each fix. Front-end review, such as React components, is reported for specialised roles.

PracHub Software Engineer practice
Sources & methodology 3 sources ↗

Official role evidence, timestamped platform data and clearly labeled preparation advice.