Depends on team size. With larger team the technical debt turned into a positive feedback loop. Not good. Cyclomatic complexity increased. Methods became a black box. A junior coder would copy and paste a method and change one parameter to make it work for a new context. Nearly identical methods would proliferate. Milestones would slip.
Here's how I dealt with each:
1) reduced the internal team to half its size
2) fired the offshore team and started from scratch
3) personally attempted a mass refactor / 90 hour weeks
4) refactored 49K line C++/ObjC++ to 29K Swift
Result of each:
1) product shipped, became industry standard
2) Speed improved, Apple offered to feature product
3) I failed, resigned after burnout
4) Easy and enjoyable refactoring to SwiftUI