source | link

I would say to start with documentation, etc., but in my experience, the depth of documentation and local knowledge is often inversely proportional to the age, size and complexity of a system.

That being said, I usually try to identify a couple of functional threads. By functional I mean stuff like logging in, pulling down a list of customers, etc. If the patterns are consistent at all, one thread should give you a nice, not necessarily complete, cross-section of the system. The best way to determine if the patterns are consistent is to analyze a handful of threads.

I think this goes without saying but, in my opinion, it's better to understand the system from a functional perspective rather than from a technical perspective. I generally don't worry too much about the tools that are being used (ORMs, logging libraries, etc.) and focus more on the patterns (MVP, etc.) that are being used. In my experience, tools are generally more fluid that patterns.