Reverse engineering feels good for several reasons: solving a difficult puzzle makes you feel good; you get the gratification of thinking that the original developer was a fool who don't know how to design software; you can mentally redesign the whole thing without having to write a single line of code.