Тонкая грань между рефакторингом и пустодрочерством
Про технические аспекты рефакторинга кода написаны целые книги, но что делать продакту, когда вместо фич команда рефакторит код и фиксит технический долг?
Разработчики говорят, что это кагбэ нужно, но ощущение, что работа стоит на месте. Фичи не шипаются, пользователи не добавляются, ревенью не растет. Как понять, что то, что они делают — действительно необходимо, а не дань “красивому” коду?
Для начала, хороший техлид/сеньёр сам должен уметь проактивно (то есть заранее, без сюрпризов во время ретроспективы по спринту, на которой выясняется, что план не выполнен) донести важность рефакторинга языком, который смогут понять его бизнес-партнёры. Если не может ответить на вопрос “зачем” понятным языком, это плохо. Возможно, вы дали джуну слишком много полномочий.
Продакт же, в свою очередь, тоже должен разбираться в технической части, чтобы не только задать правильные вопросы, но и понять ответы. В целом, я считаю, что продактам необязательно уметь кодить, но уметь читать код и задавать вопросы — очень полезный навык.
Моё правило рефакторинга и тех. долга — работа над ним обоснована, когда неисправление говнокода плодит ещё больший говнокод (код становится качественно говённее) или большее количество говнокода, который уже в краткосрочной перспективе начинает замедлять работу над фичами.
Попросите кодеров показать, что это правило действует для рефакторинга, который они хотят сделать. Если оно не действует, то они должны доказать, что это действительно нужно. А вы, в свою очередь, должны доказать им, что это не нужно.
Пример из практики.
На нашем сайте metacast.app полный п.дец в CSS стилях. Создавал интерн забесплатно, нам было некогда всё это ревьювить и мы недоглядели. Выглядело нормально… и так сойдёт.
Когда мы стали больше заниматься сайтом, я заметил, что при добавлении новых страниц, мы тратим больше времени на то, чтобы а) закопипастить говнокод из файла в файл и б) исправить глюки в растущем количестве файлов.
Сегодня мне нужно было создать новую страницу, и я не смог себя заставить в очередной раз копипастить говнокод. Я решил всё пофиксить и сделать полный рефакторинг CSS. На это уйдёт полдня-день, но зато на создание новой страницы уйдет пара минут вместо получаса.
Да, мы “потеряем” полдня сейчас, но мы сэкономим дни в ближайшие месяцы. У этого рефакторинга долгосрочный эффект.
Важное исключение из правила — сейчас это не влияет на сроки запуска. Когда ж.па пригорает, тушим техдолгом и говнокодом. Но после запусков обязательно нужно выделять пару недель на исправление косяков, техдолг и рефакторинг. Иначе команда так и будет копошиться в говнокоде, как свиньи в собственных биологических отходах.
Рефакторинг превращается в пустодр.черство, когда это похоже на нервный тик. Когда вместо того, чтобы копошиться в свинарнике, люди каждые 10 минут моют руки с мылом на два раза и каждые 5 минут инстинктивно, не думая, обрабатывают их санитайзером. Так же и разработчик, который не может пройти мимо кода, не зарефакторив его, скорее всего тратит ваше время и деньги впустую.