The Onsite Build & Product Craft
Win the vague-prompt, build-on-our-codebase day
Reading a deliberately vague prompt
After this you can turn ambiguity into a scoped, defensible plan.
The prompt is vague on purpose. “Design a feature, product or service you think could be useful” is not the team running out of ideas. It's the test.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
The onsite build is the decision round - everything before it earns you the chance to ship in their codebase.
Cursor's paid onsite hands you a frozen copy of their codebase and a brief with almost no constraints. The founders have said publicly that what they want to see is what you'd build in a vacuum - given autonomy and a real codebase, where does your judgment take you. The choice of what to build is graded as heavily as the code.
So the first hour is not coding. It's scoping. Most candidates lose the day in the first thirty minutes by sprinting at the first idea, then discovering at hour six that it was too big, too generic or didn't touch a real user pain.
What a good pick looks likethree filters, applied fast
A pain an actual Cursor user feels weekly.
You can name the user and the moment.
Not a feature in search of a problem.
Moves a metric the team would care about.
Fits where the product is heading.
You can say why it matters in one line.
A demoable slice fits in the time box.
Reuses primitives already in the repo.
Has an obvious narrow first version.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
Aim for the top-left: real, valuable pain you can demo in the time box. Effort here is your build cost against the clock.
The intersection of those three is small and that's the point. A flashy idea that fails “shippable” leaves you presenting a broken stub. A safe idea that fails “real” leaves you presenting something competent and forgettable.
- 1Pick the user moment. Name a specific person doing a specific task in Cursor - reviewing a big AI diff, hunting a bug, onboarding to an unfamiliar repo. Write the moment in one sentence.
- 2Write the problem statement. One crisp line: who hurts, when and why the current product makes it annoying. This is what you'll open your presentation with.
- 3List assumptions out loud. Scope, target user, what you're explicitly not building. Putting them on paper makes your judgment legible and lets the team correct you cheaply.
- 4Define the demo. Decide the single end-to-end path you'll show before you write a line. The build exists to make that path real.
- 5Send your clarifying questions. Slack the team the way you would on the job - share your plan, ask the two questions that actually change your design, then start.
Treat the Slack channel as a design review, not a help desk. Post your problem statement and chosen scope in the first hour and ask “does this seem like the right thing to build or is there a sharper version?” You're showing them how you'd operate as a teammate facing ambiguity, which is exactly what the vague prompt is probing.
Grand-but-half-built is the classic failure. A multi-file refactor engine that almost works demos worse than a small, polished feature that works every time. Bias toward something you can run end-to-end in front of them, then talk about how it would scale.
Takeaway. The vague prompt grades your judgment first. Spend the opening block scoping to the intersection of real, valuable and shippable, write the problem statement and assumptions down and pick a slice you can demo end-to-end.
Self-check
QWhy is the onsite prompt deliberately vague and what does that tell you about how to spend your first hour?
Navigating a frozen, unfamiliar codebase
After this you can get productive fast in someone else's large repo.
You'll be dropped into a frozen snapshot of Cursor's own codebase - large, real and entirely unfamiliar. The question the founders ask afterward is blunt: can they go end-to-end in the codebase?
This is where authentic daily use of Cursor pays off and prep-cramming shows. Someone who lives in the tool reaches for codebase search, symbol jumps and an agent to explain a module by reflex. Someone who skimmed docs the night before reads files top to bottom and stalls.
A reading order that earns velocitymap before you edit
- 1Get it running first. Build and launch the editor before changing anything. A known-good baseline is the thing you'll diff every later change against.
- 2Find the seam. Use search and symbol navigation to locate where your feature plugs in - the command, the panel, the agent loop. Ask Cursor to explain that module before you touch it.
- 3Inventory reusable primitives. Note the existing pieces you can stand on: the diff renderer, a context-retrieval helper, a streaming-edit applier, an existing command registration. Reuse beats reinvention under a clock.
- 4Make one small, verifiable change. Wire the smallest possible version - a button that fires, a command that logs - and confirm it works end-to-end before building outward.
- 5Keep it runnable at every step. Commit in small increments so you're never more than one undo from a working app.
Finding the seam is the whole game. The seam is the single point where your feature attaches to the existing system: which command surface, which event, which render path. Spend your spike hunting for it, because once you've found it the build collapses from “invent everything” to “extend one thing.”
- Entry point
- How does a user trigger work like mine today? (command palette, keybinding, panel)
- Data flow
- Where does the relevant state live and how does it get to the UI?
- AI plumbing
- If I need a model call, what's the existing path for prompt → response → applied edit?
- Reuse
- Which component or helper already does 80% of what I need?
- Render
- How does the editor surface a diff or suggestion I can borrow?
AI tools are allowed at the onsite. Driving Cursor fluently to navigate Cursor's codebase is not a shortcut you're hiding - it's the most on-brand signal you can send. Ask the agent to map the module, generate the boilerplate for a new command and explain an unfamiliar abstraction. Then read what it gives you.
Don't try to understand the whole repo. It's too big and you don't need to. Understand exactly the slice your feature touches, deeply and treat the rest as a black box with a known interface. Candidates who go on an architecture safari run out of clock before they've shipped anything.
Takeaway. Get the app running, then hunt for the one seam where your feature attaches and the primitives you can reuse. Make small verifiable changes that keep the app runnable - that's the literal answer to “can they go end-to-end?”
Self-check
Time-boxing 8 hours end-to-end
After this you can allocate the day so you ship and can present.
Eight hours is enough to ship something real and not a minute more. The candidates who win plan the day like a project, not a hackathon and protect the last two hours for polish and the write-up.
Treat the schedule as a budget you commit to up front. The single most common mistake is building until the clock runs out, leaving no time to make it presentable or to prepare the tradeoffs story. An unpolished demo with no narrative undersells even good work.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
One pass through the day. The checkpoint gate is where you decide to cut - protect everything to its right.
- Block
- Scope
- Time
- ~1h
- What you produce
- Problem statement, chosen slice, assumptions, demo path, Slack check-in
- Block
- Spike / learn the code
- Time
- ~1.5h
- What you produce
- Found the seam, app running, smallest change wired
- Block
- Build core slice
- Time
- ~3.5h
- What you produce
- The one end-to-end path working, vetted as you go
- Block
- Polish + demo
- Time
- ~1h
- What you produce
- Empty states, latency feel, the demo rehearsed once
- Block
- Write-up
- Time
- ~1h
- What you produce
- Tradeoffs, what you cut, what's next, known risks
| Block | Time | What you produce |
|---|---|---|
| Scope | ~1h | Problem statement, chosen slice, assumptions, demo path, Slack check-in |
| Spike / learn the code | ~1.5h | Found the seam, app running, smallest change wired |
| Build core slice | ~3.5h | The one end-to-end path working, vetted as you go |
| Polish + demo | ~1h | Empty states, latency feel, the demo rehearsed once |
| Write-up | ~1h | Tradeoffs, what you cut, what's next, known risks |
A defensible default split. Adjust the shape, but keep the last two hours sacred.
Cut scope, don't blow the budgetthe recovery move when you're behind
You will fall behind. The skill is cutting scope the moment you notice, not at the end. A working narrow slice always beats a broad broken one, because the narrow slice demos and the broad one doesn't.
- 1Set a checkpoint. At the end of the build block, ask: is the demo path working right now? If not, cut.
- 2Drop the second feature first. Anything beyond the core demo path is the first to go. Park it in the write-up as “next.”
- 3Fake the edges if needed. A hardcoded value or a stubbed model response that makes the demo real is fine, as long as you say so when you present.
- 4Protect polish time. Never let the build eat the final hour. A rough-but-complete demo wins; a half-finished ambitious one loses.
Use the agent to generate boilerplate, scaffold a component and write the obvious code so your hours go to the hard 20%. But vet every generated change - read it, run it and be able to explain why it's there. The onsite is judging your judgment and shipping AI output you can't defend is the one thing that reads worse than writing less by hand.
“I time-boxed the build and hit my checkpoint at hour five behind schedule, so I cut the batch-apply view and shipped the single-file path end-to-end. I'd rather show you something that works completely than two things that half-work.”
Takeaway. Budget the day up front, protect the last two hours for polish and write-up and cut scope at the first checkpoint you're behind. A narrow slice that demos beats a broad one that doesn't - and let AI write the easy 80% so your hours buy the hard 20%.
Self-check
QIt's hour five of the onsite and your two-feature plan is clearly not finishing. What do you do?
Product sense and craft in what you build
After this you can show taste, not just function.
Function gets you a pass. Craft gets you the offer. The JD asks for a taste for models and design and the onsite is where you prove you have it.
Cursor's whole bet is powerful tools that don't compromise on ease of use. The feature you choose should embody that tension. A raw capability bolted on with no thought to the moment of use signals an engineer; a capability wrapped in a moment that feels obvious and fast signals a product engineer.
Where taste actually showsthe details interviewers notice
How does a user review and accept AI output?
Inline diff, one keystroke, easy undo.
This is the heart of an AI-native UX.
Stream tokens; never block on a spinner.
Optimistic UI so it feels instant.
Slow but honest beats fast but lying.
What shows before the first result?
What happens when the model is wrong?
Graceful failure is a craft tell.
The common case needs zero config.
Power lives behind, not in the way.
Ease-of-use is the visible part.
The accept/reject moment deserves special attention because it's the defining interaction of an AI editor. Reviewing a PR of AI-generated code, accepting a multi-file edit, trusting a suggestion - these are exactly the new interfaces the role exists to invent. If your feature has a moment where the user decides whether to trust the AI, sweating that moment is the most direct way to show the taste they're hiring for.
- Tie the feature to a named user pain, not a generic capability - “reviewing a 30-file AI refactor is exhausting” beats “add a review tool.”
- Connect it to where Cursor is heading: agent loops, multi-file coordination, trust in AI output at scale.
- Make the happy path feel inevitable, then let depth live one layer down for power users.
- Polish one interaction completely instead of roughing out five - depth of craft reads louder than breadth.
Narrate a craft decision you almost didn't make. “I added an inline diff with single-key accept instead of a modal, because breaking the user out of the editor to approve an edit kills the flow that makes Cursor feel fast.” One sentence like that proves you weren't just making it work - you were making it good and you know the difference.
Don't confuse polish with chrome. Animations and color aren't taste if the core interaction is clumsy. Taste is the empty state being helpful, the latency feeling instant and the accept gesture being one keystroke. Spend craft budget on the interaction, then on the paint.
Takeaway. Pick a feature that embodies powerful-but-easy, then sweat the AI-native moments - especially how a user reviews and accepts AI output, the latency feel and the empty/error states. Polish one interaction completely and tie it to a real pain and to where the product is going.
Self-check
QIn an AI-editor feature, which interaction usually deserves the most craft budget and why?
Presenting design and tradeoffs
After this you can communicate like a teammate, not a candidate.
The presentation is not a victory lap. It's the part of the day where they decide whether you'd be good to ship with - whether you can reason about your own system and hold an honest conversation about its limits.
The JD wants a functional understanding of the system design and someone well-prepared to discuss the trade-offs. That means you can explain how your feature works, why you built it that way and what you'd change - without getting defensive when they push.
The order that landsproblem before demo before design
- 1Problem. Open with the user pain and why it matters. Thirty seconds. They should want the thing before they see it.
- 2Demo. Show the one end-to-end path working. Live, not slides. This is the proof.
- 3Design. Walk the architecture - the seam you found, the primitives you reused, the data flow. Functional, not exhaustive.
- 4Tradeoffs. Say what you cut, what you'd do with more time and the risks you'd watch. This is the senior part.
- 5Open the floor. Invite questions and disagreement. The debate is where they really evaluate you.
Being explicit about what you cut is counterintuitively the strongest move. Listing your own limitations shows you saw them, which is exactly the judgment a flat, fast team needs. The candidate who claims it's all done reads as someone who can't see their own gaps.
- What did you cut?
- Name it and why - usually scope to protect the demo.
- What would you do with a week?
- The next two features and the hardening you skipped.
- Where does this break?
- The edge cases, the scale limits, the model-failure mode.
- Why this approach over X?
- The alternative you considered and the trade-off you made.
- How would you measure it?
- The metric or A/B test that tells you it's working for real users.
Cursor prizes honest reasoning and the willingness to be wrong. When an interviewer pushes on a choice, the win isn't defending it to the death - it's engaging seriously, defending what holds up and visibly updating on a good point. “You're right, a queue would handle the burst better - I traded that for simplicity under the time box” is a stronger answer than a clever rebuttal.
Don't oversell and don't undersell. Inflating what works invites a demo failure that costs you trust. Apologizing for everything buries the real work. State plainly what's done, what's stubbed and what's next, then let the working demo speak.
Takeaway. Present problem → demo → design → tradeoffs, then open the floor. Be explicit about what you cut and where it breaks and treat pushback as collaboration: defend what holds up, update on what doesn't.
Self-check
Working with the team in-room
After this you can collaborate the way the two-day onsite rewards.
Especially for senior candidates, the final stage is building side-by-side with future teammates on a real problem, with culture conversations woven through, often over meals. They're answering one question: do we want to work with this person every day?
Talent density is a stated value, so they're not just checking competence - they're checking whether you raise the bar of the room. That shows up in small behaviors over two days far more than in any single answer.
What “good to ship with” looks likebehaviors they're watching for
- You communicate progress and blockers before being asked - “I'm stuck on the context plumbing, here's what I've tried” keeps the room moving.
- You treat Slack questions and teammate chats as real collaboration, not a crutch you're embarrassed to use or a place to hide.
- You're pleasant under pressure - calm, curious and generous when the build gets hard or a teammate disagrees.
- You make the people around you better: you ask sharp questions, share what you learn and credit others.
The flat, fast, in-person-leaning culture is something you demonstrate, not describe. Saying “I love moving fast” means nothing next to actually shipping a clean slice, flagging a blocker early and debating a design point without heat.
Surfaces blockers early with what they tried.
Asks the question that sharpens the design.
Debates honestly, then commits.
Leaves the codebase cleaner than found.
Goes quiet when stuck, ships a surprise.
Avoids questions to look self-sufficient.
Gets defensive or territorial under push.
Treats teammates as judges, not collaborators.
Make your thinking visible while you work. Narrate the trade-off you're weighing, pull a teammate in on a design fork and say when you've changed your mind. The two-day format exists precisely to see how you think with others - give them something to evaluate instead of going heads-down and silent.
Don't perform collaboration. Asking questions you could answer yourself or talking instead of building, reads as fast as silence does. The bar is genuine: ship real work and bring people in at the moments where their input actually changes the outcome.
“I want to flag a fork before I commit: I can do the simple per-file version now or spend an hour on the batch path. Given the demo, I'm leaning per-file - does that match how you'd weigh it?”
Takeaway. The team-fit stage asks whether you raise the bar of the room. Communicate blockers early, treat Slack and teammate chats as real collaboration, stay generous under pressure and demonstrate the fast truth-seeking culture by how you work rather than what you claim.
Self-check
QDuring the two-day onsite you hit a blocker on the context plumbing. What behavior best matches what Cursor is evaluating?