Remitly · Software Engineer
Updated · 2026-09-24

Remitly Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Remitly runs cross-border money transfers, and its engineering teams work on transfer processing, fraud detection, regulatory compliance and ledger management. The source notes name domain areas including Core Transfer Experience, Trust Intelligence Platform, High Value Send, Decision Intelligence Platform and Receiver Products. For interview prep, that domain matters because many reported questions (ledger APIs, exactly-once event processing, FX pricing, fraud scoring) are framed around moving money correctly under concurrency and unreliable networks.

This guide covers the three stages candidates report for Software Engineer at Remitly: a recruiter screen, a technical assessment or phone screen, and a virtual onsite loop. It groups the reported questions into data structures and algorithms, API and concurrency work, system design, and behavioral prompts, and the 7-day plan and worked exercises give you practice in each group.

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

Bound every outbound call with a timeoutPaginate large result sets with keyset cursorsDetect concurrent edits instead of losing writes

37 min read

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

Software Engineers at Remitly build the services behind cross-border money transfers. According to the source notes, engineering teams handle transaction processing, fraud detection, regulatory compliance and ledger management across domain areas such as Core Transfer Experience, Trust Intelligence Platform, High Value Send, Decision Intelligence Platform and Receiver Products. The listed languages are Java, Go, Python, C++ and TypeScript, and the listed experience includes distributed backend services, relational databases such as PostgreSQL, and RESTful API design.

The reported questions follow that domain closely. Coding questions include a TTL cache with memory limits, finding sub-arrays of transaction records that meet a threshold, and BFS/DFS over transfer paths. API questions ask for a banking endpoint that handles concurrent deposits and withdrawals, a thread-safe structure for exchange operations, a rate limiter, and a live code review that fixes concurrency bugs. Design questions cover an international transfer platform, an event-driven ledger with exactly-once processing, real-time fraud detection, FX rate calculation and receiver notifications.

In practice, clean algorithm answers are only part of it. Across coding, API and design questions, prepare to say what happens on a retry, a timeout, a duplicate message or two concurrent writes to one balance. Candidates also report behavioral questions inside technical rounds, not only in a separate conversation, so plan to switch from code to a short structured story within the same session.

01

Recruiter Screen

reported

Candidates describe this as a first conversation about your background and fit for the role. The source notes that the order varies by team and location: some candidates start with a timed technical assessment, and others have a recruiter screen followed by a technical phone screen with an engineer. Use this call to find out which path you are on, whether a take-home is involved, and which domain area the team sits in. A team working on transfers, trust and fraud, or receiver products points you toward different design practice. The person on the call usually does not evaluate code, so give each project a clear shape: what was breaking, what you changed and what happened after. Describe it so a non-engineer could repeat it accurately.

What to demonstrate

  • Whether your project summaries still hold up when a non-engineer paraphrases them for a hiring manager
  • Whether you can tie past work to the problems this role involves, such as transaction correctness, concurrency or third-party integrations, without overstating fintech experience you do not have
  • Whether you can separate what you did from what the team did on shared projects

How to prepare

  • Write two-sentence versions of your top three projects with no internal codenames, and attach one measured result to each, or say plainly that it was not measured
  • Prepare questions for the recruiter: which assessment format comes next, which languages are accepted, whether a take-home is involved, and which team or domain area the role supports
  • Pick one story about correctness under concurrency or failure (a race, a duplicate, a retry that went wrong) and keep it ready, since it fits both this call and later behavioral questions
PracHub interview research ↗
02

Technical Assessment

reported

The source describes this stage as a technical assessment or phone screen that evaluates coding. It also says screening rounds often pair an algorithmic or API task with behavioral questions. Reported coding questions include finding sub-arrays of transaction records that meet a threshold, a cache with TTL and memory limits, BFS/DFS over dependency or transfer paths, array and string problems under memory constraints, and parsing log streams to aggregate metrics. The source describes some problems as evolutionary: a base version comes first, then more constraints are added. Finish a correct base version and keep the part most likely to change, such as the eviction rule or the threshold check, in one place so the next constraint is a small edit. When output is wrong, isolate the smallest failing input and trace it by hand before changing code.

