Algo que Joel Spolsky escreveu há muito tempo quando em seu blog (não consegue encontrar o artigo agora) realmente ficou comigo em relação a isso:
Ele disse que o código não é uma linguagem humana natural, mas, como programadores, somos facilmente levados a pensar que é e que devemos ser capazes de lê-lo como tal. Conseqüentemente, muitos de nós analisamos o novo código e esperamos poder "lê-lo" e entendê-lo imediatamente, como se fosse um bloco de texto em inglês.
Então, acho que a chave é basicamente ser lenta, metódica e científica. E como outros já disseram - comente (e até refatorar) à medida que avança. Não caia na mentalidade de "Eu deveria apenas olhar e entender imediatamente".
Ah, e sim, eu ainda caio nessa armadilha às vezes. "Faça como eu digo, não como eu faço", e tudo isso. :)