I had to do an upgrade of a very large and complex Drupal 5 site to Drupal 6, and ended up with a process of upgrading to Drupal 6, manually tweaking things, exporting to features, then rinsing and repeating to the point where all I had to do was upgrade, then enable the features, but this took a fair bit of work and features doesn't cover everything.
On the other hand I had the pleasure of spending a bit of time with migrate module during the migration of a large site to D7 and migrate module was a much nicer experience:
* It can be run from drush.
* It gives you nice status updates as it goes along.
* You can rollback.
* You can do incremental migrations from a live site.
* It uses Drupal APIs for the incoming content.
* You can set your Drupal 7 site up with a nice install profile before running the migration so everything's ready.
* You can post new content to your Drupal 7 site, alongside doing the migration from the old one, with a bit of extra work.
None of these things are true for update.php, except maybe the drush bit.
I'm not sure exactly how this would look, but a few ideas:
- Instead of hook_update_N(), we set up migrate classes for core (and contrib modules with data to migrate) that takes the Drupal 6 data and uses Drupal 7 API functions to import it.
- With exportables in Drupal 8, we'd want to have some method of upgrading Drupal 7 exportables (probably from contrib) to Drupal 8. Something like this has existed for Views upgrades although I've never used it.
- For large sites, they may not want to go the exportables route, and just build the site in Drupal 8, then pull in the old content.
- It would be entirely possible to have migrate classes from Drupal 6 content too, making it easier to skip major versions.
- We'd have the incoming classes all ready for people migrating from other platforms.
- We'd still need to use hook_update_N() for alpha/beta/rc upgrades - but there shouldn't be too many schema updates once we get to that point.
- this is potentially a much smoother workflow if you have a large upgrade to do.
- it's potentially much more confusing for novice users upgrading their sites, although there ought to be a lot less that can go wrong (since we'd never actually alter the data in the Drupal 7 site).
- Drush is great, but for people not using drush we need a UI. Drupal 6 migrate module had one, but I'm not sure if there's a plan to add that to the Drupal 7 version.