What to demonstrate

  • Whether you produce runnable code with its corner cases handled (empty input, duplicates, equal timestamps, expired entries) and state the time and space cost
  • Whether you can extend a working solution when a new constraint arrives without rewriting it
  • Whether a failing case is isolated and explained before any edit is made
  • Whether you can move from code to a concise behavioral answer in the same session

How to prepare

  • Implement an LRU cache (hash map plus doubly linked list) from an empty file, then add per-entry TTL with lazy expiry, then a memory cap, treating each step as the next constraint an interviewer might add
  • Drill hash map and sliding-window problems on transaction-like arrays, plus bank questions such as O(1) insert/delete/random, isomorphic strings and weighted random pick
  • Write a small parser that reads a log stream line by line, skips malformed records without crashing and aggregates counts per key, then state its memory use
  • Prepare two short STAR stories you can give right after solving a problem
PracHub interview research ↗
03

Virtual Onsite Loop

reported

Candidates call this the Power Day. The source reports four to five sessions covering data structures and algorithms, system architecture, a deep dive into past technical work with hiring managers, and a product alignment discussion with product managers or cross-functional leads. Behavioral questions are reported inside the technical sessions as well. In some international locations (the source mentions Poland), candidates may receive a take-home task to build an API for a banking or transaction platform, followed by an onsite code review. Treat each session as a different format. Coding rewards a finished, tested solution. Design rewards agreeing on requirements, consistency and failure modes before drawing boxes. The deep dive rewards being able to defend your own trade-offs. The product session rewards being able to explain a technical constraint in terms of what it means for the user.

What to demonstrate

  • Whether a money-movement design states its consistency needs, idempotency and retry behaviour, and what happens when a downstream partner or queue fails
  • Whether you can review unfamiliar concurrent code, name the specific race or bottleneck and fix it without adding locks everywhere
  • Whether you can whiteboard a past project and defend the alternatives you rejected
  • Whether you can work through a disagreement over priorities with a product partner and say what you would give up

How to prepare

  • Run design reps on the reported shapes: transfer platform, event-driven ledger with exactly-once processing, real-time fraud scoring, FX rate calculation and cross-region receiver notifications
  • Draw one past project from memory: components, data flow, the failure you handled, and two alternatives you rejected and why
  • Practise a code review: take a multi-threaded snippet with a check-then-act on shared state, find the race, and explain the fix and its cost
  • Prepare for the product session with a story about pushing back on a requirement for technical reasons and how you reached agreement
PracHub interview research ↗

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

Software Engineer

Remitly Software Engineer online technical screening

Online Assessment

After a recruiter call, I had an online technical screening split between getting to know me and solving a problem. It wasn’t a simple "here’s the pattern" LeetCode exercise, and it didn’t feel realistic to finish in a tight window without running into gaps. I spent a lot of time making sure I understood what was being asked and what passing behavior should look like. The coding round wasn’t just…

Read full experience
Software Engineer

Remitly Software Engineer interview with a high-frequency banking prompt

Technical Screen

My first step was an early technical prompt that was much broader than I expected for an initial stage. I had to build something like a high-frequency banking system from scratch, which meant thinking beyond one algorithm and covering the moving parts end to end. It was comprehensive, but once I broke the problem down, I could see a way through it. The next round was a live interview with behavio…

Read full experience
Frontend Engineer

Remitly Frontend Engineer interview with a timed Canditech assessment

HR Screen → Online Assessment

The process started with a recruiter screen, followed by a timed assessment on Canditech that lasted about an hour. The structure was rigid. Each section had its own time limit, and once I finished one, I couldn't return to it. There was no way to practice or get familiar with the platform beforehand, which made the pacing more stressful. I got thrown off immediately because I initially saw only…

