Planning a Drupal upgrade

I've recently been upgrading a lot of Drupal 6 sites to D7 and I'm finding that these sites, which have often been upgraded from 4 or 5 have one thing in common - there is a lot of cruft in the shadows. That cruft can really slow down the upgrade and because the process is quite opaque you can spend time debugging problems that you wouldn't have need to solve if you'd removed the cruft in the first place.

When upgrading a Drupal site to a new major version one of the first things they say on drupal.org is

Make an Upgrade Plan

Yeah, well, you're thinking maybe I'll just follow the instructions, let's face it this is going to be painful enough anyway without messing around with a plan.

You are right, it's going to be painful, you are going to find database tables that despite your best efforts refuse to update, Views that loose it completely, I mean completely break complaining about some missing facet that needs to be set in a 3 level deep interface element buried in the Views dashboard, the same one that is now only intermittently working because of some jquery-ui miss-match that you haven't nailed down yet.

That doesn't even take into account the contributed modules that no longer exist, custom modules written by cretins on a deadline for Drupal 4.7 that have been 'upgraded' twice already but still have $may_cache in them and so on endlessly until at last you have a newly upgraded site. But lets face it, at the end of that you have the same ugly messy crap but now with another 6 years of security support.

A Drupal site after a few years is often like a neglected garden, sure that concrete path seemed like a good idea at the time, but it's ugly and hard on the feet and not really meeting todays needs, why not rip it out while we're doing a load of work any way? I know you're used to it but it's not right. Put in something lighter and more responsive. Anyway, if we need to get our hands dirty why not rip out the ugly stuff and replace it with something easier to maintain and performs better?

Re-visit those crusty old views that have 2 or 3 template files (and still look a bit shady because it really needs preprocessing) and cleaning them up or even better replacing them with code, which performs better and easier to manage via a git repository than in the database (yeah this is my current bugbear).

Start the theme again, or at least go through and rip out all those node templates for forgotten template types. And if you can't see why there is a preprocess function in template.php take it out, see why it's there - there is a reasonable chance that it isn't there for any reason at all except for a forgotten request by a guy in marketing to put a link to a defunct marketing campaign - obviously that shouldn't be in the theme, but sometimes it is.

Question all of it, by clearing out the old and making a plan to replace the crap you'll save time on the upgrade process and as a bonus not have to look at that horrible concrete path anymore.