When I have to read and understand a mid to large size code base without the person who wrote it (getting them to explain would be the easiest solution), I do the following:
- I do not care about implementation.
- I fetch all the docs and take a look at the interface (GUI or API). What is the abstract way to work with the software?
- Then I take a look at abstract functions and classes and I take a whiteboard or a piece of paper and try to connect them. I want to get how the whole thing was designed.
- As soon as I get the gist of the whole thing, I can go deeper and start looking at the logic behind the part I am most interested in.