Read full experience
Software Engineer

Remitly Software Engineer interview: live coding and power-day onsite

Technical Screen → OnsiteOutcome: rejected

My process started with an HR phone call. I then had a fairly structured technical interview with a live coding problem and enough time to think through the approach, followed by a separate values and discussion segment. After that, I went through what felt like a larger "power day" onsite with multiple interviewers across different roles. Some rounds focused on my resume experience. The technica…

Read full experience
Software Engineer

Remitly Software Engineer interview: DFS screen and four-interview virtual onsite

Technical Screen → Onsite

I applied online and went straight to scheduling without a recruiter introduction. My first technical interview involved a simple DFS-style problem. I passed that round and was invited to a virtual onsite. The virtual onsite felt uneven. It included four interviews: two technical coding rounds, a manager round, and a product manager round. Some interviewers were engaged and seemed genuinely inter…

Read full experience

PracHub editorial advice for the preparation topics above.

01

Designing a transfer or ledger flow where a retried request or redelivered message moves money twice

Reported design and API questions ask for exactly-once processing across unreliable networks and for concurrent deposits and withdrawals. State early that the network delivers at least once, then show how duplicates are made harmless: a client-supplied idempotency key stored with a unique constraint, a ledger entry keyed by transfer id so a second insert fails, and a consumer that records processed event ids or aggregate versions. Say what the caller sees when a retry hits an in-flight or completed request.

02

Fixing a concurrency bug in code review by wrapping everything in one lock without naming the invariant

For the reported code-review refactor question and the thread-safe exchange structure, first name the invariant being broken, for example that a balance never goes negative or that two withdrawals must not read the same starting balance. Then point to the exact check-then-act or read-modify-write that breaks it. Choose the narrowest fix (an atomic conditional update, a per-account lock, or a version check) and say what it costs in throughput and deadlock risk. One global lock fixes the race but adds a bottleneck and leaves the reasoning unexplained.

03

Over-building the first version of an evolving coding problem and never getting a working base solution

The source describes coding problems that grow in complexity. Get the base case running and tested first, for example a plain cache with get/put. Then add one constraint at a time: TTL expiry, then a memory cap. Keep each rule, such as the eviction policy or the expiry check, in one function so the next constraint is a small edit. A finished base version plus one clean extension is a better result than an extensible design with nothing that runs.

04

Treating the technical screen and onsite coding as code-only and being unprepared when a behavioral question arrives mid-session

Candidates report behavioral questions inside coding and design sessions as well as in separate conversations. Have short STAR answers ready for the source's prompts: a decision made with incomplete information, tough code review feedback, shipping speed versus paying down tech debt, disagreement between a PM and a tech lead, and a production failure you owned. Keep each answer brief so you can return to the technical problem without losing momentum.

05

Describing a past project in the deep dive without explaining why it was built that way

The onsite reportedly includes a deep dive into past technical work with hiring managers, and the question bank includes whiteboarding a past project. Before the interview, draw the system from memory. Mark the component you owned, the failure or scaling limit you hit, the alternatives you rejected with the reason for each, and what you would change now. Prepare for follow-ups on numbers and on decisions made by someone else.

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

13 technical prompts3 include a worked solution

Given an array of transaction records, find all sub-arrays that meet s…

medium
data structures and algorithms

Given an array of transaction records, find all sub-arrays that meet specific threshold conditions.

Approach
  1. Walk one small example through your approach before writing the whole thing.
  2. State the target complexity and say which constraint rules the naive version out.
  3. Name the brute-force solution and its complexity before improving on it.
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?

Implement a custom caching mechanism with TTL (Time-to-Live) constrain…

medium
data structures and algorithms

Implement a custom caching mechanism with TTL (Time-to-Live) constraints and memory limits.

