I posted this comment as response to a blog post on drie.es (https://dri.es/drupal-7-8-and-9). I hope that it will be published soon.
IMHO the problem is not the migration of the core to a new version itself, the contrib modules are often a real bottleneck.
During the migration from D6 to D7 a few years ago, the probability to find a ported module was quite higher than when migrating from D7 to D8.
Now, often there are alternative modules (which also make sense,due to technological evolution), but no possibility to transfer data/content. It's often the search of a needle in a haystack, to find a reliable, stable (successor-/alternative-)module which supports existing data when migrating a grown website to a new Drupal version.
As a site builder I would appreciate an API (and perhaps a GUI) where I can export data as painless as possible as CSV, JSON, XML, or YAML. Then it would be much easier to modify data if a (successor-/alternative) module require another data structure (if no suitable upgrade path is available). Also a way vice versa should be provided.
Every module should get a special flag, a shield or badge which supports these possibilities. When searching for a module on drupal.org the user should be able to set a filter to find those modules.
These modules should be in every Drupal core, and then contrib modules can as a solid base rely on it:
- Views data export (https://www.drupal.org/project/views_data_export)
- Feeds (https://www.drupal.org/project/feeds)
Just my 2 cents.