I'll try to be concise so as to not make this into a blog post. If there are specific questions, let me know and I'll do my best to answer them.
Basically, I'm interested in what methodologies people have come up with, and what benefits and short-falls they experienced, for managing the transition of a project from one framework (or one programming language, or one technology stack) to another.
The Setup
Suppose you had a simple web application written in a once-popular back-end framework that ran on a single Apache/Nginx/whatever server and delivered server-side rendered pages. Each time a user clicks a link to perform an action, the request is sent to the server, the one server handles the request, connects to the one database, makes the changes, then delivers a new page with the results of their action visible.
Now suppose 10 years down the line your app has grown into a widely popular behemoth and you're running into scaling concerns, you're having performance issues, you can't create features very quickly because all of the code is tightly coupled, some big names have started depending on your service being "Always Available" ™, or for some other reason you now need to change the engine underlying your app.
After weeks of research you may have made one small decisions like "Let's use React and offload a lot of the processing and display logic to the client's CPU", or you may have made multiple decisions involving splitting out your app into several micro-services and re-inventing the database using a map-reduce algorithm and a splash of machine learning. Whatever the final decision was, you need to retain feature parity with your old app and get it moved over to the new framework.
The Question
This question isn't about the technical details of this decision (e.g. "How do you do that") -- this is about the managerial details of this decision. How do you manage such a change?
Do you treat it like you're building a new app from scratch and every feature in the old app is just a user story in the new one?
Or do you treat it as a new feature for the existing app?
Should you branch off of the old code and begin the rework on a new branch of the old repository?
Or should you start a new repository for the new framework, since merge conflicts are not only expected but almost a roadblock as your underlying models and assumptions could be entirely different?
What becomes of the old app during the transitional period? Should you feature-freeze it to make parity easier? Or should you continue to develop in parallel?
I've seen a lot of methodologies for managing projects and I've picked and chosen my favorite tools from everything I've seen. But I've never seen someone manage to change frameworks well. Even something supposedly simple like moving from ReactJS to Vue (they serve the same purpose, they're both written in JavaScript, and many of the underlying assumptions and mental models are identical) can lead to months of development and wasted time before the change is scrapped because it just wasn't worth the effort.
Tags
I literally had no idea what tags to choose. Please help.