Before adopting any new-style practice or tool, you must make room for it by discarding some or all of any previous organizational practices (or tech) in that area.
A small, light-weight process which is constantly tuned and adjusted to fit the context in which you are living today.
No wasted effort or investment in rituals that no longer have material benefit.
You replace existing practice and workflow with new ideas, you don’t add new practices in addition to the practices they should replace.
For instance, if you are currently using long-term, detailed estimates (as in waterfall and other plan-based approaches) you would not continue to use those with agile-style, short-term work decomposition; it’s one or the other.
If you have a weekly, team-wide status meeting, you’d replace that with the faster daily team sync.
For code, there’s a range of what “throw out” might mean. For code in progress, it might be as simple as delete the outdated code immediately. For a framework that’s been deployed and is in wide use, you’ll need to deprecate it: migrate to the newer replacement for future development, and schedule the old code’s maintenance and end-of-life appropriately.
But in any case, it is vitally important to remove the old as you introduce the new in order to keep things manageable.
Trying to shoe-horn an incremental, iterative approach into a rigid, naive, plan-based “traditional” infrastructure.