How do you effectively read and understand someone else's code
What are some of the techniques you use to read and understand a (mid to large) code base from someone else?. Say an open source library, framework, etc.
Do you write down anything? maybe by functionality, like methods, modules, components, files, maybe you use mind maps, or some other kind of abstraction? Or do you just straight up top-down read it and get it all in your head ;).
I found that this is sometimes not an easy task since keeping track of dependencies and/or async flow in complex applications is not a trivial thing. I personally have tried to abstract as much as possible and then go deeper into each part (as needed), but maybe you have a better method or way to achieve this.