7/25/2009 4:40:32 PM

Завтра – последний день отпуска. Неделя быстро пролетела. С понедельника возвращаюсь на работу.
Хочу пожелать себе в этой связи, чтобы я вернулся на работу, а багфикс там был уже закончен. Не люблю багфикс. Понимаю, без него не бывает. Но у нас ситуация особенная, можно сказать даже новая для меня: в самом начале проекта было допущено много ошибок. Организационных, методологических, всяких. В результате только с моего прихода в команду я переписал, наверное, четверть проекта – пытался построить архитектуру, с которой можно жить. Еще пара человек делали то же.
Но даже с учетом такого, иногда весьма серьёзного, рефакторинга всё это дело вылилось в несколькомесячный багфикс (в результате которого тоже было очень много рефакторинга).
Когда я уходил в отпуск неделю назад тучи уже практически рассеялись (потому и отпуск дали :)). Продукт работал, даже сроки не были сорваны.
Надеюсь, я вернусь – и всё будет хорошо. Можно будет работать дальше.

Не люблю багфикс, никому не пожелаю. Так и хочется сказать: люди, не бойтесь делать нормально поддерживаемый код! Не бойтесь рефакторить! Душите все эти “нафигааа мне два класса, я лучше по-быстрому в одном методе напишууу”, лупите по рукам клавиатурами тех, кто делает такие подлянки :)

Вообще, на мой взгляд, основными допущенные изначально командой ошибками были:

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

Сейчас эти проблемы в нашей команде можно сказать решены. Поздновато они были решены, но такова жизнь. За это заплачено достаточно большой потерей времени (можно было сделать раньше) и достаточно большими переработками всей команды (отчего и устал и ушёл в отпуск, и многие сейчас уходят).
И всё это вылилось, как я сказал, в несколькомесячный трудный, унылый, утомительный багфикс. Наша команда ошибки осознала и исправила (хоть и не осталось практически никого из “первого состава”).
Всем остальным от всей души советую этих ошибок не допускать, а если они есть – вырывать с корнем прямо с понедельника :)

Cебе желаю, чтобы багфикс к понедельнику благополучно закончился :)

Comments (11) -

7/25/2009 11:55:07 PM

Sergii

Жизненно. Постоянно с этим борюсь. Особенно часто встречается п.4.

Sergii Russia

7/26/2009 8:31:44 AM

Oleg

Все правда! Так их! Ни шагу назад! Обоими руками - за!
Когда слышишь слова "У нас проекты долго не живут, сделаем по-быстрому" хочется сказать, что такие проекты не живут вообще... На моем новом месте проблемы в основном с общением. Каждый делает все втихомолку. Это и убивает.

Oleg Australia

7/26/2009 12:05:35 PM

Alexey Raga

Олег, это можно победить!
Мы победили это в Бельгии и победили в Австралии! Smile Главное - найти одного-два единомышленника - и дело пойдёт! Smile

Alexey Raga Australia

7/28/2009 1:18:48 PM

Michael Smirnov

Чтобы не было такой проблемы - нужен системный подход в разработке.
То, что так все сложилось - вина вашего руководства, которому видимо не хватило в определенный момент знаний или воли.

Michael Smirnov Russia

7/28/2009 2:27:32 PM

Alexey Raga

Нет, то, что так сложилось - это вина той команды, которая начинала всё это дело.
Руководство тут абсолютно ни при чём.
Сейчас, как я уже сказал, мы всё пофиксили (я имею в виду и подход к разработке и сам процесс), руководство в это не втягивая. У руководства есть дела поважнее и свою работу оно делает очень хорошо.
Процесс разработки - целиком на совести команды разработчиков и больше ни на чьей Smile И сейчас наша совесть [почти] сободна.

Alexey Raga Australia

7/29/2009 6:13:14 AM

Elena

Миш, у тебя на сайте вирус. Аваст заверещал.

Elena Australia

7/29/2009 8:36:30 AM

Michael Smirnov

Я имел в виду непосредственное руководство вашей команды.
Ну а если такового нет, тогда нечему удивляться.

Michael Smirnov Russia

7/29/2009 11:05:54 AM

Alexey Raga

Странный ты Smile Есть руководство - и ты не удивляешься, оно и виновато. Нет руководства - и ты не удивляешься, в этом и проблема Smile Когда же ты удивляешься? ;)

Команда - сущность самоорганизующаяся. Никакого руководства ей, вроде бы, и не нужно. Во всяком случае я не вижу места такому звену. Если можешь - покажи мне его ;)

Alexey Raga Australia

7/31/2009 8:56:06 AM

Michael Smirnov

Посмотрим что за вирус........

Весь вопросов в том, в каком направлении команда самоорганизуется.
Помнится, в бытность мою в филип моррисе тоже была команда без руководства. Начать работу так и не смогли. Отдел закрыли Smile
Ваша первая команда тоже видимо не в ту сторону самоорганизовалась Smile

Michael Smirnov Russia

8/2/2009 12:23:09 PM

Alexey Raga

Насколько я помню, ваша команда ms-sql-программистов в филип моррисе просто доказала эффективность использования Оракла с целью поизучать оный, была уволена полностью и были, видимо, наняты ораклисты.
Я даже помню чью-то фразу "вся команда уехала в одном вагоне метро" ;)
Вопрос НЕ самоорганизации.

Alexey Raga Australia

8/2/2009 1:12:39 PM

Alexey Raga

А по поводу первой команды нашей: она НЕ самоорганизовывалась. Вообще. У нас пошли по пути "Вася за 2 недели сделает фичу А, Петя и Миша - Б, а Маша пока делает дизайн.". В итоге Вася сидел 2 недели в уголке и делал свою фичу А. Потом, чуть дальше, начал срабатывать пункт 4 в Вася просто погряз в этой фиче. И Петя, который в соответствии с 4, делал фронтэнд фичи Б - тоже. И Миша, который делал бэкэнд для этой фичи, тоже в соответствии с 4, погрязли тоже. И Петя с Мишей иногда даже ругались - дескать, фиг ли!
Команда НЕ самоорганизовывалась. Команды просто _не было_. Был набор людей.
Как только стала самоорганизовываться _команда_, то и результат стал горааааздо лучше, код стал гораааздо чище, а архитектура - горааааздо чётче. Правда, очень многое пришлось просто переписать.

Кстати, заметил немаловажный факт: если человек сидит и занимается своей задачей по пункту 4, то качество его работы существенно ниже. Потому как он подсознательно знает, что никто на его код смотреть не будет, а когда надо будет - он поправит, если что.
Когда же программист подсознательно знает, что завтра с его кодом будет работать другой человек, который за грязь и костыли может и на смех поднять, а может и по голове огреть (образно), то он и пишет нормально. Потому как костыли делать и писать грязно - это как-то неприлично коллегам показывать.
Это не потому, что он безответственный, или плохой товарищ, или не коммунист вообще, это, повторюсь, как-то подсознательно происходит. С программистом любого уровня.

P.S. мечтаю о код ревью.

Alexey Raga Australia

Comments are closed

Powered by BlogEngine.NET 2.5.0.6

About the author

Alexey Raga Alexey Raga
.NET software developer.

E-mail me Send mail

Twitter


Recent posts

Archive

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2012

Sign in