I search for strings that appear in the frontend (or generated HTML source, or whatever), and then I use a search tool (git grep) to find where it comes from. And then I the same search tool again to trace my way backwards from there to where it's called, until I find the code that interests me.
And then I form a hypothesis how it works, and test it by patching the code in a small way, and observe the result.
Oh, and don't forget 'git grep'. Or ack, or ag, or your IDE's search feature.
I find Sublime's Cmd-Alt-↓ (goto definition) to be very useful since you jump straight to the source code for that function/class/method. When you grep you may also get all the usage instances which can be quite a lot of noise.
I search for strings that appear in the frontend (or generated HTML source, or whatever), and then I use a search tool (git grep) to find where it comes from. And then I the same search tool again to trace my way backwards from there to where it's called, until I find the code that interests me.
And then I form a hypothesis how it works, and test it by patching the code in a small way, and observe the result.
Oh, and don't forget 'git grep'. Or ack, or ag, or your IDE's search feature.