pickuma.
Career Starter

The Junior Developer's Guide to Reading a Large Codebase Without Drowning

A practical method for understanding an unfamiliar codebase on your first week: where to start, what to skip, and how to trace a single feature end to end.

7 min read

Your first real job hands you a repository with 4,000 files and a README that was last accurate two years ago. You open the folder, the file tree scrolls past the bottom of the screen, and the instinct is to start reading from the top. Don’t. Reading a large codebase like a book is the single most common way junior developers waste their first two weeks.

The people who look fast aren’t reading more code than you. They’re reading less of it, in a deliberate order, and ignoring the 95% that isn’t relevant to the task in front of them. Here’s how to do that on purpose.

Start from the edges, not the middle

A codebase has natural entry points. Find them before you open a single business-logic file.

Start with the manifest. In a JavaScript project that’s package.json — the scripts block tells you how the thing actually starts (dev, build, test), and dependencies tells you what world you’re in (is this React or Vue? Express or Next? Prisma or raw SQL?). The equivalent exists everywhere: pyproject.toml, go.mod, Cargo.toml, pom.xml. Five minutes here saves you from guessing the framework by pattern-matching files.

Then run the application. Not “read the code that runs the application” — actually run it. Get it booting locally, click through the feature you’ve been asked to touch, and watch what happens in the terminal and network tab. A running app is a map you can poke. A static file tree is a wall of text.

Now follow one thread. Pick a single concrete behavior — “what happens when a user logs in” — and trace it from the edge inward: the route or URL, the handler, the function it calls, the database query at the bottom. You are reading a vertical slice, maybe eight files deep, not the whole horizontal layer of “all the controllers.”

Use the tools that answer “where does this go?”

Manual scrolling is the slow path. Modern editors answer the two questions you ask most — “where is this defined?” and “who calls this?” — without you reading anything.

Learn three keyboard moves in whatever editor you use and you’ll cut your navigation time in half:

  • Go to definition (F12 in VS Code): jump from a function call straight to where it’s written.
  • Find all references (Shift+F12): see every place that calls a function before you change it. This is your blast-radius check.
  • Project-wide search with a real tool. ripgrep (rg) searches a large repo in milliseconds and respects .gitignore, so you’re not wading through node_modules.

Git is the other underused map. git log --oneline -- path/to/file shows you how a file evolved. git blame tells you who wrote a confusing line and, more usefully, links to the commit message and pull request that explain why. When a piece of code makes no sense, the answer is often in the commit that introduced it, not in the code itself.

Question you haveTool that answers it
What framework is this?package.json / pyproject.toml
Where is this feature?grep for a UI string with ripgrep
Where is this defined?Go to definition (F12)
What breaks if I change this?Find all references (Shift+F12)
Why is this code here?git blame + the linked commit

AI editors collapse several of these into one question. Instead of grepping and jumping by hand, you can ask the editor in plain English where login is handled or what a function is used for, and it answers using the whole repository as context. For a junior reading unfamiliar code, that shortens the “where do I even start” loop from twenty minutes to one.

Cursor

An AI-native code editor that indexes the entire repository, so you can ask 'where is checkout handled?' and get the exact files instead of grepping blind. Useful precisely when you don't yet know the codebase well enough to know what to search for.

Free tier available; Pro around $20/month

Try Cursor

Affiliate link · We earn a commission at no cost to you.

A word of caution worth saying out loud: let the AI find things, but verify what it explains. It will confidently describe code that was deleted six months ago or invent a function that doesn’t exist. Treat its answers as a lead to confirm with F12, not as the truth.

Read tests, take notes, and accept that you won’t understand all of it

When the code itself is dense, read its tests. A test file is documentation that’s guaranteed to be current, because it runs in CI and fails when it’s wrong. The test for a function shows you the inputs it expects and the outputs it produces — often a clearer specification than any comment. If you want to understand a module, open its test file first.

Keep a running map as you go. Not formal documentation — a scratch file where you jot “auth lives in src/middleware/auth.ts, sessions are in Redis, the login route is POST /api/session.” You will forget these threads by Thursday. Writing them down turns three days of re-discovery into a glance. Some developers keep this in a notes app or wiki so the next new hire inherits it; the point is that the map exists outside your head.

The measure of progress isn’t “how much have I read.” It’s “can I make a small change and predict what happens.” Change a label, fix a typo in an error message, add a log line — and confirm the running app does what you expected. Each correct prediction is a piece of the map you’ve genuinely earned, and it compounds faster than any amount of passive scrolling.

Give yourself a week of feeling lost. That’s not a sign you were hired by mistake; it’s the normal cost of loading a system into your head. Trace one thread at a time, lean on the tools that answer “where” and “who calls this,” and write down what you learn. The drowning feeling fades not when you’ve read everything, but when you’ve shipped your first small change and watched it work.

FAQ

How long should it take to feel comfortable in a new codebase?
Expect one to two weeks of feeling lost on a medium-to-large project, and that's normal. Comfort comes from shipping small changes, not from reading everything. After your first few merged pull requests in a given area, that area stops feeling foreign even if the rest of the repo still does.
Should I read the code top to bottom to be thorough?
No. Reading a large codebase linearly is the slowest possible approach and you'll forget the early files by the time you reach the end. Trace one feature vertically from its entry point to the database instead, and ignore everything your current task doesn't touch.
Is it cheating to use an AI editor to understand the code for me?
Using AI to locate code and summarize unfamiliar functions is a navigation aid, the same as grep or go-to-definition. The caution is to verify what it claims — AI tools sometimes describe deleted or nonexistent code confidently. Use it to find leads, then confirm with your editor's go-to-definition before you rely on the explanation.

Related reading

See all Career Starter articles →

Get the best tools, weekly

One email every Friday. No spam, unsubscribe anytime.