Directing the AI: keep the plan, ask for one step at a time, and hand over what the step must fit
Plan the steps yourself, then ask for one at a time, handing over what that step's code must fit.
Predict first
Before you read: predict
Phase 2 of a practice AI-enabled round on ExamHall's proctor service (ExamHall is invented). The task: drop any candidate's proctor events beyond 5 a second, and count the drops. She has read the project's EventBus and decided on a sliding window per candidate.
Going by Hello Interview's report of Meta's AI-enabled round (read 2026-10-15), which first prompt fits how the candidates who did well used the assistant?
The 30-second version
Keep the plan yourself: the steps and the approach. Ask for one step at a time, and give each ask what the code must fit: the interface it calls, the rules that change it, and a test that fails until the step is right. The assistant implements; you lead.
Plan the steps yourself, then ask for one at a time, handing over what that step's code must fit.
How it works
Step 1 of 12
In the kitchen
- The storyboard kept on her own desk → Your plan of steps (step 1)
Analogy: A hand-drawn animation studio, a key animator and her in-betweener
Rosa animates a short film's walk cycles. The storyboard stays on her desk; she hands her in-betweener one shot at a time. With each shot go the character's model sheet, so the drawings keep his proportions; the timing chart, twelve frames easing out; and last week's pencil test, where his foot slid along the floor. She does not write "make the walk better": she names the two key poses the twelve drawings run between.
| At the animation desk | With the assistant |
|---|---|
| The storyboard kept on her own desk | Your plan of steps (step 1) |
| One shot per handover | One step per ask (step 9) |
| The model sheet clipped to the shot | The interface the code must fit (step 6) |
| The timing chart: twelve frames, easing out | The rules that change the code (step 7) |
| Last week's pencil test, the foot sliding | A test that fails now (step 8) |
Breaks down when: an in-betweener handed no model sheet comes back and asks for one, while an assistant fills the gap with a guess and says nothing. Wrong inference: "if my ask leaves something out, the assistant will ask."
In real terms: before you send an ask, it names one step and carries what that step's code must fit.
What the sources support, and what they don't. S1 is Hello Interview's guide to Meta's AI-enabled round, built from candidates' reports and one quoted internal source, not Meta's own statement. S2 is Business Insider's report of an internal Google document on a pilot, confirmed by a Google spokesperson; the pilot may change. Both were read on 2026-10-15 and are valid as of 2026-10-15.
Try it
Answer first, then check. Nothing is saved.
Question 1 of 7
Phase 3 of an assisted round on a payments ledger: on the larger statement files her matcher, which compares every bank line with every ledger entry, is now too slow. She expects a map from transaction id to ledger entry to fix it.
Going by Hello Interview's report of Meta's round (read 2026-10-15), what does she ask the assistant next?
Question 2 of 7
Phase 2 on a payments ledger. Her ask: “Write refundsAllowed(history, nowMs): true while the account has had fewer than 3 refunds in the last hour.” history is one account's refunds, each { atMs, status }, with times in milliseconds. The reply she pasted:
Which sentence, had it been in her ask, would the reply above break?
// refunds.mjsexport function refundsAllowed(history, nowMs) { const hourAgo = nowMs - 3_600_000; const recent = history.filter((r) => r.atMs > hourAgo && r.status === 'settled'); return recent.length < 3;}Question 3 of 7
Phase 2 again: block a refund once an account has had three refunds in the last hour, and show on the support dashboard how many refund requests were blocked today. She has planned four pieces, one ask each, and will run each reply's test the moment she pastes it, with nothing stubbed or faked:
refundAllowed(history, nowMs)decides from how many of the account's refunds fall in the last hourblockedToday()is the dashboard's figure: how many refund requests were blocked since midnightlastHourRefunds(history, nowMs)picks out the account's refunds from the last houronRefundRequested(event)blocks a refund request that the three-an-hour rule refuses, and counts each block
Put her four asks in the order that lets each reply's test run the moment it lands.
Your order
- 1empty
- 2empty
- 3empty
- 4empty
Tap the lines in the order you expect.
Question 4 of 7
Next step on the same ledger. The brief: settle(entries) returns each account's balance in pence; refunds are negative entries and count toward the balance, and a balance never goes below 0. The ticket behind this step: account a paid 500 pence and was then refunded 800. The current code:
She will send the ask “Make refunds count in settle” with one test attached.
Which test does she attach?
// settle.mjsexport function settle(entries) { const out = {}; for (const e of entries) { if (e.amountPence <= 0) continue; out[e.account] = (out[e.account] ?? 0) + e.amountPence; } return out;}Question 5 of 7
The ledger's next step: flagged(entries) returns, sorted, the accounts whose refunds total more than 50,000 pence. Refunds are negative entries; payments do not count; a total of exactly 50,000 is not flagged. The project's sandbox/flag.mjs holds only a stub. ask.md is the ask you would send (the one step, the interface lines it must fit, the rules that change the code); flag.test.mjs is a node:test file to attach that fails on the stub and on any reply that gets one of the three rules wrong.
In 15 minutes, write ask.md and flag.test.mjs for this step.
Question 6 of 7
Chat app, assisted pair round. She asked: “Write muteUser(store, roomId, userId, untilMs): mute a user in a room until a time, and return how many users the room has muted.” She did not paste the project's room store:
The reply:
// mute.mjs
export async function muteUser(store, roomId, userId, untilMs) {
const room = await store.getRoom(roomId);
room.muted[userId] = untilMs;
await store.saveRoom(room);
return Object.keys(room.muted).length;
}
Run against makeRoomStore(), what does muteUser(store, 'r1', 'u9', 5000) do?
// room-store.mjsexport function makeRoomStore() { const rooms = new Map([['r1', { id: 'r1', mutedUntil: new Map() }]]); return { async get(roomId) { return rooms.get(roomId); }, async put(room) { rooms.set(room.id, room); }, };}Question 7 of 7
A mock of the code-comprehension round in Google's pilot, as Business Insider reported it: an existing video-streaming service whose subtitle-sync test fails, with Gemini as the assistant. She has 20 minutes.
Going by that report and Hello Interview's guide (both read 2026-10-15), which plan fits what the round evaluates?
Go deeper
Pro tip
Keep a three-line template in your notes and fill it in before you type to the assistant: “Step: ___. It must fit: ___. Rules: ___.” Any line you cannot fill is a decision you are about to hand to the reply.
Related lessons
Checked against the tools and docs as of 2026-10-15.