Archive for the ‘Разное’ Category

Ремонт нельзя закончить, его можно только остановить.

Пятница, Февраль 15th, 2008

Сегодня, немного углублюсь в технические особенности рефакторинга и их бизнес последствия.

Я не буду рассматривать обычный маленький рефакторинг, когда в процессе проекта проекта немножко изменяется и улучшается код. А я хочу рассмотреть ситуацию, когда код находится абсолютно в жутком состоянии.

Естественно, проект лучше не доводить до жуткого состояния, но тем не менее, множество проектов до него таки доходят и зачастую не в ваших силах было на это повлиять (например, когда проект вам достался в наследство).

Собственно, в чем проблема проектов с плохим кодом. Опустим моральную сторону, что над проектом плохим кодом неприятно работать, так как постоянно приходится все делать через одно место.

С бизнес точки зрения проблема состоит в том, что:

— существенно увеличивается время на внесение изменений и написание новой функциональности

— соотношение поддержка старого кода / инновации, очень сильно начинает крениться в сторону поддержки

— увеличивается время «въезжания» новых программистов в проект

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

Сначала, опишу три выхода из этой ситуации, а потом обсудим каждый их них:

— сделать кучу маленьких рефакторингов

— переписать все заново

— сделать большой рефакторинг

Начнем с малого рефакторинга. В любой момент, если вы видите, что можно по ходу работы потихоньку обновлять и улучшать код – то это и нужно сделать, так как остальные выходы гораздо хуже (более рискованные и съедают больше времени и увеличивают время до выхода следующей версии).

Бывают такие ситуации, когда малые рефакторинги — не выход. Например, если постепенное улучшение кода может занять 5 лет.

Переписывать заново нельзя никогда. Точнее переписать прототип на рабочий код можно (а зачастую и нужно), но вот переписывать работающий продукт – это самоубийство.

Плохой код состоит из нескольких частей

— плохая и непродуманная архитектура (написание проекта без продумывания архитектуры наперед)

— плохой код на уровне использования языка (обычно это код написанный слабыми или неопытными программистами)

— кучу заплаток поверх архитектуры

Переписывание заново лучше всего решает архитектурные проблемы. Плохой код на уровне языка оно решает, только если текущие программисты сильные чем те, которые писали предыдущую версию. А вот с заплатками обычно наблюдаются проблемы.

Чаще всего большинство функциональности заплаток упускаются при переписывании, так как обычно это куча мелких частных ситуаций, которые не внесены не в тесты, не в документацию. И получается, что код переписан, но он не выполняет всей функциональности или не работает во все usercases. Причем, это обнаруживается в самом конце переписывания (когда начинается полное тестирование). И опять поверх стройной новой архитектуру начинают копироваться или переписывать заплатки из предыдущего проекта. Обычно это очень затягивается, фактически убивая заново написанный продукт.

Теперь, перейдем к возможности большого рефакторинга, о которой собственно это статья. Большой рефакторинг – это ситуация, когда он проводится не параллельно с разработкой чего-то нового, а скорее в режиме когда проект замораживается для новой функциональности и пофикса и начинается рефакториться день и ночь.

Обычно такой рефакторинг позволяет существенно улучшить качество проекта в достаточно короткие сроки, без необходимости переписывать проект с нуля.

И тут кроется одна большая проблема, качество кода, достаточно сложно измеримая величина. Поэтому рефакторить проект можно до бесконечности полируя заново какие-то кусочки. Поэтому, еще до того, как начинается рефакторинг нужно определиться с несколькими вещами:

— что конкретно улучшается

— поставить жесткие временные рамки

— точно определить как будет измеряться достижения целей

Если не соблюсти эти три правила, то рефакторинг превращается в научное исследования уходящее в бесконечность или ремонт (кому какое сравнение ближе к душе).

Очень важно избежать двух тенденций.

Первая тенденция – это то, что во время рефакторинга находятся все новые плохие куски, которые тоже хочется/нужно улучшить. Как только цели определены, то нельзя их изменять. Вполне имеет смысл иметь список, того, что хочется улучшить. Однако новые улучшения можно делать маленькими рефакторингами, когда большой будет закончен.

Вторая тенденция – это сверх улучшение качества, при этом выход за временные рамки. Цель рефакторинга, не является добиться идеального качества, а является увеличшенить качество до определенного уровня. Поэтому нельзя переконцентрироваться на полировке какой-то части перерасходуя бюджет и время.

Но, повторюсь еще раз, нужно пытаться всеми силами избежать большого рефакторинга, если маленький остается возможным.

 P.S. Если вы подписываетесь на получение  писем, когда кто-то добавил комментарии на статью, то теперь есть возможности перейти сразу на нужный комментарий из письма, вместо того, чтобы заходить на статью и искать вручную этот комментарий.

Выбор и работа с фирмами партнерами.

Четверг, Декабрь 20th, 2007

Выбор партнеров вообще сложная тема, но я лишь хочу взглянуть на две вещи. Первая – это то, каких размеров должна быть фирма партнер и чего стоит опасаться при разных размерах.

Если фирма партнер гораздо больше чем ваша фирма, то вам очень аккуратно надо относится к тому в какие она сроки хочет от вас что-то получить и какие это объемы работы потребует. Просто у них могут быть сотни программистов работать над продуктом, а у вас всего два и они могут не подозревать, что 4-5 задач, которые вам нужно сделать могут растянуться на недели. Соответственно им есть больше чем рисковать, особенно если от вас будет зависеть продажи их услуг/продуктов, поэтому они будут очень жестоко давить со сроками.

Соответственно, есть обратная ситуация, если в вашей фирме работает десяток программистов, а у ваших партнеров только один, то вполне реально, что также как в прошлом варианте партнеры не могли представить, что 4-5 задача займут недели, то в вашем случае, вы можете застрять на недели в ожидании, что того, как будет закончена одна задача.

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

И второе, что надо учесть, особенно при работе с большими партнерами, что они могут (и вполне вероятно) ведут двойную игру, особенно если у вас что-то идет не слишком гладко в работе с ними. Они могут иметь других партнеров, на тот случай, если ваша компания не сможет выполнить необходимые задачи или будет затягивать их.