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."
The fastest way to find where a feature lives is to grep for a string you can see in the UI. Search the codebase for an exact button label, error message, or URL path. That literal string almost always sits one or two function calls away from the logic you actually need.
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 (
F12in 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 throughnode_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.
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.
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.
You are not expected to understand the whole codebase, and your senior teammates don't either. A 200,000-line system is understood by everyone in fragments — each person knows their corner deeply and the rest shallowly. Aiming for total comprehension is how you burn out in week one. Aim to understand the slice your task touches, well enough to change it safely.
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.
Originally published at pickuma.com. Subscribe to the RSS or follow @pickuma.bsky.social for new reviews.
Top comments (0)