Here is what I do. Not saying it is the best way, or even the right way, but ... I first make sure that I have all the contrib modules that I am using, or weed out some of them (some are not really used much, not that important, ..etc). Then, I start with a copy of the file directory from the live site, and a database dump. I install them on a test server, then do the upgrade. I do not disable the add on modules during an upgrade. I write down the problems I faced, and what workarounds I had to do (e.g. manually do an ALTER, or CREATE TABLE). I test the site to see if everything is working. Then, the above is repeated on the live sites. Until last summer, I used multisite with one database with prefixes. This dictated that upgrades have to be done in fast for all sites, which is sometimes inconvenient. Since then, I separated the sites each in its own vhost and own database, so they are totally separate. This means I can upgrade the most important site on a weekend, the next one a week later, ..etc. Less time pressure ...