Плохой код и рефакторинг
Плохой код работает, уже протестирован продакшеном и приносит прибыль. В нем учтены все актуальные хитрые и граничные ситуации. Это его главное преимущество перед переписанным или отрефакторенным.
Рефакторинг нужен для того, чтобы последующие изменения были быстрее и проще.
Рефакторинг должен быть как можно более мелким и изолированным.
Рефакторинг не должен менять поведение и функциональность ни в сторону развития, ни в сторону деградации.
Рефакторинг не должен фиксить баги, за исключением случаев, когда их действительно сложно пофиксить в исходном "плохом" коде, а в новом коде нужно их отдельно предусматривать. Фиксите баги отдельно, документируя подробно в коммит месседжах, чтобы потом было легко понять, что для чего было сделано.
Код до и после рефакторинга должен быть рабочим. Слова на погуглить: "stable intermediate forms".