Each sprint extracts one method from the class into a pure function. The method disappears from the class. The function appears on the right. The class call that used to invoke self.calculate_total() now calls calculate_total(items, coupons, tax_rates). The behavior is identical. The tests still pass. But the function is independently testable, has no hidden dependencies, and can be composed with other functions without instantiating the class.
By Sprint 10, the class is an empty shell: a declaration with no methods. Sprint 11 deletes the class declaration. Sprint 12 is the cleanup: remove the import, delete the file. Twelve sprints. Thirty seconds in the animation. Three weeks in a production codebase.
This is the strangler pattern. You do not rewrite the system. You extract from it, one piece at a time, until the original structure is gone and only the functions remain. Every sprint ships. Every sprint is safe. No big bang. No rewrite. Just steady, incremental improvement that compounds over time.