Practice problem · Uber · Medium

Ledger Transfers: Find the Bugs, Add the Limit

A small ledger service: accounts hold balances in cents and money moves between them with POST /transfers. 3 stages in Python with an AI assistant. Pro.

Stage 1 of 3: Wrong balances

Background. A small ledger service: accounts hold balances in cents and money moves between them with POST /transfers. API.md is the contract every endpoint is held to; app.py wires the routes in urls.py to the handlers in views_accounts.py and views_transfers.py, over the database in db.py. The server has no clock: every request carries X-Request-Time.

The ticket says transfers sometimes end with the wrong balances: money that was sent does not arrive, a transfer from an account to itself changes that account's balance, and a transfer of nothing is accepted. Five tests in tests/test_part1_transfers.py fail.

Find out why and fix it. Don't change the read-only files.

Done when Submit goes green.

Constraints

  • Python 3.12+ standard library only
  • Time limit: 10 seconds per test file
  • Editable: urls.py, views_accounts.py, views_transfers.py, idempotency.py
  • Read-only: API.md, framework.py, db.py, models.py, serializers.py, app.py, test_helpers.py and all tests/test_*.py files

What comes after stage 1

The next stages open once the tests for the one before them pass. Each raises the bar, the way an interviewer does in the room.

  1. Stage 2: Posted twice. Clients retry on timeouts; the contract says what a retry must get back, and the server is not keeping it.
  2. Stage 3: A daily limit. A cap on what an account sends per day, built from the contract: the endpoint, the route and the check in the right place.

The files you get

  • Yours to edit: urls.py, views_accounts.py, views_transfers.py, idempotency.py.
  • Read-only: API.md, framework.py, db.py, models.py, serializers.py, app.py, test_helpers.py, tests/__init__.py.
  • Tests you can read and run: tests/test_part1_transfers.py. Hidden tests run on Submit.

The round: an agent in the editor

The assistant here works like the one in the interview IDE. It reads your files, runs code and proposes changes, and you accept or reject each one. It doesn't volunteer ideas, so what gets built is what you asked for. Along the way the interviewer asks about your decisions, and at the end the report says what you checked and what you accepted unread.

Frequently asked, briefly answered

Is Ledger Transfers: Find the Bugs, Add the Limit free?

It is a Pro problem. Free plan includes one complete problem, plus the first stage of several more, so you can see how a round works before you pay.

Which company asks something like this?

Uber. It is modelled on Uber's round: Virtual-onsite AI-assisted coding and debug round (since spring 2026): a HackerRank IDE shaped like Cursor with a built-in assistant, a small runnable app preloaded, a failing scenario from the interviewer to diagnose and fix, sometimes a small feature on top; your prompts are part of what is graded.

Do I bring my own AI tool?

No. The assistant is in the editor, same as in the interview IDEs at Meta, Stripe and Amazon. What you choose at Begin is the format: an agent that proposes changes you accept or reject, an answer-only assistant that can't write code, or no assistant at all.

What does the interviewer ask?

3 questions along the way about your own code, and one at the end about the whole session. A weak answer gets one follow up. The answers go into the report, which ends with a hire or no hire verdict.

Start the problem

Sign in and the problem opens where you left it. New here? An account takes a minute to create, and the Pro plan starts at the first stage of this problem.

Start this problem → Sign in

More like it: every practice problem, how Uber runs its AI round, the AI coding interview guide.