
To onboard a new developer to your codebase fast, set one goal: they ship a real pull request on day one. Hit that with a README that gets them running in 5 minutes, a 15-minute architecture-tour Loom, a CLAUDE.md / .cursorrules file that hands the codebase's context to their AI assistant, a curated good-first-issues backlog, and a pairing block on day one. Skip the slide decks.
Most onboarding plans optimize for "learn the codebase." That's the wrong target. The right target is first merged PR by end of day one, because nothing teaches a codebase like changing it under review.
Two things changed. Teams got smaller, and AI assistants got real.
The median early-stage engineering team in 2026 is 4 people. A new hire who takes three weeks to ship is 30% of your throughput sitting idle. That's the kind of math that ends runway conversations badly.
The other shift: tools like Cursor and Claude Code can absorb a codebase's conventions in minutes if you hand them the right context file. The bottleneck stopped being "how long does it take a human to read the code." It became "how long does it take you to write down the things that aren't in the code." A great onboarding system is mostly a documentation system that doubles as a system prompt.
Most teams onboard like this: a Notion page with 40 links, a Calendly with the CTO for "as needed" questions, and a vague instruction to "poke around the repo for a few days." Then on Friday someone asks why the new hire hasn't shipped anything.
The failure mode is predictable. The new developer spends day one fighting environment setup (pnpm install errors, missing env vars, a Postgres version mismatch). Day two they read code without context, build a wrong mental model, and don't know what's safe to ask. Day three they're embarrassed enough about the lag that they stop asking. By Friday everyone has decided the hire was a bad fit when really the onboarding was.
The fix isn't more documentation. It's narrower documentation pointed at one specific outcome: a shipped PR.
This is the playbook. Six pieces. Build each one once and reuse it for every hire.
Time it. Literally. Hand the README to someone who has never touched the repo, start a stopwatch, and stop when they see the app running locally. If the number is over 5 minutes, the README is broken.
Concretely the README needs: a one-liner of what the product does, prerequisites with exact versions (Node 20.x, pnpm 9, Postgres 16), a copy-pasteable git clone && pnpm install && cp .env.example .env.local && pnpm db:push && pnpm dev block, and a "did it work?" check (open localhost:3000, see a login page).
Use .env.example with non-secret defaults already filled in. Stripe test keys, Supabase anon key, a local Postgres URL. The number of new hires who lose half a day because someone wrote "ask Slack for the env vars" is depressingly high.
What can go wrong: dependency drift. A README that worked last month breaks because someone upgraded the Node version. Fix this with engines in package.json and a .nvmrc so nvm use does the right thing without a Slack thread.
Tools we like for this: Vercel for one-click previews, Drizzle for a fast schema reset, and mise or asdf for runtime pinning.
This is the biggest unlock of the last 18 months and most teams haven't caught up.
Every Cadence engineer is AI-native by default, vetted on Cursor, Claude Code, and Copilot fluency before they unlock bookings on the platform. They expect to point their assistant at a codebase and get useful answers in the first hour. They can't do that if your codebase has no context file.
A CLAUDE.md (for Claude Code) or .cursorrules (for Cursor) is a markdown file at the repo root that tells an AI assistant: what stack we use, what our naming conventions are, where the gotchas live, what files to never edit, what commands to run for tests, and how PRs should be structured. Three pages, max. Updated whenever a convention changes.
A good one covers:
lib/db/queries/*. No raw SQL outside that directory."subscriptions directly; always go through lib/billing/sync.ts. The auth session lives in a cookie called _session, set by lib/auth/session.ts."pnpm test before pushing. Use pnpm db:studio to inspect data. Lint with pnpm lint --fix."Why it matters: the new hire's AI assistant becomes a competent pair on day one instead of a confidently wrong one. The cost is two hours of writing once.
What can go wrong: the file goes stale. Treat it like a test that fails CI if it drifts. We add a pre-merge check that the file hasn't been touched in 60 days; if it has, an owner has to confirm it's still accurate.
Record it once. Reuse it forever.
The CTO or tech lead opens the repo on screen, walks through the folder tree at the top level, explains "this is where requests come in, this is where data lives, this is where third-party stuff is wrapped, this is where the UI is," and clicks into 2-3 critical files with a sentence each about why they exist. 15 minutes, one take, no edits.
Why Loom and not Notion: faces and voices encode tacit knowledge that bullet points can't. The way you say "yeah, this part is messy, we know" is information. New hires need to know what's load-bearing versus what's a scab.
Re-record when the architecture genuinely changes. Once a year is fine. We've seen Loom links from 2024 still doing useful work in 2026 because the repo's bones haven't changed; the framework version has, but the shape of the system hasn't.
Maintain 5-10 issues in a good-first-issue label in Linear or GitHub at all times. These are the bug fixes and small features you'd happily merge but haven't gotten to.
Criteria for a good first issue:
Bad first issues: "refactor the auth flow," "add observability," "investigate the slow query in production." These are real work but they don't bound the problem.
A new hire on day one picks an issue, the lead reviews it before lunch, the hire merges before EOD. Dopamine matters; the first-PR feeling sets the cadence for the next month.
Not "as needed." Scheduled. 90 minutes on day one, 60 minutes on day three, 60 minutes on day five.
The pairing is mostly silent. The new hire drives, the lead watches. The lead's job is to notice: which abstractions confused them, which file they had to grep three times to find, which question they almost asked then walked back. Those are the gaps in your onboarding system that the new hire is too polite to flag. They become the next round of CLAUDE.md edits and README fixes.
The other thing pairing fixes: psychological safety on questions. The new hire learns "this team answers things fast and without judgment" by watching it happen, not by being told. The cost is 3.5 hours of senior time in week one. The return is a hire who doesn't go silent in week two.
Even with great pairing, no one wants to interrupt a senior for the seventh "where does the auth middleware live" question. That's where Claude or Cursor becomes the buddy.
The setup is simple. Point Claude Code at the repo. Make sure CLAUDE.md is in place. Tell the new hire: "before you ask me anything, ask Claude first. If Claude is wrong, ask me, and we'll add the right answer to CLAUDE.md." This loop converts every confused question into a documentation improvement and saves the senior from answering the same thing twice.
The compounding effect is real. We've seen CLAUDE.md files double in size in the first month of a new hire because the hire is essentially writing the onboarding documentation as a side effect of asking questions. By month two the file is so good the next hire onboards in half the time.
How do you know your onboarding is working? Look at these signals, not at vibes.
| Signal | Fast onboarding | Slow onboarding |
|---|---|---|
| Time to local dev running | < 30 min | > 3 hours |
| First merged PR | Day 1 | Week 2 or later |
| Questions in Slack per day, week 1 | 8-15 (healthy curiosity) | 0-2 (silent struggling) |
| Senior time spent in week 1 | 4-6 hours, scheduled | 10+ hours, reactive |
| New hire's AI assistant useful on day 1 | Yes (CLAUDE.md present) | No (cold start every prompt) |
| Architecture mental model accuracy by day 5 | Mostly right, knows the gaps | Confidently wrong on 2-3 systems |
| First production deploy ownership | Week 2 | Month 2 |
If you're seeing the right column, the fix isn't "the hire needs more time." It's that you don't have a system; you have a vibe.
Five patterns we've watched kill otherwise-good onboarding:
npm install but the project uses pnpm. Symptom: new hires send PRs that change package-lock.json.Some teams genuinely don't need this. If you're 2 cofounders who wrote the codebase together, your onboarding doc is your shared brain. Adding a CLAUDE.md is still a 90-minute win, but the README and Loom are overkill for two people.
The investment makes sense the moment you have a third person, or the moment you're going to book contract help. The break-even is the first time someone asks "where does X live" and the answer requires more than 30 seconds.
Pick the cheapest piece and ship it. Five-minute README first. Then CLAUDE.md. Then the Loom. The good-first-issues backlog is a forever-job; start it now with 3 issues and grow it. The pairing block is a calendar habit; book it the moment a hire signs.
If you're about to bring in your first engineer and you don't have any of this in place, the honest move is to either spend a week building the system before the hire starts, or to start with a Cadence engineer on a 48-hour free trial. Every engineer on Cadence is AI-native by default and used to walking into unfamiliar codebases; the median time-to-first-commit across our pool of 12,800 engineers is 27 hours, which is faster than most full-time hires manage in their first week because the workflow is built for it. If they ship and you like the work, keep them by the week at $1,000 for mid or $1,500 for senior; if not, replace next Monday with no notice.
Want a second opinion on what's slowing your onboarding? Run your repo through Ship or Skip and we'll grade the README, the context-file readiness, and the first-PR friction. Honest grade, no upsell.
If you're scaling past the first 3 hires and your codebase is genuinely complex, a Cadence senior engineer at $1,500/week can write the CLAUDE.md, record the Loom, and seed the good-first-issues backlog in their first week. That's the kind of work that pays back on every future hire forever. The same engineers also handle adjacent investments like getting your test suite production-grade and writing the postmortem playbook before you need it.
A well-onboarded engineer ships a real PR on day one, owns a small feature by end of week one, and is on the deploy rotation by week two. If it's taking longer than that, the issue is almost always missing context (no README, no CLAUDE.md, no Loom), not the hire being slow.
Stack and versions, naming conventions, where to put new code, files or directories to never touch, the commands to run for tests and linting, and 3-5 codebase-specific gotchas (e.g., "always go through lib/billing/sync.ts for Stripe writes"). Keep it under 3 pages and update it whenever someone asks the same question twice.
Yes, because the work is reusable. The README, the CLAUDE.md, and the Loom you build for hire #1 are the exact same artifacts that onboard hire #2, the contractor in Q3, and your future self after a 3-week vacation. Total cost is about 4 hours; return is permanent.
Look at the gap between start date and first merged PR. If it's more than 3 days, you have a system problem. Also count Slack questions in week one: 0-2 means the hire is silently stuck; 8-15 means they're engaged and the system is working.
It actually does, if you do the prep work. Without a CLAUDE.md, an AI assistant gives confidently wrong answers about your codebase and slows the hire down. With a good CLAUDE.md, the assistant answers 60-70% of "where does X live" questions correctly, which frees the senior engineer's time and lets the new hire move without waiting for a human.
Backend developer at withRemote. Writes on API design, observability, and database trade-offs.