2018-04-26 08:23:44 +0000 2018-04-26 08:23:44 +0000
185
185

Как поговорить с руководством о "гениальном" коде?

EDIT:

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

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

TL;DR

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

_Как я могу общаться с руководством, не смущая их, не выставляя меня ленивым или глупым, что ценный продукт находится в плачевном состоянии? _

  • Пояснение: этот вопрос против технического долга

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

Возможно, еще одна причина, по которой дело не совсем в техническом долге, заключается в том, что разница между кодом ‘genius’ и техническим долгом заключается в том, что менеджмент сообщает, что я не должен изменять код ‘genius’, и что код ‘genius’ не является техническим долгом: это секретная черная магия. Хотел бы я, чтобы менеджмент думал об этом как о техническом долге. Вместо этого они не._ Менеджмент не заботится о времени, стоимости или деньгах напрямую – хотя это некоторая забота.

  • Детали

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

К сожалению, это не так. Короткий список проблем в гениальном коде, с которыми я столкнулся в ~1.5Гб кодовой базе…

  • Во всей кодовой базе одни и те же функции, одни и те же имена переменных одного и того же диапазона (в языке, который этого не поддерживает).
  • Функции определены, но никогда не вызываются.
  • Использование и инициализация переменных не по назначению.
  • Несовместимые версии используемых библиотек.
  • Жестко зашифрованные URI и IP-адреса без документации о том, что они делают.
  • Случайно запрошенные API-маршруты, которые ничего не возвращают или тарабарщина; whichichich then are not used.
  • Hard-coded, unencrypted passwords and private ssh keys.

Я должен добавить, что когда я впервые начал работать над этим, _it даже не компилировался. _ А когда я его скомпилировал, он не сработал во время исполнения.

Это кошмар.

Проблема в том, что руководство получило заверения, от кого оно унаследовано, и от предыдущих “gung-ho” разработчиков, что оно “работает”, поэтому вложило в него значительные средства… И теперь деньги перешли ко мне. И они хотят, чтобы он был запущен в производство примерно через 2 месяца.

Когда я предполагаю, что предыдущие разработчики, возможно, не были полностью честны или понимали продукт полностью, менеджмент посылает смешанные сигналы о том, что “просто сделай это”, и “почему это еще не сделано” … и “мы на самом деле не уверены, что это когда-либо работало” до “это работало, когда вы получили его”, и “мы никогда не видели, чтобы это работало” до “это уже в производстве”. “

[EDIT: вставил большую часть следующего абзаца в раздел TL;DR.]

Руководство также предположило, что, возможно, это настолько сложно, что я не могу понять этого, и поместил ошибки по дизайну;**что оригинальный разработчик настолько мета, что то, что выглядит как ошибки - это ac

Ответы (1)

0
0
0
2018-04-27 17:55:09 +0000

Ваш план высокого уровня должен быть следующим:

  1. Архитектор путь вперед. (*)
  2. Оцените, сколько времени понадобится для реализации вашего “пути вперед”.
  3. Встретиться с заинтересованными сторонами в бизнесе и сообщить следующее:

  4. Что вы не можете скомпилировать/прогнать текущий код (если это все еще так).

  5. Что вам понадобится ‘X’ дней/недель, чтобы восстановить кодовую базу в компилируемое/создаваемое/рабочее состояние.

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

  7. Что вам понадобится ‘X’ месяцев, чтобы реализовать свой путь вперед. Затем объясните свой путь вперед.(**)

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

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

  1. Создать автоматические юнит-тесты.

  2. Юнит-тесты покажут, что вы понимаете код.

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

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

  5. Запросы “тяни” социализируют ваше понимание кодовой базы.

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

  7. Постарайтесь не потерять спокойствие. Другие разработчики почувствуют ваше разочарование и могут сами разочароваться.

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

Похожие вопросы

21
9
16
15
2