Those order of magnitude milestones feel about right to me. They sound a lot like memory access patterns on a computer (L1 cache, L2 cache, L3 cache, RAM, disc, network), and I think it&#x27;s for about the same reason: controlling the time to load something into the CPU. Except, in this case the CPU is your brain.<p>2k is the cache size of your brain. You can fit an entire program in your head. It doesn&#x27;t matter how it&#x27;s organized because you&#x27;ll just load the whole thing.<p>At 20k, you can only fit part of the program in your head. But, it&#x27;s small enough that you can be <i>familiar</i> with the whole thing. You need modularity so that making a change only requires loading a single 2k-sized chunk of the program, but you don&#x27;t need much else to help you <i>find</i> the right chunk.<p>At 200k, you probably have multiple people working on it and you may often have to deal with &quot;cold&quot; code that you&#x27;ve never seen in your life. You need additional architecture and documentation to help you find <i>where</i> to make a change before you can even start learning the part of the code that needs to change.<p>You need the codebase to be organized defensively to prevent you from adding redundant features, or doing things that break the architecture. In other words, you need to be able to get work done with only a partial knowledge of the code.<p>At 2M, you have lots of people working on it, and the team has changed over time. The team is large enough that tribal knowledge is constantly being shed through turnover or forgetfulness. There are parts of the program that <i>no one</i> understands.<p>The code is likely old enough that it reflects multiple different architectural and process visions. It is no longer feasible for it to be entirely internally consistent. The idea of a global clean-up is off the table because it&#x27;s too risky. At this point, it is like owning a castle. You work mostly as a caretaker of it. Instead of <i>adding</i> value, your job is to <i>preserve</i> the value it has accumulated over time. Additions are often at the edges: interfacing with new systems, etc.<p>Personally, I find ~20k programs the most fun. Big enough to do something interesting bug small enough to be clean and consistent.