Не скажу, что очень большой знаток и умелец.
Поясню только свой опыт.
1. Пока работает код как надо - НЕ ТРОГАЙ его. Другими словами не обязательно что-то изменять. Вместо изменения можно написать обертки, другими словами вспомнить что существует паттерн проектирования Фасад.
2. Если же трогать нужно и в унаследованном коде бага - НАПИШИТЕ ТЕСТЫ. Не стоит на себя надеяться. Не надо из себя строить рэмбо. Подумайте как вы проверите результат своей работы после изменения? Другими словами, починив одно легко сломать что-то другое.
3. п.1 и п.2 со временем дают набор оберток и набор тестов, которые позволят Вам планировать работы по рефакторингу. Да, его надо бросаться делать не сразу, а только после серьезного набора тестов и оберток из вами написанного кода.
4. Чаще спрашивайте у заказчика о том, все ли фичи нужны или какие-то уже не приносят дохода? Другими словами : нет кода - нет багов и нет проблем с поддержкой!