And the effort not to give up when your reverse-engineering efforts reveal remarkable stupidities in the original code. We all know crunch happens, but that doesn't make dealing with the resulting spaghetti any easier.
(I spent several years reverse-engineering Command & Conquer RA2, I should know - that game has hacks and flukes everywhere.)