Approach
  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Walk one small example through your approach before writing the whole thing.
  3. Choose the data structure from the access pattern, not from familiarity.
Follow-up
  • What is the worst case, and how likely is it on real data?
  • Which test case would catch an off-by-one here?

Solve array and string manipulation problems under strict runtime memo…

medium
data structures and algorithms

Solve array and string manipulation problems under strict runtime memory constraints.

Approach
  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Walk one small example through your approach before writing the whole thing.
  3. Choose the data structure from the access pattern, not from familiarity.
Follow-up
  • How does this change if the input no longer fits in memory?
  • Which test case would catch an off-by-one here?

Track a rolling failure rate per destination for circuit decisions

easyWorked solution
sliding windowring buffercircuit breaker

The egress service delivers about 1,500 webhooks per second across roughly 40,000 destinations, each call bounded by a 10 second timeout. Maintain, per destination, the failure rate over the trailing 60 seconds so a caller can ask before dispatch whether the circuit should open. Attempts arrive as (destination_id, finished_at_ms, outcome). Requirement: amortised O(1) per attempt, with total memory bounded by the destination count rather than by traffic. Give the structure, its exact memory, and the rule that stops a destination with three attempts from opening a circuit.

Approach
  1. Name the exact-deque version and then reject it as the default. Holding timestamps and advancing a tail pointer past anything older than now minus 60 seconds is a correct two-pointer window at amortised O(1) per attempt, but its memory tracks in-window traffic, so one destination in a retry storm holds hundreds of thousands of entries while thousands of quiet destinations hold none.
  2. Use a ring of 60 one-second buckets per destination, each bucket a pair of counters for attempts and failures. On an attempt, advance the ring by the elapsed whole seconds, zeroing at most min(elapsed, 60) buckets, then increment the head. That is amortised O(1) with a fixed footprint per destination.
  3. State the footprint: 60 buckets times two 4-byte counters is 480 bytes of payload per destination, so 40,000 destinations is roughly 20 to 25 MB with per-entry overhead, bounded by the catalogue rather than by the rate. The cost is granularity, since the oldest bucket ages out in whole seconds, which is far tighter than the decision needs.
  4. Require a minimum sample before the circuit may open. A destination with three attempts and three failures reads as 100 percent and is not evidence; a floor of roughly 20 attempts in the window makes the ratio meaningful, and below that floor use a run of consecutive failures as the trigger instead.
  5. Expire idle destinations, or memory grows with every destination ever seen rather than with the live set. Hold the rings in a bounded LRU keyed on destination_id and treat a miss as no history, which is the correct default for an endpoint that has been silent for a minute.
  6. Keep the half-open probe out of the window arithmetic. After the circuit opens, one probe per interval decides whether to close it, and folding that single success into a window that still holds a 100 percent failure history would reopen the destination on one data point.
Worked solution 20 min
  1. Define the bucket struct and the advance step: take floor(finished_at_ms / 1000), compare with the ring's current second, zero min(delta, 60) buckets forward, then write into the new head.
  2. Trace a destination that receives 5 attempts, goes silent for 90 seconds, then receives one more, and confirm the rate is computed from one attempt rather than six.
  3. Compute total memory for 40,000 destinations at 60 buckets of two 4-byte counters, and state what changes if the window widens to 300 seconds.
  4. Write the open rule as a single predicate combining the minimum-attempt floor with the rate threshold.
EXPECTED RESULTA per-destination ring of 60 one-second (attempts, failures) buckets advanced lazily for amortised O(1) cost, roughly 480 bytes of counters per destination and about 20 to 25 MB for 40,000 of them, an LRU bound on live rings, and an open rule requiring both a minimum attempt count in the window and a rate above threshold.
Follow-up
  • The fleet is 30 instances and each sees roughly a thirtieth of a destination's traffic. Where does the rate actually live, and what does a per-instance answer get wrong?
  • A destination answers in 9.5 seconds and succeeds. It is not failing but it is consuming your per-destination concurrency. What signal should open the circuit here?
  • How would you make the window survive a process restart, and is it worth the cost?

