Почему многие программисты не любят legacy проекты

Многие люди не сильно посвящённые в области программирования удивляются, а иногда даже негодуют на отсутствие у некоторых программистов энтузиазма в плане работы с legacy проектами.

Что такое представляют из себя подобные проекты и в чём состоит причина такого отношения к ним со стороны программистов?

Понятие legacy проекта

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

Какие бывают legacy проекты

Legacy проекты можно классифицировать по двум категориям: качество технической части и развитие.

По качеству технической части можно выделить две группы:

  1. Проекты, которые написаны и поддерживались квалифицированными специалистами назовём их для краткости «Проекты от профи»);
  2. Прочие проекты (проекты не профессионального качества).

В плане развития также можно выделит две группы:

  1. Развивающиеся проекты;
  2. Стагнирующие (не развивающиеся) проекты.

Рассмотрим каждую из этих четырёх групп более детально.

Проекты от профи

Как следует уже из краткого описания, приведённого выше, эти проекты были изначально написаны квалифицированными (чаще всего профессиональными) разработчиками, а позднее также поддерживались грамотными специалистами.

Если вы попали на такой проект, считайте, что вам повезло.

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

Главное только самому ничего в нём не испортить.

Однако «проекты от профи» сравнительная редкость потому, что:

  1. Хороших специалистов самих по себе мало;
  2. Стоят такие проекты, как и их поддержка на должном уровне как правило не дёшево.

Проекты не профессионального качества

Фактически подобные проекты являются диаметральной противоположностью первой группы.

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

Таких проектов, к сожалению, очень много (если не большинство). И собственно, когда словосочетание «legacy проекты» используют в уничижительной форме, то имеют в виду как раз проекты из данной группы.

К слову, к данной группе относятся не только проекты, написанные «на коленке». В неё также может со временем перейти проект, изначально написанный вполне профессионально, но который сопровождали недостаточно компетентные специалисты.

Развивающиеся проекты

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

В некоторых случаях даже не скажешь, что проекту на самом деле уже очень много лет. Настолько он современен.

Стагнирующие проекты

Это также диаметральная противоположность проектов, описанных нами только что.

Развитие подобных проектов в своё время (иногда даже сразу же после сдачи в эксплуатацию) фактически остановилось. Периодически они могут незначительно дорабатываться с целью добавления нового или изменения существующего функционала (задачи из разряда (утрированно) «добавить кнопку» или «поменять значок на кнопке») или устранения существенных ошибок. Но, в целом проект давно морально устарел.

Данное обстоятельство также накладывает сой отпечаток на перспективы его дальнейшего сопровождения.

Издержки и риски связанные с legacy проектами

Особенности legacy проектов порождают определённые издержки и риски при работе с ними.

Основные издержки это:

  1. Необходимость разбираться в работе больших объёмов исходного кода (зачастую совершенно незнакомого);
  2. Более высокие требования для «аккуратного» проектирования и реализации нового функционала (чтобы ничего не «сломать»);
  3. Необходимость более тщательного тестирования (в том числе регрессионного).

В свою очередь основные риски:

  1. Столкнуться с проектом непрофессионального качества или стагнирующим;
  2. Подводные камни;
  3. Стать «стрелочником».

На рисках следует остановиться более подробно.

Проект не профессионального качества или стагнирующий

Такие проекты не только не приносят интересного и полезного опыта. В первую очередь они увеличивают все возможные издержки.

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

Подводные камни

Нередко в процесс сопровождения legacy проекта вмешиваются неожиданные обстоятельства или технические препятствия о которых специалист по тем или иным причинам просто не мог знать. Это также увеличивает издержки проекта.

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

Стать «стрелочником»

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

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

Legacy проект для программиста

Многие, особенно опытные, программисты прекрасно понимают особенности legacy проектов и потому часто относятся к ним с осторожностью. Это вполне объяснимо. Ведь мало кому захочется взять на себя массу проблем и в итоге остаться крайним.

В целом же то очень многое на самом деле зависит от того насколько в конечном итоге «повезёт» с проектом.

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

Если же наоборот не повезло, то на нём вполне можно и деградировать в профессиональном отношении (о профессиональной деградации программистов была отдельная статья).

Можно ли обойтись без legacy проектов

На самом деле можно. Но, только если вы (или ваша компания) занимаетесь написанием программ на заказ и специализируетесь только на новых проектах.

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

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

В том, что проект существует давно и на нём даже сменилось не одно поколение специалистов нет ничего плохого. Каждый legacy проект приобретает те или иные особенности только вследствие того, каким он был изначально создан или во что его впоследствии превратили те люди, в руках которых он оказался.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *