Capstone: Full Mock Loop & Self-Exam
Rehearse the whole loop under realistic conditions and grade yourself like an interviewer
Mock coding screen
After this you can complete a timed systems-flavored problem under realistic constraints.
Cursor's coding screens are not LeetCode in disguise. They hand you a slice of the actual job - a hot, streaming, failure-prone request path - and watch how you reason about it with the clock running.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
Each stage below is a mock you'll run on yourself in this module.
Set a real timer. Open your primary language, turn the AI assist on the way the loop allows and solve the prompt below in 45 minutes. The point is to rehearse the conditions, not to admire a clean solution you wrote at leisure.
The promptDrill
Implement a consumer for a streaming token endpoint. It opens an SSE connection to a model provider, yields tokens as they arrive and has to survive the messy reality of a hot path: a slow first byte, a connection that dies mid-stream and a caller who cancels.
- Stream tokens from a mock provider that emits Server-Sent Events and may stall or drop the connection partway through.
- Enforce a time-to-first-token timeout and a separate idle timeout between tokens - a stream that goes quiet for 2s is dead, not slow.
- Support cancellation from the caller so an abandoned editor request stops consuming a provider slot immediately.
- On a retriable failure before any token has streamed, retry with exponential backoff and full jitter, bounded by a total retry budget.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
The first-token gate is the line your whole retry policy hangs on.
Narrate the boundary you will not cross before you write a line: “Once I've streamed a token to the user, I won't blind-retry - that would duplicate output in the editor. Retries only apply to failures before first token.” Stating the idempotency rule up front is the senior signal. It shows you know the failure modes are the problem, not the happy path.
A reference solve (TypeScript)One correct shape
type Token = { text: string };
interface StreamOpts {
ttftMs: number; // budget to first token
idleMs: number; // max gap between tokens
maxRetries: number; // retry budget (pre-first-token only)
signal?: AbortSignal;
}
async function* streamTokens(
open: (signal: AbortSignal) => Promise<AsyncIterable<Token>>,
opts: StreamOpts,
): AsyncGenerator<Token> {
for (let attempt = 0; ; attempt++) {
const ctrl = new AbortController();
const onAbort = () => ctrl.abort();
opts.signal?.addEventListener("abort", onAbort, { once: true });
let sawToken = false;
try {
const stream = await withTimeout(open(ctrl.signal), opts.ttftMs, ctrl);
let deadline = opts.idleMs;
for await (const tok of stream) {
sawToken = true;
yield tok; // user has now seen output
deadline = opts.idleMs;
}
return; // clean end of stream
} catch (err) {
// Once a token streamed, a retry would duplicate output: fail loudly.
if (sawToken || opts.signal?.aborted) throw err;
if (attempt >= opts.maxRetries || !retriable(err)) throw err;
const backoff = Math.random() * Math.min(2 ** attempt * 100, 2_000);
await sleep(backoff, opts.signal);
} finally {
opts.signal?.removeEventListener("abort", onAbort);
}
}
}Three places candidates leak: a timeout that never aborts the underlying socket (so the slot is held even after you give up), a retry that fires after a token already streamed and a backoff with no jitter that synchronizes every client into a thundering retry at the same instant. If your solve has any of these, that is your study gap, not a nitpick.
Score your own tapeSelf-rubric
- Dimension
- Correctness
- Pass looks like
- Tokens stream in order, clean end terminates, cancel stops consumption
- Red flag
- Buffers the whole response then returns it
- Dimension
- Failure handling
- Pass looks like
- TTFT and idle timeouts both abort the socket; retry only pre-first-token
- Red flag
- One timeout for everything; retries after partial output
- Dimension
- Complexity reasoning
- Pass looks like
- Says backoff is bounded, budget caps total wait, jitter named
- Red flag
- Unbounded retries or fixed backoff
- Dimension
- Reviewable code
- Pass looks like
- Named constants, one responsibility per function, no dead branches
- Red flag
- Magic numbers, nested try/catch soup
- Dimension
- Narration
- Pass looks like
- Explained the idempotency rule and each accept/reject of AI output
- Red flag
- Pasted a block and could not explain a line
| Dimension | Pass looks like | Red flag |
|---|---|---|
| Correctness | Tokens stream in order, clean end terminates, cancel stops consumption | Buffers the whole response then returns it |
| Failure handling | TTFT and idle timeouts both abort the socket; retry only pre-first-token | One timeout for everything; retries after partial output |
| Complexity reasoning | Says backoff is bounded, budget caps total wait, jitter named | Unbounded retries or fixed backoff |
| Reviewable code | Named constants, one responsibility per function, no dead branches | Magic numbers, nested try/catch soup |
| Narration | Explained the idempotency rule and each accept/reject of AI output | Pasted a block and could not explain a line |
Watch your screen recording with this open. Mark the timestamp of each red flag.
Stretch: hedged requests with a cost cap
If you finished early, add request hedging: when TTFT exceeds the p95 budget, fire a second request to a backup provider and take whichever streams first, then cancel the loser. The cap is the senior detail - at most one hedge per request, because a naive hedge doubles your provider bill at exactly the moment the fleet is already struggling.
Cursor lets you use AI in the screen and then demands you understand every line. After your solve, close the editor and re-implement the timeout-and-cancel logic from memory on paper. If you can't, a raw-output submission would have failed the round - the interviewer's follow-up (“why full jitter and not just exponential?”) is exactly the question raw paste can't survive.
Takeaway. On a hot streaming path, the failure modes are the problem. Abort the socket on timeout, cancel cleanly and retry only before the first token has reached the user.
Self-check
QWhy is it unsafe to retry a streaming inference request after the first token has already been sent to the user?
Mock take-home
After this you can scope and ship a mini inference gateway in a fixed time box.
The take-home is the JD's three flagship projects in miniature: a provider abstraction, failover and admission control, small enough to finish in a sitting but real enough to reveal whether you ship production code or a demo.
Box it at three hours and stop at the buzzer. What you choose to leave out and how honestly you document it, is graded as hard as what you build.
The promptDrill
Build a tiny inference gateway in front of two mock providers. It exposes one request interface, hides each provider's quirks behind an adapter and stays up when a provider misbehaves.
- 1Provider-adapter interface. One interface both mock providers implement (
complete(req): AsyncIterable<Token>). Provider A is fast but flaky; Provider B is slower but steady. Onboarding a third should be a new adapter, not a rewrite. - 2Timeouts and retries. Per-attempt timeout, bounded retry budget with jittered backoff and the idempotency rule from the coding screen carried through.
- 3Failover. When Provider A fails health checks or trips a circuit breaker, route to Provider B without the caller noticing. Define what counts as unhealthy.
- 4Admission control. A token-bucket rate limiter and a concurrency cap so a traffic spike sheds load instead of melting both providers.
- 5Metrics. Emit at minimum: request latency (p50/p95/p99), error rate by provider and a failover counter. Numbers you could actually alert on.
Deliver a short README with four parts: the design and why, the tradeoffs you made under the time box, what you instrumented and what you'd do next with another day. A senior reviewer reads the README first. "I used a single global token bucket; per-tenant fairness is the obvious next step but I ran out of time" scores higher than a fairness scheme that's subtly broken and unmentioned.
Where the time goesThree-hour budget
- Block
- Skeleton + adapter interface
- Time
- ~30 min
- Done means
- Two adapters behind one interface, happy path streams end to end
- Block
- Timeouts, retries, failover
- Time
- ~60 min
- Done means
- Kill Provider A, requests still succeed via B, failover counter ticks
- Block
- Admission control
- Time
- ~40 min
- Done means
- Spike test sheds excess with 429s instead of unbounded queue growth
- Block
- Metrics + README
- Time
- ~50 min
- Done means
- Percentiles emitted, README states design, tradeoffs, gaps, next steps
| Block | Time | Done means |
|---|---|---|
| Skeleton + adapter interface | ~30 min | Two adapters behind one interface, happy path streams end to end |
| Timeouts, retries, failover | ~60 min | Kill Provider A, requests still succeed via B, failover counter ticks |
| Admission control | ~40 min | Spike test sheds excess with 429s instead of unbounded queue growth |
| Metrics + README | ~50 min | Percentiles emitted, README states design, tradeoffs, gaps, next steps |
If you fall behind, cut the stretch, not the failure handling.
The classic take-home failure is gold-plating the happy path and never killing a provider. If your submission has a beautiful adapter layer but you never tested what happens when Provider A returns 503 mid-stream, you've optimized the part nobody is grading. Spend your last 30 minutes breaking your own system and showing it recovers.
Self-rubricGrade like the reviewer
- Dimension
- Production quality
- Pass
- Config-driven, no hardcoded provider URLs, clean shutdown
- Red flag
- Demo-grade with TODOs in the hot path
- Dimension
- Correct failure handling
- Pass
- Failover verified by an actual fault-injection test
- Red flag
- Failover code exists but was never exercised
- Dimension
- Readable
- Pass
- A reviewer can trace a request in five minutes
- Red flag
- Logic smeared across files with no seams
- Dimension
- Honest about gaps
- Pass
- README names the cut corners explicitly
- Red flag
- README oversells; reviewer finds the gaps for you
| Dimension | Pass | Red flag |
|---|---|---|
| Production quality | Config-driven, no hardcoded provider URLs, clean shutdown | Demo-grade with TODOs in the hot path |
| Correct failure handling | Failover verified by an actual fault-injection test | Failover code exists but was never exercised |
| Readable | A reviewer can trace a request in five minutes | Logic smeared across files with no seams |
| Honest about gaps | README names the cut corners explicitly | README oversells; reviewer finds the gaps for you |
Takeaway. Ship the failure handling and a brutally honest README. Reviewers trust the candidate who names their own gaps over the one who hides them.
Self-check
Mock system-design round
After this you can design the full inference path out loud against a timer.
This is the round where Cursor's actual job becomes the whiteboard. You're designing the platform that every Tab keystroke, Agent run and chat message flows through and the interviewer is listening for numbers, not adjectives.
Set 45 minutes. Talk the whole time. The prompt is deliberately the company's real problem.
“Design Cursor's inference gateway, cross-provider failover and backpressure for millions of requests across Tab completions, Agent sessions and chat. Put numbers on your latency, cost and failure budgets.”
Open with the budgets, not the boxesFirst five minutes
Before drawing a single box, segment the traffic by its latency and cost profile. The three surfaces are not one workload and saying so immediately is the strongest opening move you have.
- Surface
- Tab completion
- Latency budget
- Sub-100ms TTFT or it's useless
- Volume / cost shape
- Highest QPS, small tokens, cheapest per call
- Failure posture
- Shed early; a dropped completion is invisible
- Surface
- Chat
- Latency budget
- First token < ~1s, then stream
- Volume / cost shape
- Medium QPS, long outputs
- Failure posture
- Degrade to a smaller model before failing
- Surface
- Agent / ComposerCursor's own fast coding model, tuned for the editor and priced well below frontier models; the recommended day-to-day model for executing a plan.
- Latency budget
- Seconds acceptable, long-running
- Volume / cost shape
- Lowest QPS, most tokens, most expensive
- Failure posture
- Highest value; protect it, retry hardest
| Surface | Latency budget | Volume / cost shape | Failure posture |
|---|---|---|---|
| Tab completion | Sub-100ms TTFT or it's useless | Highest QPS, small tokens, cheapest per call | Shed early; a dropped completion is invisible |
| Chat | First token < ~1s, then stream | Medium QPS, long outputs | Degrade to a smaller model before failing |
| Agent / ComposerCursor's own fast coding model, tuned for the editor and priced well below frontier models; the recommended day-to-day model for executing a plan. | Seconds acceptable, long-running | Lowest QPS, most tokens, most expensive | Highest value; protect it, retry hardest |
Different budgets justify different routing and shedding policy. Lead with this.
Walk the request end to endThe journey
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
Trace this aloud; the gates are where the interviewer probes for numbers.
- 1Edge / admission. Request lands, classified by surface and tenant. Admission control checks the token bucket and concurrency limit for its QoS class. Over budget? Tab sheds with a fast no-op; Agent queues.
- 2Gateway / normalization. Map the internal request to the chosen provider's API shape via its adapter. Attach an idempotency key and a deadline that shrinks as the request ages.
- 3Routing decision. Pick a provider by health, current latency, price and remaining rate-limit headroom. Tab prefers the cheapest fast provider; Agent prefers the highest-quality one.
- 4Streaming passthrough. Proxy SSE tokens straight to the client. Track TTFT and inter-token latency live; an idle stream past budget is aborted.
- 5Failover branch. Pre-first-token failure or breaker open routes down the fallback ladder. Post-first-token failure surfaces a clean error, never a duplicate stream.
- 6Observe. Emit per-provider latency percentiles, error rates, failover counts and cost per request. These feed both the SLO dashboards and the routing decision in step 3.
Enumerate the failure branches out loudWhere points are won
Health-based routing sheds traffic off it before the breaker even trips.
Hedge Tab requests to a second provider past the p95 TTFT, capped at one hedge.
Circuit breaker opens, all traffic flows to the fallback ladder.
Quality may drop a notch; availability holds. Say which you're trading.
Admission control sheds low-value Tab first, protects Agent.
Backpressure caps concurrency so you never cascade into the providers.
Prefix/response cache absorbs repeat work.
Route price-sensitive surfaces to cheaper models; flag the UX risk.
Two ways this round goes sideways: designing one uniform pipeline for all three surfaces (it shows you haven't internalized the latency/cost differences) and hand-waving the numbers. If you say "low latency," the follow-up is "how low, measured how and what's your p99?" Have the answer before they ask.
Reserve two minutes for safety. A routing change ships behind a flag, canaries on a small traffic slice per surface and auto-rolls back on an SLO breach. Blast-radius containment - a bad config can't take down all three surfaces at once - is the thing senior reviewers listen for and most candidates forget.
Close by comparing your answer to the worked design in the routing and failover module. The gaps you find are this round's study list.
Takeaway. Open by segmenting Tab, chat and Agent by latency and cost budget. Numbers on everything, an explicit failover ladder and two minutes on blast radiusHow much breaks if a change goes wrong; the scope of potential damage. win this round.
Self-check
QUnder a sudden traffic spike that exceeds total provider capacity, which traffic should your admission control shed first and why?
Mock inference deep-dive
After this you can defend the mechanics behind your design.
The design round tests whether you can shape the system. This round tests whether you understand the machine underneath it - and it moves fast, so vague answers get caught immediately.
Treat the rubric as a gap finder, not a score to admire. Mark the weakest proof, turn it into one practice rep and keep the artifact you would show an interviewer.
Have a partner read the rapid-fire prompts and stop you the instant you hand-wave. The hand-wave is the signal; mark it and study it.
Rapid-fire fundamentalsKnow these cold
- Term
- Prefill vs decode
- The 20-second answer
- Prefill processes the whole prompt in parallel (compute-bound, builds the KV cache). Decode generates one token at a time, reusing the cache (memory-bandwidth-bound).
- Term
- KV cache
- The 20-second answer
- Stored key/value tensors for past tokens so decode doesn't recompute attention over the whole prompt each step. Grows with context length; it's the memory pressure that limits batch size.
- Term
- Prefix caching
- The 20-second answer
- Reuse the KV cache for a shared prompt prefix across requests (system prompts, repo context). Turns repeat prefill into a cache hit; huge for Cursor's repeated context.
- Term
- Continuous batching
- The 20-second answer
- Add and evict requests from the running batch per decode step instead of waiting for the slowest to finish. Keeps the GPU saturated; the main lever for throughput.
- Term
- TTFT vs ITL
- The 20-second answer
- Time-to-first-token is dominated by prefill and queueing; inter-token latency is the decode cadence. Tab lives or dies on TTFT; long chat outputs feel slow on bad ITL.
- Term
- Provider economics
- The 20-second answer
- Per-token pricing differs for input vs output; rate limits cap your headroom; batching and cache hits are what move cost per request, not the sticker price.
| Term | The 20-second answer |
|---|---|
| Prefill vs decode | Prefill processes the whole prompt in parallel (compute-bound, builds the KV cache). Decode generates one token at a time, reusing the cache (memory-bandwidth-bound). |
| KV cache | Stored key/value tensors for past tokens so decode doesn't recompute attention over the whole prompt each step. Grows with context length; it's the memory pressure that limits batch size. |
| Prefix caching | Reuse the KV cache for a shared prompt prefix across requests (system prompts, repo context). Turns repeat prefill into a cache hit; huge for Cursor's repeated context. |
| Continuous batching | Add and evict requests from the running batch per decode step instead of waiting for the slowest to finish. Keeps the GPU saturated; the main lever for throughput. |
| TTFT vs ITL | Time-to-first-token is dominated by prefill and queueing; inter-token latency is the decode cadence. Tab lives or dies on TTFT; long chat outputs feel slow on bad ITL. |
| Provider economics | Per-token pricing differs for input vs output; rate limits cap your headroom; batching and cache hits are what move cost per request, not the sticker price. |
Scenario: a provider's p99 spikes 3x at peakReason it out loud
- 1Measure before acting. Split TTFT from ITL. Rising TTFT points at queueing or prefill saturation upstream; rising ITL points at decode contention or the provider shrinking your batch share.
- 2Localize. Is it one provider or all of them? One region? Correlate with your QPS - did the spike come from us or them?
- 3Mitigate. Shift health-based routing weight off the slow provider, enable hedging for the latency-critical surfaces with the cost cap and let admission control shed low-value Tab to protect Agent.
- 4Verify. Watch p99 per surface recover and watch the hedge cost and failover counters so the cure isn't worse than the disease.
"First I'd separate TTFT from ITL, because they point at different causes. If TTFT is the spike, I'd suspect queueing and shift routing weight off that provider, then hedge the Tab traffic with a one-hedge cap. I'd confirm with per-surface p99 and keep an eye on hedge cost so I'm not paying double to fix a 5-minute blip."
Scenario: cost is 30% over budgetName the lever and the risk
- Lever
- Prefix / response caching
- How it cuts cost
- Repeat prefills and identical requests become hits
- UX risk to name
- Stale responses if invalidation is wrong; correctness over savings
- Lever
- Cheaper-model routing
- How it cuts cost
- Route price-sensitive surfaces to a smaller model
- UX risk to name
- Quality drop users can feel, especially in Agent
- Lever
- Better batching
- How it cuts cost
- Higher GPU utilization, lower cost per token
- UX risk to name
- Larger batches can raise ITL; watch tail latency
- Lever
- Fallback ladder tuning
- How it cuts cost
- Prefer cheaper providers when quality headroom allows
- UX risk to name
- More failover hops add latency; cap the ladder depth
| Lever | How it cuts cost | UX risk to name |
|---|---|---|
| Prefix / response caching | Repeat prefills and identical requests become hits | Stale responses if invalidation is wrong; correctness over savings |
| Cheaper-model routing | Route price-sensitive surfaces to a smaller model | Quality drop users can feel, especially in Agent |
| Better batching | Higher GPU utilization, lower cost per token | Larger batches can raise ITL; watch tail latency |
| Fallback ladder tuning | Prefer cheaper providers when quality headroom allows | More failover hops add latency; cap the ladder depth |
Every cost lever has a latency or quality cost. Naming it is the senior move.
If you said "add caching" without saying what you cache, the hit-rate you'd expect or how you invalidate it, that's a hand-wave. If you said "route to a cheaper model" without naming which surface can absorb the quality hit, that's a hand-wave. Write each one down. They are your exact study gaps before the loop.
Takeaway. Every fix starts by splitting TTFT from ITL and every cost lever names its latency or quality cost. Vague answers are the study list this round hands you.
Self-check
QWhy is continuous (in-flight) batching a bigger throughput lever than simply increasing a fixed batch size?
Mock behavioral round
After this you can deliver your stories and 'why Cursor' under questioning.
Cursor hires selectively for engineers who ship senior-IC work from week one. The behavioral round checks whether your stories prove that bar and whether you actually use the product and it detects superficial familiarity fast.
Have someone ask the questions and push back. A story you've only rehearsed in your head collapses on the first "what would you do differently?"
The five stories to have readySTAR, quantified
A time you weighed reliability vs cost vs latency vs UX with no clean answer.
Name the call you made and the number that justified it.
A measurable improvement on a hot path: p99 cut, error rate down.
Before and after numbers and how you measured them.
Something broke in prod that you owned end to end.
Detection, mitigation, root cause and the guardrail you added.
Shipped something real fast and then carried it in production.
Shows the week-one-senior-IC pace they screen for.
The fifth story is a real failure - one where you owned the miss, not a humblebrag in disguise. Interviewers at this bar trust the candidate who can name a genuine mistake and what it taught them.
Live authentic-usage drillPractice out loud
- 1Pick a real task. Something you actually shipped with Cursor this week, with the repo, the surface (Tab, Agent, chat) and what you were trying to do.
- 2Be specific. Where it nailed the context, where it lost the thread, what you accepted and what you rewrote by hand.
- 3Give an honest critique. Name one real limitation you've hit - a latency annoyance, a context miss, a place a competitor does something better. Earnest praise with no critique reads as superficial.
- 4Tie it to the role. Connect a latency or reliability frustration you felt to the inference path you'd be working on.
"Why Cursor, why inference, why now: I use Cursor every day and the thing I keep noticing is that Tab feels instant - that sub-100ms budget is a genuine systems achievement and it's the part of the product I'd want to own. Inference routing is where reliability, cost and latency all collide, which is the kind of gray-area systems work I'm best at. And the field is moving fast enough that the platform decisions made now compound, so this is the moment I want to be doing it."
Keep the "why Cursor" under 90 seconds and end it on the product, not on yourself. "...and that's why I want to own the inference path" lands harder than a paragraph about your career arc. Then stop talking and let them follow up.
Self-rubricGrade your delivery
- Dimension
- Specific
- Pass
- Named systems, repos, surfaces, real numbers
- Red flag
- Generic "we improved performance"
- Dimension
- Quantified
- Pass
- p99 / error rate / cost with before-and-after
- Red flag
- Impact stated as adjectives
- Dimension
- End-to-end ownership
- Pass
- You carried it from design through prod and on-call
- Red flag
- Handed it off after the PR merged
- Dimension
- Honest
- Pass
- A real failure and a real product critique
- Red flag
- Polished only; no genuine miss anywhere
- Dimension
- Authentic usage
- Pass
- Specific daily-use detail and a grounded opinion vs competitors
- Red flag
- Marketing-page familiarity
| Dimension | Pass | Red flag |
|---|---|---|
| Specific | Named systems, repos, surfaces, real numbers | Generic "we improved performance" |
| Quantified | p99 / error rate / cost with before-and-after | Impact stated as adjectives |
| End-to-end ownership | You carried it from design through prod and on-call | Handed it off after the PR merged |
| Honest | A real failure and a real product critique | Polished only; no genuine miss anywhere |
| Authentic usage | Specific daily-use detail and a grounded opinion vs competitors | Marketing-page familiarity |
Bring three sharp questions for the team: how they balance cost vs latency when the two fight, what their on-call and SLO culture looks like for the request path and what onboarding-to-first-prod-ship actually feels like at their pace. Good questions are part of the signal.
Takeaway. Five quantified STAR stories, one genuine failure and an authentic-usage answer with a real critique. End "why Cursor" on the product in under 90 seconds.
Self-check
Readiness scorecard and final plan
After this you can score yourself and build a targeted closing plan.
You've run the whole loop on yourself. Now grade it honestly and turn every weak area into a dated task, because a score with no remediation is just anxiety with a number on it.
Treat the rubric as a gap finder, not a score to admire. Mark the weakest proof, turn it into one practice rep and keep the artifact you would show an interviewer.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
Your 1-5 score tells you where you stand; this tells you where a gap costs most.
Score each area 1-5Be your own interviewer
- Area
- Coding / AI-authenticity
- What a 5 looks like
- Clean AI-assisted solve, every line defensible, idempotency reasoned
- Your score
- __ / 5
- Area
- Inference fundamentals
- What a 5 looks like
- Prefill/decode, KV/prefix cache, batching, TTFT/ITL answered cold
- Your score
- __ / 5
- Area
- Routing / failover / backpressure design
- What a 5 looks like
- Full path with numbers, failover ladder, blast-radius thinking
- Your score
- __ / 5
- Area
- Cost / latency reasoning
- What a 5 looks like
- Every lever names its latency or quality cost and how to measure it
- Your score
- __ / 5
- Area
- Behavioral / authentic usage
- What a 5 looks like
- Five quantified STAR stories, real critique, tight why-Cursor
- Your score
- __ / 5
| Area | What a 5 looks like | Your score |
|---|---|---|
| Coding / AI-authenticity | Clean AI-assisted solve, every line defensible, idempotency reasoned | __ / 5 |
| Inference fundamentals | Prefill/decode, KV/prefix cache, batching, TTFT/ITL answered cold | __ / 5 |
| Routing / failover / backpressure design | Full path with numbers, failover ladder, blast-radius thinking | __ / 5 |
| Cost / latency reasoning | Every lever names its latency or quality cost and how to measure it | __ / 5 |
| Behavioral / authentic usage | Five quantified STAR stories, real critique, tight why-Cursor | __ / 5 |
Score from your own recordings, not from how it felt.
Any area under 4 gets one concrete remediation task and a date before your loop. Not "study more" - a specific action: "re-solve the streaming-consumer problem from scratch Tuesday" or "rebuild the gateway take-home and inject a 503 mid-stream this weekend."
The non-negotiablesConfirm all four
- Real Cursor use
- Weeks of daily use across Tab, Agent and chat - with a specific task and an honest critique ready.
- Numbers ready
- A latency, cost or failure number for every design answer. Never "low latency" without a figure.
- Clean AI-assisted solve
- Can solve with AI on and defend every line, including the follow-up questions raw paste can't survive.
- 5-6 STAR stories
- Gray-area tradeoff, latency/reliability win, prod incident, fast-ship-and-own, a real failure - quantified.
One-week checklistT-minus seven days
- Re-solve the streaming-consumer and gateway problems once more, timed, AI on.
- Run the system-design prompt out loud against a partner and compare to the worked design.
- Drill the rapid-fire fundamentals until each answer is under 20 seconds.
- Rehearse all five STAR stories with someone who pushes back and tighten why-Cursor to 90 seconds.
- Use Cursor on a real task daily so your authentic-usage answer stays fresh.
Day-before checklistT-minus one day
- Confirm your environment: editor, language, AI assist configured the way you'll actually use it.
- Re-read your own gateway README and the failure branches from the design round.
- Skim your STAR notes and your three questions for the team; do not cram new material.
- Sleep. A rested p99 beats a crammed p50.
Decide your primary language - TypeScript, Rust or Python - and do every remaining practice solve in it so it's automatic under pressure. Then lock your practice set: the two coding problems, the gateway take-home, the design prompt and the deep-dive scenarios in this module. A small set drilled deep beats a large set skimmed.
Takeaway. Score from your recordings, give every sub-4 area a dated task and lock your primary language and a small practice set you drill deep.
Self-check
QYou score yourself 5 on coding and behavioral but 3 on cost/latency reasoning, with the loop in five days. What's the right plan?