Four days sample coding, design, fundamentals and the practical rounds at deliberately shallow depth, which is enough to surface the topics you did not know were in scope. That map, rather than a guess made on day one, decides where the last three days go.

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
01Map the loop and prepare your background
  • Write down the three reported stages (recruiter screen, technical assessment, virtual onsite) and the questions you will ask the recruiter: assessment format, accepted language, take-home or not, and which domain area the team supports
  • Write two-sentence versions of your top three projects with one measured result each, and say them aloud to someone outside engineering
  • Choose your interview language from those listed (Java, Go, Python, C++, TypeScript) and list the ten standard-library calls you look up most, then practise them until you no longer need to

Deliverable: A recruiter question list, three paraphrase-proof project summaries and a language cheat list you no longer need to open.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Worked solution ↗
02Coding: arrays, hash maps and sliding windows
  • Solve the reported transaction sub-array threshold problem and state each method's limit: a running-sum sliding window handles contiguous sums only when amounts are non-negative; a prefix-sum hash map finds exact-sum sub-arrays (negatives allowed), not threshold ones; listing every qualifying sub-array is O(n^2) output in the worst case
  • Work through bank-style problems: O(1) insert/delete/random set, isomorphic strings, bijective substitution cipher and weighted random pick
  • For every problem, list the corner cases before coding (empty input, duplicates, negative amounts, equal values) and test them after

Deliverable: Five solved problems, each with its complexity and a written list of the corner cases tested.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
03Coding: custom structures, graphs and evolving problems
  • Build an LRU cache from scratch, then add TTL expiry, then a memory cap, treating each step as a new constraint arriving mid-interview
  • Implement BFS and DFS over a transfer or dependency graph for reachability, and use BFS for the fewest hops between two nodes, keeping a visited set so cycles do not loop forever
  • Find the cheapest currency conversion path with Bellman-Ford on -log(rate) edge weights (Dijkstra only when no weight is negative), and treat a negative cycle as an arbitrage loop to detect and report
  • Work the rolling failure-rate worked exercise (drill-coding-3) and compare your memory estimate with its expected result
  • Write a line-by-line log parser that skips malformed records and aggregates counts per key

Deliverable: A cache that went through three constraint stages, a BFS/DFS reachability solution, a Bellman-Ford conversion path with cycle detection and one completed worked exercise.

Practice prompt ↗Practice prompt ↗
04API, concurrency and code review
  • Design a deposit/withdraw ledger endpoint: request shape, idempotency key, response codes, and how two concurrent withdrawals on one account are serialised
  • Write the optimistic-concurrency update from the drill-sql-1 question and compare it with the soft-delete uniqueness worked exercise (drill-sql-2)
  • Take a small multi-threaded snippet with shared state, find the race, fix it with the narrowest change and explain the cost of the fix
  • Sketch a token-bucket rate limiter and say how it behaves across several nodes

Deliverable: One endpoint spec with idempotency and concurrency rules, one reviewed-and-fixed concurrent snippet and one rate-limiter sketch.

Practice prompt ↗Practice prompt ↗Worked solution ↗
05System design: money movement
  • Design the reported international transfer platform: requirements, consistency boundaries, the ledger write path, and what happens when a payout partner times out
  • Design an event-driven ledger with exactly-once processing: outbox, at-least-once delivery, and deduplication at the consumer
  • Run a shorter pass on real-time fraud scoring or FX rate calculation, stating what can be stale and what cannot
  • Work the replication-lag worked exercise (drill-design-4) and note which of its decisions apply to a transfer system

Deliverable: Two full designs and one shorter one, each with a written list of failure modes and recovery paths.

