Here's an interesting quote:

Code cleaning : First, I run a quick and fully automated analysis of the code, with just a few rules:
    * remove dead code (classes, methods).
    * remove unused method parameters, variables
    * remove useless variable initialisation
    * remove useless Casting
    * tighten visibility (public => private)
    * move tests code to a separate code tree
    * modernize (Java1.4 => Java5)

That's a pretty good set of recommendations -- except the last one. Why do you modernize? Has the old code rusted, as Spolsky so aptly termed it? Why even put in the opportunity for bugs if the code's working and it isn't using methods that are even deprecated in Java?

There really is a strange bias in computer hacking that says latest is greatest. Here's why -- New code keeps people in the industry employed. Who's against modernization?! You're going to need someone to do that for you, after all, and that's a few more hours to bill. If we could use VB 6 forever, how could Microsoft sell versions of Visual Studio.NET? How could our dotnetjunkie friends sell their horribly written books? How about the consultants who need to sell training to your EAE programmers?!

Look, as soon as I say this they'll "upgrade" (and who's against upgrading?!!) it, but have you checked the computer system they're using at McDonald's? Green monitors, ASCII-rific stuff. It works. It's in place. Don't bother it.

If anything, people should be getting their code back to 1.2 -- even 1.1 -- except where absolutely necessary (though I'm not advocating places where Java 2 platforms are already well in place to change). Generics are great, but we didn't do so badly before they came on the scene. If it works, don't break it.

In short, don't rewrite any code that works unless you absolutely need to. Write to an API and refactor intelligently, not to help consultants sell training.