Engineering and Product have very different concepts about the legacy code.
For the developers, there are two kinds of legacy code. The one is called legacy code, and it is everything made by somebody else. Another one is called the existing platform, and it encompasses all the code they have written themselves.
The legacy code legacy code is the nightmare of each and every developer. They are ready to rationalize any expenses, to participate in any politics and to state any thesis, just to avoid dealing with legacy code legacy code. When forced to deal with it, they lose motivation, become clinically depressed, and finally either quit the job or become alcoholics.
On the contrary, the existing platform legacy code is the dear baby of software developers. They love it with all their heart, and will rationalize any expenses, participate in any politics and state any thesis, just to help their baby remain alive and continue developing it. When forced to kill it, they lose motivation, become loud, cynical and poisonous, then clinically depressed, and finally either quit the job or become alcoholics.
PMs are not so differentiated. For Product, legacy code is product obesity. When you have too much of it, nothing in the product fits anymore. It walks rather than runs, and it smiles instead of dancing. Taking careful measures replaces winning, as it is foresightful rather than spontaneous. It looks solid rather than sexy. It takes double space and time rather than being invisible, it requires custom rather than stock solutions, and it costs twice as much to build.
And legacy code is almost impossible to get rid of.