Practice prompt ↗Practice prompt ↗
06Deep dive, product partnership and behavioral stories
  • Whiteboard one past project from memory: components, what you owned, the failure you handled and two alternatives you rejected
  • Prepare STAR stories for the source's prompts: decision with incomplete information, tough code review feedback, speed versus tech debt, PM and tech lead disagreement, and a production incident with its post-mortem
  • Prepare a story about project slippage and how you communicated it, and one about pushing back on a product requirement
  • Practise giving one story immediately after solving a coding problem, without a break

Deliverable: A project diagram you can draw from memory and seven short STAR stories.

Practice prompt ↗Practice prompt ↗
07Mock virtual onsite
  • Run coding, design, a past-project deep dive and a behavioral session back to back, with at least one behavioral question inside a technical session
  • Work the stuck-partition debugging drill (drill-debugging-5) as a production-diagnosis warm-up and say your checks out loud in order
  • After the mock, note which session suffered from the one before it and where your opening habits (restating the problem, asking for constraints) disappeared
  • Reduce the week to a one-page card of rules you can recite from memory

Deliverable: Mock notes on how one session affected the next, plus a one-page card of rules you can recite.

Practice prompt ↗Practice prompt ↗Worked solution ↗

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

Candidates report behavioral questions inside coding and design sessions, not only in a separate conversation. Keep each story short enough to give between technical steps. Name the people involved, what was at stake, the decision you made and the result, with a number where one exists. For stories about live systems, also say how the change could have been rolled back.

Describe a situation where you had to make a complex technical decisio…

medium
behavioural and engineering judgement

Describe a situation where you had to make a complex technical decision with incomplete information.

Approach
  1. Close with what you would do differently, concretely.
  2. Give the blast radius: what could have broken, and what you measured.
  3. State the situation in two sentences and spend the rest on the reasoning.
Follow-up
  • What did you decide not to do, and why?
  • What would you do differently if you ran that again?

Tell callers you do not own that their integration breaks

medium
deprecationcompatibilitystakeholders

A field in a write endpoint's response must change shape. You own the endpoint; you do not own the four internal callers or the outbound webhook consumers who read it. Describe a deprecation you were responsible for: what you shipped first, how you established who was actually reading the field, the window you gave and what set its length, what you did about the consumer who never moved, and how you decided removal was safe. Name the signal you used, not the announcement you sent.

Approach
  1. Establish the reader set empirically rather than from a wiki of owners: per-field usage counters keyed by principal, or access logs attributed to a consumer. State the blind spot of whichever you pick, since a consumer that reads the field only on a monthly job will not appear in a week of logs.
  2. Ship additive first. Populate the new field alongside the old one so no reader is forced to move, which is also what keeps a rolling deploy safe, because old and new instances answer the same requests at the same time and a rollback must still find the old shape present.
  3. Set the window from the slowest legitimate consumer's release cadence, not from your calendar, and decide separately what to do for a consumer with no release process at all, such as an external webhook endpoint you can only email.
  4. Convert silence into evidence before you rely on it: a short, low-traffic removal window that makes a still-dependent consumer fail visibly and loudly while you are watching, rather than at three in the morning after you have moved on.
  5. State the removal criterion as a measurement with a duration attached, such as observed reads at zero across a full billing cycle, and keep the change reversible for one release after removal.
Follow-up
  • How would you detect a consumer that reads the field only during a monthly export?
  • One caller refuses to move and has a commercial relationship behind it. What changes in your plan and what does not?
  • After removal, what makes the change irreversible, and how long before you cross that line?

Ship under a deadline and bound the debt you chose

medium
paginationtechnical debttradeoffs

You have four days to ship a tenant-facing listing endpoint. The version you would defend uses keyset pagination over (tenant_id, status, updated_at DESC, resource_id DESC); the version you can finish uses LIMIT/OFFSET with no matching index. Describe a deadline call you actually made of this shape: what you shipped, what you knowingly deferred, how you bounded the damage with a mechanism rather than an intention, and the specific numeric condition that would force the follow-up. Name who you told and where you wrote it down.

