Завтра – последний день отпуска. Неделя быстро пролетела. С понедельника возвращаюсь на работу.
Хочу пожелать себе в этой связи, чтобы я вернулся на работу, а багфикс там был уже закончен. Не люблю багфикс. Понимаю, без него не бывает. Но у нас ситуация особенная, можно сказать даже новая для меня: в самом начале проекта было допущено много ошибок. Организационных, методологических, всяких. В результате только с моего прихода в команду я переписал, наверное, четверть проекта – пытался построить архитектуру, с которой можно жить. Еще пара человек делали то же.
Но даже с учетом такого, иногда весьма серьёзного, рефакторинга всё это дело вылилось в несколькомесячный багфикс (в результате которого тоже было очень много рефакторинга).
Когда я уходил в отпуск неделю назад тучи уже практически рассеялись (потому и отпуск дали :)). Продукт работал, даже сроки не были сорваны.
Надеюсь, я вернусь – и всё будет хорошо. Можно будет работать дальше.
Не люблю багфикс, никому не пожелаю. Так и хочется сказать: люди, не бойтесь делать нормально поддерживаемый код! Не бойтесь рефакторить! Душите все эти “нафигааа мне два класса, я лучше по-быстрому в одном методе напишууу”, лупите по рукам клавиатурами тех, кто делает такие подлянки :)
Вообще, на мой взгляд, основными допущенные изначально командой ошибками были:
- “Сделаем это просто и быстро”. Любая задача решается “в лоб” без оглядки на какую-либо общую инфраструктуру, архитектуру, что бы то ни было. Проще написать спагетти-метод на две страницы, чем изобретать какую-то декомпозицию, API и т.д. Он будет работать здесь и сейчас – это нам и нужно.
- “Будем думать только о реализации текущей задачи”. Программист получает таск (задачу) и делает её так, чтобы в максимально короткий срок выдать её решение. При этом человек не думает о том, насколько это решение укладывается в общую архитектуру, укладывается ли вообще и насколько просто/сложно будет потом это решение поддерживать. Сколько нужно усилий будет приложить потом, когда требования изменятся или расширятся. Как потом строить что-то поверх, имея в основе данное решение. Всё это приносится в жертву тому, чтобы поскорее поставить задаче статус “done” и объясняется тем, что “сделано быстро и просто, надо будет – просто переделаем этот кусок”.
- “Решим конкретную задачу”. При этом такое “решение” совершенно не является решением. Оно является костылём. Как-то что-то подпёрли – вроде пошло дело. Что-то помешало – подопрём и это немножко с другой стороны. Работает же! О! очень не люблю фразу “работает – не трожь”. Есть основания.
- “Кто делал эту часть?”. Люди, которые делают какую-то часть проекта. Другие люди не знают этой части, не знают, как оно сделано, почему оно сделано так, насколько оно вообще сделано (несмотря на статус “done”). Когда возникают какие-то проблемы или появляются новые требования, в команде возникает вопрос “Кто у нас делал эту подсистему?” и ответ “А это не я, это XXX” и задача автоматически делегируется этому человеку.
- “Поставим костыль”. Очень похоже на номер 3, но поскольку это оооочень плохо и мы ооооочень много на этом накалывались, напишу ещё раз :) Внося исправление, программист видит, что там, в коде, не решение задачи, а какой-то бред написан (утрирую). Даже если задача попала ему в соответствие с пунктом 4. А уж если нет… При этом он, в соответствие с 2 и 3 думает: “А ну его нафиг! Щас вот тут подправлю, подфиксю – и будет работать”. И подфиксивает. И оно работает. До следующего раза. Потому, что решение так и не было предложено. Потому, что для того, чтобы получить решение, нужно много отрефакторить и много переписать. В результате, как показывает практика, хотя кода становится в полтора раза меньше, но времени-то тратится куда больше на то, чтобы написать это решение плюс повыкидывать те костыли, которые уже успели понаставить.
Сейчас эти проблемы в нашей команде можно сказать решены. Поздновато они были решены, но такова жизнь. За это заплачено достаточно большой потерей времени (можно было сделать раньше) и достаточно большими переработками всей команды (отчего и устал и ушёл в отпуск, и многие сейчас уходят).
И всё это вылилось, как я сказал, в несколькомесячный трудный, унылый, утомительный багфикс. Наша команда ошибки осознала и исправила (хоть и не осталось практически никого из “первого состава”).
Всем остальным от всей души советую этих ошибок не допускать, а если они есть – вырывать с корнем прямо с понедельника :)
Cебе желаю, чтобы багфикс к понедельнику благополучно закончился :)