... because clearly, you like setting the bar impossibly high for yourself.
You will never know the code as well as the original developer. so stop trying. For very old cases >10 years, that developer was also the analyst who gathered the requirements, further cementing you to a 3rd-bit player in the drama. Let it go.
You *can* maintain someone else's code, though, if you can do a few things:
-dispense with ego
-learn to *read* code, especially as a reviewer
-ask lots of questions
As a maintenance programmer, you have to be fearless about asking questions, even if they dead-end you. You asked. You were thrust into a bad spot, you do your best to figure out where you're at. Assess the situation. There's no rush to fix anything, it's not like the problem's going anywhere and no one is hiring clueless mission-critical coders.
Start small. Start really small, like just reading the code as you might in a code review and see if you can spot trends. If you've been doing this awhile, you can start picking up on the strengths and weaknesses of the author(s). At the very least you can start to immerse yourself in the style and convention, making translation to the actual algorithms easier, i.e. what's this bit doing? I'm not embarrassed to say I've professionally reviewed code that I could never write -- it was VB and ASP -- but I know what object-oriented code should look like, should be capable of doing, and this wasn't it. It wasn't even good procedural/ iterative code... but that's besides the point. The point is, I know when to use a while loop, a for loop, and when to unroll the loop. It's the kind of knowledge that comes in handy no matter what language I'm looking at. Declarative? No problem, it's set-based thinking and straight Boolean logic. Functional? Fine, let's start busting down the parentheticals. It's also about moving data into a register, eventually.
So, you start small, you read the code, you trace some data by hand, a little, and then... run the fuckin' thing with a debugger, step by step, and watch the data move. If it takes you all day to run it once, you're entirely ready on day two to start messing with it. You've likely done what only the original developer has ever done, and that's seen data at the top run straight through to the bottom.
--#