Approach
  1. Name the deferred failure precisely instead of calling it slow. OFFSET n makes the database produce and discard n rows, so cost grows with page depth; without an index matching the sort, every matching row is read and sorted before the limit applies; and rows inserted between two page fetches shift across the boundary so items are skipped or repeated with nothing in the response to signal it.
  2. Bound the blast radius with something mechanical rather than a promise: cap maximum page depth, cap page size, restrict the endpoint to one internal caller, or keep it behind a flag. State which failure each cap removes and which it leaves standing.
  3. Attach a number to the trigger and wire it to an alarm: the first tenant crossing N resources, or the endpoint's p99 crossing its share of the 400 ms budget, so the debt announces itself instead of waiting to be remembered.
  4. Write it where the next engineer looks, which is the code and the ticket, not a chat message: what was deferred, why, the cap, and the trigger.
  5. Report what actually happened in your real example, including the case where the trigger never fired and the debt was correctly never repaid.
Follow-up
  • At what page depth does the offset version breach your latency budget, given your page size and row counts?
  • What breaks first when you switch to keyset pagination later, and what does a client holding an old page token see?
  • Who would have overruled you if you had asked for two more days, and did you ask?
  • 01

    Describe a situation where you had to make a complex technical decision with incomplete information.

  • 02

    Tell me about a time when you received tough technical feedback during a code review and how you addressed it.

  • 03

    Describe a project where you had to balance delivering quickly versus taking time to refactor tech debt.

  • 04

    How do you approach cross-functional alignment when product managers and technical leads disagree on priorities?

  • 05

    Share an example of a time when a system you owned failed in production, and how you managed the incident and post-mortem.

  • 06

    Describe a project where you had to push back against product requirements due to technical or architectural constraints.

PracHub interview preparation framework ↗
Is this an official Remitly interview guide?

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

PracHub interview research ↗
How long does the process take?

The source notes report roughly 3 to 5 weeks from the first screen to a decision, with variation between team locations and hiring cycles. Ask your recruiter for the expected timeline for your team.

PracHub interview research ↗
Can I choose my programming language?

Reportedly yes. Candidates describe using their preferred language, such as Java, Go, Python, C++ or TypeScript, for live coding and take-home work. Pick the one you can write cleanly and quickly without looking up standard-library calls.

PracHub interview research ↗
What does the virtual onsite cover?

The source describes the onsite, which candidates call the Power Day, as four to five sessions covering data structures and algorithms, system architecture, a deep dive into past technical work with hiring managers, and a product alignment discussion with product managers or cross-functional leads. Prepare for each as a different format, and expect behavioral questions within the technical sessions too.

PracHub Software Engineer practice ↗
Is there a take-home assignment?

It depends on location. The source mentions that in some international locations, Poland for example, candidates may receive a take-home task to build an API for a banking or transaction platform, followed by an onsite code review. Ask your recruiter whether it applies to you. If it does, handle validation, errors and concurrency explicitly, because you will have to explain those choices in the review.

PracHub Software Engineer practice ↗
How should system design prep differ for mid-level and senior candidates?

The source notes set a lower bar for mid-level candidates: clean service boundaries, API specs, data models and basic scaling. For senior and staff levels, they add deeper trade-offs: fault tolerance, distributed consistency, caching layers and cross-region resilience. Whatever your level, practise saying where your design needs strong consistency, which is usually the ledger, and where it can be stale.

PracHub interview research ↗
How are behavioral questions handled in technical rounds?

Candidates report that behavioral questions come up within coding and design rounds, not only in a separate conversation. Prepare short STAR stories so you can answer and get back to the technical problem quickly. Prepare especially for questions about decisions under uncertainty, code review feedback, tech debt trade-offs, disagreements over priorities and production incidents.

PracHub interview research ↗
Sources & methodology 3 sources ↗

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