Unit 1 · Algorithms · Lesson 23 of 24
Explaining solutions aloud
Step 1: Learn the ideas
- Restating and clarifying requirements
- Constraints as hints about target complexity
- Brute force first
- Optimizing by naming the bottleneck
- Narrating while coding
- Testing aloud
- Complexity and tradeoff discussion
- Recovering when stuck and using hints
- Pacing within a 45 to 60 minute round
- Expectations by level
Why it matters
Interviewers see only what you say and type. A candidate who silently produces a correct solution gives less evidence than one who explains choices, catches a bug by testing and weighs alternatives, and a candidate who reaches a slightly weaker solution with clear reasoning can still do well. Several employers' public preparation pages make the same points: the path through the problem matters, ask clarifying questions, and test before declaring the solution done. Communication is also the part of interview skill that transfers most directly to the job, since code review, design discussion and incident response reward the same habits.
Core ideas
A reliable protocol for a 45 to 60 minute coding round:
- Clarify (2-5 minutes). Restate the problem in your own words. Ask about input size and value ranges, which hint at the target complexity (n around 10^5 usually rules out O(n^2)), duplicates, empty or invalid input, and the exact output format. Work one small example by hand and confirm it.
- Brute force (1-3 minutes). Describe the obviously correct approach and its complexity. This shows you understand the problem, gives you a fallback and often exposes the bottleneck ("we recompute every window's sum").
- Improve. Name the insight that removes the bottleneck: "a hash map makes the lookup constant time", "the window only changes at its ends", "this is a shortest path with unit weights". Check the idea on the example and agree on the approach before coding.
- Code with narration. Speak at the level of intent: "this loop keeps the window free of repeated characters; when that breaks, I move the left pointer". Use clear names and small helpers. If you skip a detail such as input parsing, say so and offer to fill it in.
- Test. Trace the code you wrote on the example, then on the edge cases you listed earlier. When you find a bug, explain its cause before fixing it.
- Analyze and discuss. State time and space complexity, then at least one tradeoff: memory versus time, simplicity versus asymptotic speed, behavior on adversarial input, or what changes for streaming data or concurrent access.
Recovering when stuck. Long silence is the worst outcome, so say what you are trying. Useful moves: solve a smaller or more constrained version (sorted input, two elements, small values); work a second example by hand and look for structure; ask what the constraints suggest; run through candidate patterns (sorting, hashing, two pointers, BFS, heap, DP) and say why each does or does not fit; or ask a focused question such as "may I modify the input?". Hints are normal in collaborative interviews. Acknowledge a hint, connect it to your reasoning and use it, rather than ignoring it or abandoning your plan.
Pacing. In a 45-minute round, aim to start coding by roughly the 15 to 20 minute mark so that testing time remains. If the optimal approach is not coming, a clean, tested brute force with an explanation of how you would improve it is better than an unfinished clever solution.
By level. Graduate candidates are mainly expected to reach a working, analyzed solution with clear reasoning, possibly with prompting. Mid-level candidates are expected to drive the process with less help, write cleaner code and handle follow-ups. Senior candidates are expected to resolve ambiguity themselves, discuss tradeoffs and extensions fluently (scale, concurrency, API shape, testing strategy) and keep the conversation structured; a correct but unexplained solution reads as weaker at senior level.
Common misconceptions
- "Jumping straight to the optimal solution looks strongest." Without a stated brute force and reasoning, the interviewer cannot tell insight from recall, and you lose your fallback.
- "Narrating means reading code aloud." Explain intent and invariants; the interviewer can read syntax.
- "Asking questions signals weakness." Clarifying requirements is part of the assessment, and unstated assumptions are a common source of misunderstandings.
- "Taking a hint means failing." Using a hint well is evidence of collaboration; ignoring one is the bigger problem.
- "Testing is optional when time is short." Tracing even one case catches the bugs the interviewer would otherwise point out.
How to approach it
Watch the Jane Street mock interview and note when the candidate clarifies, proposes, codes and tests, and what the interviewers say about communication afterwards. Then practice the protocol aloud on problems you have not seen, with a timer, ideally recorded or with a partner, and review for silent stretches, unexplained jumps and untested code. Before a real interview, read that company's official preparation page for format details such as language choice, coding environment and tool policy, and follow it over generic advice.
Suggested order
- 1Read the Jane Street software engineering preparation page and the Microsoft technical interviewing guidance, and list the behaviors they say interviewers look for.
- 2Watch the Jane Street mock interview end to end; pause after each phase and write down what the candidate did to clarify, propose, code and test.
- 3Write the six-step protocol on a card and practice it aloud on Two Sum and Top K Frequent Elements with a 30-minute timer.
- 4Record yourself solving Merge Intervals and Course Schedule; review the recording for silent stretches, unexplained jumps and missing tests.
- 5Practice recovery on a problem slightly above your level, such as LRU Cache or Time Based Key-Value Store: when stuck, apply the recovery moves aloud before looking at any hint.
- 6Do at least one mock with a partner who changes a requirement midway, and practice adapting the design aloud.
Step 2: Check off what you can do
Tap each one you can genuinely do or explain. Each earns 10 XP.
Step 3: Go deeper
Jane Street: Mock interview (retired question)Start here
Jane StreetRecorded mock interview on a retired question, followed by the interviewers’ advice on communication, clear and correct code, and practice.
Open(opens in a new tab)Link responded, 5 Oct 2026Jane Street: Preparing for a software engineering interviewStart here
Jane StreetOfficial description of what software engineering interviewers value: the process matters more than the final snapshot, clarity, knowing your language and knowing what you do not know.
Open(opens in a new tab)Link responded, 5 Oct 2026Microsoft hiring tips: technical interviewing
Microsoft CareersOfficial guidance to ask clarifying questions, plan before implementing, write real code rather than pseudocode, and test before saying you are done.
Open(opens in a new tab)Link responded, 5 Oct 2026Two Sigma: Interviewing for software engineering
Two SigmaOfficial tips: analyze before coding, ask for clarification, look beyond the brute force, and accept hints when stuck.
Open(opens in a new tab)Link responded, 5 Oct 2026A Google engineer shares her technical interview tips (2022)
Google (The Keyword blog)Dated, personal advice published by Google; its points on practicing thinking aloud and using hints match this protocol.
Open(opens in a new tab)Link responded, 5 Oct 2026
Step 4: Practice
The goal is the protocol, not the problems. Solve each one aloud with a timer, recorded or with a partner, and score yourself on clarification, brute force, narration, testing and complexity. Prefer problems you have not solved recently; communicating a memorized solution trains the wrong skill. The design problems at the end suit partner mocks: ask your partner to add a requirement midway (for example, allowing duplicates).
- Jane Street mock interview (retired question)Open(opens in a new tab)Not attemptedJane Street
- Two SumLeetCode(opens in a new tab)Not attemptedLeetCode
- Top K Frequent ElementsLeetCode(opens in a new tab)Not attemptedLeetCode
- Merge IntervalsLeetCode(opens in a new tab)Not attemptedLeetCode
- Course ScheduleLeetCode(opens in a new tab)Not attemptedLeetCode
- LRU CacheLeetCode(opens in a new tab)Not attemptedLeetCode
- Time Based Key-Value StoreLeetCode(opens in a new tab)Not attemptedLeetCode
- Insert Delete GetRandom O(1)LeetCode(opens in a new tab)Not attemptedLeetCode
Record attempts on each problem’s page (+15 XP, +10 more when solved on your own).
Step 5: Test yourself
Answer each one out loud or on paper before you finish the lesson.
- Question 1What do you ask before writing any code, and why does input size matter?
- Question 2How do you describe a bottleneck and the insight that removes it?
- Question 3What does good narration sound like for a loop with an invariant?
- Question 4Which three concrete things do you do when stuck?
- Question 5How do you respond to a hint you do not immediately understand?
- Question 6How do expectations differ between a graduate and a senior coding interview?
You’re done when you can
- Complete three timed, recorded practice sessions that follow the full protocol, with no silent stretch longer than about a minute.
- State a brute force with its complexity before the optimized approach in every session.
- Find and explain at least one bug through your own testing in a session, before running the code or being told.
- Complete one mock with a partner that includes a mid-problem requirement change, and write down the feedback.
Finish the lesson
Unlocks next: Mock interviews and timed practice


