In my case, because I work in the Web, I do the following:
- Generate/Update ctags of the project
- Open the project in Vim (any editor supporting ctags or code structure ca do of course)
- Start from an entry point (controller)
- follow functions and jump to their definitions before going back to where I jumped, and so until I reach the output (end of controller execution)
- as I jump arround, I might take notes of files and functions I encounter then generate a graph of it (I use emacs + orgmode + plantuml)
I keep updating that document as I discover new things, and extract it in HTML from orgmode files.
Well, in fact, I do what should have been done by the former devs, documentation...
But making it myself with the tools I am comfortable with is maybe what works best for me.