// PATCH №044 · CRAFT
Junior engineers read code like text — top to bottom, line by line, building meaning sequentially. This works for short scripts. It collapses on real codebases, where the meaning of a function is determined by callers you haven’t read yet.
Read in passes
First pass: skim for landmarks. Where are the entry points? What top-level types exist? Don’t read implementations on the first pass — just learn the territory.
Second pass: chase one path. Pick a single user-visible behavior and trace it from input to output. Tolerate confusion; don’t try to understand the whole module.
Third pass: read tests. Tests describe what the author thought the code should do. Reality may have drifted, but tests show original intent in compressed form.
You haven’t read the code until you can rewrite it. Until then, you’ve just looked at it.
Tools that help, briefly
- Static call graphs (rg + ctags or LSP refs)
- Git blame for context — but ignore commits older than two refactors
- Running the code under a debugger and stepping into one real request
All of these are crutches if you use them first. Use them after the second pass, not before.