Рефакторинг
В индустрии термин рефакторинг давно мутировал. Часто под ним подразумевают всё что угодно, кроме самого рефакторинга: оптимизации, перепроектирование, добавление фич и т. д.
Разработчики пытаются согласовать с менеджерами выделение времени на рефакторинг — тем самым перекладывая ответственность за качество системы на бизнес. А бизнесу, в общем-то, сложно понять, зачем тратить время на «улучшение того, что уже работает». Это порождает конфликты, которые ни к чему хорошему не приводят.
Мартин Фаулер даёт хорошее определение: Рефакторинг — это изменение внутренней структуры кода без изменения его внешнего поведения.
То есть во время рефакторинга можно изменять реализацию, но нельзя менять поведение и контракты. Если во время улучшения кода вы меняете поведение — это уже не рефакторинг.
Не нужно “продавать” рефакторинг, тесты и другие технические практики бизнесу. Это естественная часть работы разработчика. Если вы продаёте рефакторинг, вы даёте возможность его не купить и перекладываете ответственность за качество на других.
Вместо этого — включите рефакторинг в повседневную рутину. Это даст:
- Постоянное улучшение архитектуры кода
- Упрощение понимания кода
- Снижение количества багов
- Повышение скорости разработки
Мне близко правило бойскаута: Оставь место стоянки чище, чем оно было до твоего прихода.
Поэтому, если вы затрагиваете какой-то участок кода в рамках своей задачи — улучшайте его.