Angular has an interesting history.
Angular started in 2010, and it grew into a very popular web framework. But at some point, it was decided that the current Angular structure needed a significant change. So in 2016, a new version of Angular was launched. This broke Angular into two major versions. The v2+ lineage is now called Angular, and the <2 lineage is called AngularJS. They are very different.
This was a major change, and it annoyed people. This breaking change didn’t sit well with many. In software, we always want an upgrade path.
Upgrading from version 1 to version 2 is not really a migration but more of a port from one platform to another. For example, moving from AngularJS to React is probably not much more complex than AngularJS to Angular.
But I think this history and this frustration in the community created something interesting. It created a culture of focusing more on what an upgrade path can and should look like. Unfortunately, this focus on the upgrade path is nearly non-existent in the open-source software world.
Most frameworks/platforms handle upgrades programmatically, and the upgrade notes as just that some random text posted somewhere. The Angular team took what they learned from the hassle they caused with the version 1 to version 2 upgrade. They began focusing on providing a better upgrade experience.
They provide a website where you select your current version and the version you want to upgrade to. Based on that, it gives you the steps you need. The Angular update page won’t solve all your problems, but it provides helpful guidance. The page even supports migrating from version 2 all the way to version 12. Of course, the page will never cover how to upgrade third-party libraries (which is a good reason always to be very careful when including libraries into any project).
The Angular community suffered through a bad upgrade experience when moving from version 1 to version 2, but out of that was born a better focus on upgrades. I only hope their lead here spreads to other frameworks.