Как остановить сотрудника от удержания компании в заложниках?
Я работаю в команде, которая пишет программное обеспечение для содействия одной из ключевых бизнес-единиц компании. Я присоединился к команде несколько месяцев назад и обнаружил, что в моей команде наблюдается высокий оборот благодаря одному человеку. Этот человек (назовем его господин А) проработал в компании 7 лет, с ним очень сложно работать, и он неоднократно принимал неверные решения специально для того, чтобы поддерживать программный продукт нестабильным, сложным в обслуживании и устранении неполадок. Таким образом, когда возникает проблема, только он может ее решить.
Он ушел из компании несколько лет назад, потому что компания не позволяла ему работать из дома, но как только он ушел, компании пришлось нанять его обратно (и позволить ему работать на 100% из дома), потому что у программного обеспечения были проблемы, и никто не знал, как это исправить.
Мой менеджер знает это, но он говорит, что ничего не может поделать с г-ном A.
Что я могу сделать, чтобы исправить эту ситуацию? Я хочу сделать программное обеспечение современным, поддерживаемым и стабильным.
FYI, программное обеспечение следит за событиями, делает некоторую обработку на них, а затем принимает соответствующие меры. Г-н А имеет:
- Специально держится подальше от современных фреймворков разработки ПО;
- Написано ядро бизнес-логики на языках, которые не могут быть протестированы;
- Переработаны программные компоненты в 30 модулей, чтобы добавить сложность и вопросы сертификации версий, и;
Разработано не масштабируемым образом, гарантирующим отсутствие возможностей HA (высокой доступности).
Обновление:
Относительно Нестабильного кода, бизнес-логика переносится из Java в классные скрипты, встроенные в XML. Модульные тесты Java-кода отбрасываются.
Относительно модульности/сложности, каждый модуль получает свой собственный git repo и имеет свою версию. Теперь только г-н А знает, какие версии совместимы вместе. Вы не можете выпустить версию 2.0 и развернуть все модули 2.0. Вы должны выпустить модуль A 2.0, который будет работать с модулем B 1.0-2.0 и модулем C 1.0-1.5. Для меня это плохой дизайн, все должно быть версировано под одним repo, как Spring framework (Spring 5.0 означает Spring-Core-5.0, Spring-Context-5.0, Spring-Web-5.0, Spring-Security-5.0 и т.д.).
Manager говорит, что он ничего не может с этим поделать, потому что мистера Э сначала отпустили, но потом, когда всплыли проблемы, ему пришлось перезвонить, чтобы исправить это. Поэтому продукт не может обслуживаться без него.
я вижу в этом свою проблему, так как я не хочу бросать менеджера, так как он был очень добр ко мне. И мой первый инстинкт, чтобы решить проблему, а не отказаться от него, хотя я вижу, как отказаться от этого было бы действительно легко, и часть меня искушает сделать это.
Другие покинули команду из-за него, потому что за обедом он то, что все жалуются на него. Всякий раз, когда происходит встреча с господином А, люди выходят из нее, качая головой (в течение нескольких часов).
2-е Обновление:
HA - это аббревиатура от HighAvailability. В Архитектуре ПО это означает разработку вашего программного обеспечения таким образом, что его можно размещать/распространять в производственной среде в избыточном режиме, так что если один экземпляр падает, то другой(ие) может принять нагрузку, приводящую к нулевому времени простоя. Конечный пользователь даже не будет знать, что что-то пошло не так.
Относительно: Это похоже на обычную большую кодовую базу. Не думаю, что это из-за большой кодовой базы, так как продукт не настолько богат функциональностью. Это бэкэндовая система, которая сжимает данные. Другие компании имеют подобные продукты для удовлетворения своих бизнес-потребностей, они могут сделать это, используя современные HA/Scalable опции, поэтому я не понимаю, зачем этой команде делать это на Java 6 без HA/Scalability.
3-е обновление:
Относительно: “Работают ли последние версии всех модулей вместе?”: Не обязательно. Он откатывал некоторые модули в prod, если была обнаружена ошибка, но откат привел к большему количеству ошибок, так как некоторые версии модулей не совместимы. Всего этого можно было бы избежать, если бы все модули были версионированы и выпущены вместе, потому что тогда весь продукт был бы протестирован и в целом гарантировал бы определенную функциональность. В других компаниях/проектах, где я работал, так они могли с легкостью разрабатывать и развертывать гораздо более сложные проекты.
@pipe: Я не свеженький. Я работал в разных компаниях и на больших проектах в течение последних 10 с лишним лет, и все, что я вижу в предложении господина А, идет вразрез с общепринятыми нормами и здравым смыслом. 30 модулей (в отдельных репозиториях) - это то, как он изначально создавал дерево исходников. Умный разработчик, проработавший в команде 1 год, увидел проблемы совместимости и подтолкнул к объединению всего в один репо, создав многомодульный проект maven. Этот разработчик устал от природы г-на А, поэтому он нашел работу в одной из 5 лучших IT-компаний. Я не буду называть компанию, чтобы сохранить анонимность, но под 5-ю лучшими ИТ-компаниями я имею в виду Microsoft, Google, Apple, Facebook и Amazon. Итак, это застройщик не был тупым и некомпетентным. У него было 8 лет или опыт. Мистер А вернул это изменение в прежнее русло, 30 модулей в отдельных репозиториях. Так что эти 30 модулей не были добавлены, чтобы справиться со сложностью большой кодовой базы. Они были введены, чтобы гарантировать наличие проблем с совместимостью в prod. Ненужная сложность.
Больше о “Почему это ваша проблема?”: Когда я разговариваю с разработчиками, которые работают в Microsoft, Google, Amazon, Facebook, Apple (или у них есть друзья, которые работают в компании), мне говорят, что часто встречаются люди, с которыми сложно работать. Я рассматриваю эту ситуацию как вызов, с которым я буду неоднократно сталкиваться везде, где бы я ни работал, независимо от того, насколько крута компания. Поэтому мне нужно знать, как правильно с этим справляться, чтобы продолжать расти в своей области.
Цель (чтобы этот вопрос оставался актуальным):
Я задаю этот вопрос, чтобы знать, как лучше всего справляться с ситуациями, подобными описанной выше, чтобы достичь целей, описанных ниже. Я считаю, что трудных коллег невозможно избежать, поэтому, основываясь на опыте других, возможно, мы все сможем чему-то научиться.
Улучшить стабильность продукта, минимизируя спагетти-код и ненужную сложность, по просьбе руководства.
Сделать это HA по просьбе руководства.
Использовать современные фреймворки и спецификацию языка (Java 6 vs Java 8), чтобы новых разработчиков было легко найти на рынке, и они могли работать быстрее.
Искоренить зависимость от одного человека.