I've worked in a lot of legacy code bases. Here's my approach:
* Skim around to get a general idea of what components are involved.
* Try to understand that one module/class that keeps getting used a lot or is really important.
* I mentally trace through that code, as if I'm a debugger.
* Most importantly, I write down my discoveries/understanding as I go to help me retain this idea.
* Re-skim with my new understanding and/or reorganize the code to be more concise or simpler. Depending on how ambitious you are, you might try to keep these changes. But with legacy code, it typically breaks as a result.
Every code base takes time to digest all the information. Sure the information passed your eyes, but is it committed to memory?
Every code base takes time to digest all the information. Sure the information passed your eyes, but is it committed to memory?