Рефакторинг – комментарии и вопросы читателей
Удивительно, но прошлый пост про рефакторинг вызвал у вас бурю эмоций — и это здорово. Значит, тема живая и болит у многих. Читатели накидали вопросы и замечания, и я хочу на них честно ответить — без красивых обёрток и без позиции «разработчик всегда прав».
Про «рефакторинг на пустом месте»
Меня поправили насчёт фразы, что рефакторинг на пустом месте не рождается. Увы, рождается — и я сам не раз был его инициатором. Чаще всего это выглядит так: разработчику стыдно за какой-то кусок кода, или хочется попробовать новую технологию, и он начинает придумывать проблемы, натягивая сову на глобус. А потом бежит к менеджеру с горящими глазами и пеной у рта: «Нам срочно надо всё переделать!»
Знакомо? Тогда вы точно видели посты в духе «Как продать рефакторинг руководителю?». Я к ним отношусь скептически. Сама постановка задачи «продать» напоминает мне «Волка с Уолл‑стрит»: там тоже очень убедительно впаривали клиентам то, что им не нужно.
Если вы руководитель (даже не технический), вы и так знаете боли своего проекта: где теряются деньги, где самые большие затраты, где всё постоянно ломается. Вряд ли разработчик расскажет вам что-то новое про эти места. Вы и так понимаете, что хотите «купить». А вам пытаются продать совсем другое.
При этом я не отрицаю, что бывают реальные технические проблемы, на которые долго закрывали глаза. Но даже не будучи технарём, по паре фраз можно понять ценность доработки. Такой рефакторинг не нужно «продавать» — он сам себя продаёт.
Яркий пример: в посте про нашу стартовую точку я рассказывал, что наша кодовая база была написана на версии SDK, которую Apple отказывалась принимать в App Store уже через полгода. Это грозило полной остановкой релизов. Тут не нужно было придумывать тысячу аргументов: остановка релизов — это понятный и очень дорогой риск для бизнеса. Ресурсы на рефакторинг выделили без лишних вопросов. Если бы не выделили — я бы не стал упорно «продавать» эту задачу, а искал бы другой путь или вообще смирился с оценкой бизнеса.
Что делать, если поддержка фреймворка заканчивается, а новая версия — совсем другая?
Ещё меня спросили: «Что делаете, если заканчивается поддержка текущей версии фреймворка, а новая кардинально отличается: рефакторите или выбрасываете и пишете с нуля?»
Мой ответ простой (и я уже упоминал его раньше): в большинстве случаев мы… просто не обновляемся. Потому что «чтобы что»?
Да, новые версии фреймворков часто делают код чуть красивее или добавляют модные фичи, но этого недостаточно, чтобы окупить масштабный рефакторинг — особенно если речь о мажорных обновлениях.
В нашем случае ситуацию дополнительно фиксирует специфика отрасли: есть Великий и Ужасный Регулятор, который жёстко ограничивает обновления публичных библиотек после определённой даты, которую нельзя называть. Хочешь обновиться? Нельзя. И знаете, я даже благодарен этому правилу: оно снимает огромное количество споров и бессмысленных хотелок разработчиков. Безопасность и стабильность тут важнее «красивого кода».
Рефакторинг MVP: переделывать или выбрасывать?
Мне подсказали ещё одну интересную мысль: рефакторинг уместен на этапе MVP — после подтверждения гипотезы MVP дорабатывают до боевого уровня. Но я встречал и противоположную позицию: MVP вообще не рефакторят, а просто выбрасывают, потому что дешевле написать заново.
Честно? Сейчас я не готов уверенно встать на одну из сторон: плохо помню, кто и чем обосновывал эту идею, и хочу сначала сам для себя всё разложить по полочкам. Так что эту тему я отложу на отдельный пост — сделаю нормальную ретроспективу и расскажу, что же говорит теория. (Идея высказывается Ф.Бруксом в его ставшим уже классическим труде «Мифический человеки-месяц». Не читал, не осуждаю ☺️ ).
· 09.07
Благодарю за продолжение!
По вопросу обновления версий библиотек и фреймворков есть одна "маленькая" ремарка - чаще всего они содержат не только новые фичи, но и используют новые технологии, которые полезны не только разработчикам, но и пользователям, и, что еще важнее, обновноления как правило содержат в себе устанение уязвимостей. У нас в компании от коллег из отдела по информационной безопасности переодически прилетают требования применить обновления. И иногда это порождает весьма объемные изменения в проекте.
Мне самой не нравится "продавать" рефакторинг, но есть ситуации когда без него ни как. Риски приходится анализировать, подсвечивать руководству и планировать их минимизацию 🙌
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 09.07
Спасибо. Ценное замечание.
В таких случаях я пользуюсь правилом: “Не провоцируй изменения сам и проси других, не провоцировать их для тебя, если это возможно”.
В указанном Вами случае я бы обратился к подрядчику и попросил у него патч безопасности на прошлую минорную версию. Возможно, они бы потребовали за это денег, но сумма явно была бы на порядок, а то и 2 дешевле внедрения Вам новой мажорной версии. Вы получаете ровно то, что Вам нужно: критические обновления безопасности и неизменные контракты с отсутствием дорогого и ненужного рефакторинга.
А по функционалу для пользователей: это я уже объяснял. Если он окупится, то рефакторинг возможен. А если не окупится, то заявлять, что функционал пользователям нужен, если они за это платить не готовы – имхо, некорректно 🤷♂️ никакого противоречия с тем, что я писал ранее.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 23.07
Меня тут еще поправили. Вы действительно говорили об MVP – minimum valuable product или об PoC – proof of concept? Я все же подразумевал второе 🤦🏻♂️
Что касается именно MVP, то тут дело такое.
1. Это боевое приложение, хоть и с минимальным функционалом. Оно должно быть реализовано достаточно качественно и понятно. Поэтому нуждаться в рефакторинге для последующего расширения не должно. Тем более, что существует множество практик, как расширять функциональность без изменения ранее написанного кода.
2. Рефакторинг по определению имеет цель улучшить понимание кода и только эту цель. Если MVP только что написано, то проблем в понимании кода твит не должно. Если только вы полностью не сменили команду. Если же Вам нудно дорабатывать MVP для повышения других характеристик: скорости, отзывчивости, надежности, стабильности и т.д, то это уже не рефакторинг. Это вполне себе продуктовая задача по увеличению нужной характеристики.
Так что все же для MVP рефакторинг тоже не нужен, если все делается правильно.
Что скажете, Наталья?
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён