Почему отделочные работы от разработок?

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

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

Есть ли что-нибудь еще, кроме угробления "старого кода" для простых смертных?

Уроки, извлеченные из содержания своего "мусора", имеют гораздо большую ценность? Разве исправление дефектов не намного эффективнее, если их предпринимают те, кто их начал?

Я скучаю по каким-либо реальным причинам, почему может быть выгодно иметь отдельную команду обслуживания?

7 ответов

Решение

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

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

Пример Thrashing в реальной жизни:

Вам был назначен 1500-часовой проект разработки, и вы также несете ответственность за обслуживание и поддержку ваших последних 3 приложений. Во время этого нового проекта вас в среднем прерывали 7 раз в неделю, чтобы поддержать эти 3 приложения. Каждый раз, когда вы начинаете работать над тремя другими приложениями, вы тратите 20 минут на то, чтобы сосредоточиться на проблеме. После устранения проблемы вы потратите 20 минут на то, чтобы вновь обдумать код, который вы в последний раз касались в своем новом приложении. Это общая стоимость 40 минут за перерыв или 280 минут в неделю. Это означает, что вы потеряли 2,67 часа производительности за неделю, просто переключившись на поддержку этих приложений.

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

Возьмите Микростанцию ​​Бентли, например. Это дизайнерское приложение для 3d (архитектура, дизайн завода, рельсы, дороги, мосты и т. Д.). Теперь предположим, что у нас есть v8, v9, v10 на рынке. Они имеют различные функции, и формат файла значительно изменился по сравнению с версиями. Но проекты настолько велики (или клиенты настолько важны), что вам приходится поддерживать клиентов v8 и v9, а также разрабатывать версии v10. Поэтому необходимо, чтобы в компании была команда поддержки (или время), выделенная для предыдущих версий. Кроме того, обычно эти группы называются группами настройки, если ваш продукт поддерживает настройку и вышеупомянутый сценарий.

Проблема более практичная, я думаю:

  • старый код был написан людьми, которых больше нет в компании или команде;
  • старый код был написан сторонними разработчиками;

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

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

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

Короче говоря, большую часть времени это делается по политическим / непрактичным причинам.

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

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

Я догадываюсь:

  • Делает новую разработку более предсказуемой, более простой в планировании: поскольку разработчики не отзываются о ней, чтобы исправить некоторые неизвестные заранее проблемы обслуживания

  • Возможность обучать новых разработчиков (например, меня)

Кроме того, код, который я поддерживал, не был "мусорным" - это было программное обеспечение telco, ранняя сеть с коммутацией пакетов, которая была развернута для таких клиентов, как Bell и т. Д. Она была хорошо спроектирована, хорошо написана, тестируема (наборы автоматизированных контрольные примеры), ремонтопригодные, множество файлов журналов, немного проектной документации...

... кажется, что подзаголовок к вашему OP: "Чувак, этот код воняет! Хотел бы я получить оригинального разработчика и потереть его носом: это научило бы его!"

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

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

[Я бы проанализировал и диагностировал проблему и написал бы исправление; и специалист по обеспечению качества добавил бы новый соответствующий тестовый набор в автоматизированный набор тестов.]

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

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

Другие вопросы по тегам