Как быть конструктивным и решать проблемы в неконструктивной среде? [закрыто]


Работа-среда Коллеги Работа

Сейчас я работаю над старым программным проектом. Он состоит из большого количества недокументированных классов. Нет единичных тестов, и у проекта есть огромный технический долг (классы с копией пасты, пропущенные возможности абстракции, 100 методов лайнера и 5000 объектов ботинка-вкладыша ...) . В команде есть еще два программиста, которые работают с проектом с самого начала. На нем работали другие разработчики, но все они ушли (по неизвестным причинам).

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

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

Мой вопрос в том, как я могу убедить управляющих / других разработчиков, что нам нужны усилия по очистке технического долга и написанию документации по функциям, чтобы новый разработчик проекта мог легко справиться? Учитывая вышеизложенную ситуацию, они на самом деле не доверяют мне, и у меня нет никаких вариантов, чтобы оправдать любые идеи, которые у меня есть, потому что у нас нет инструментов / инструментов управления метрикой / кодом, которые можно использовать для объективной оценки ситуации. С их точки зрения все, что есть в проекте, достаточно хорошее .

Anonymous
Единственное управление, которое у нас есть, - это технический директор, но он не программист, и я думаю, что, хотя он знает о ситуации, он не чувствует веса. У меня такое чувство, что другие не хотят, чтобы я настаивал на этом вопросе и / или пытался заставить меня выглядеть как человек, который проблематичен.

Adam V
На каком уровне вы находитесь по отношению к ним? Имеете ли вы право применять эдикт «сделайте это правильно»?

Anonymous
Я работаю над проектом как старший разработчик. Остальные 2 ребята также являются старшими, и у нас есть младший разработчик. Существуют и другие разработчики, но они не работают над этим проектом. В теории мы находимся на одном уровне с другими, но они действительно рука и перчатки друг с другом. Если я придумал идею, они часто говорят мне, что они знают лучше, потому что их знания в области домена эффективно налагают вето на мои идеи.

Adam V
Был ли КТО тот, кто вас привел?

Anonymous
"more than 100.000 classes" Каждый из них должен быть включен в черный список, чтобы они никогда больше не получали работу в ИТ.

Ответы


Amy Blankenship

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

Ты не одинок.

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

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

Ваша проблема не техническая, а политическая.

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

Чтобы решить эту проблему, вам придется взять на себя какое-то руководство. Это политически сложно, потому что вы новичок в команде.

Вам нужно завоевать доверие.

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

На самом деле слушайте все, что он говорит о будущих планах и ожиданиях программного обеспечения. Я думаю, вы обнаружите, что у вас есть открытия для «Вы хотите, чтобы я сделал X, но это противоречит существующей практике в команде, чтобы всегда делать Y. Какой приоритет?»

Будьте бдительны для мест, требования которых просто теряются, потому что все участвующие (включая ваш технический директор) видят, где находятся мины, и подсознательно обошли их. Это места, где вы можете шагнуть вперед и сказать: «Я думаю, что если мне понадобится две недели для рефакторинга этой подсистемы, мы не только можем сделать это требование, которое все говорят так сложно, но я думаю, что, возможно, я смогу исправить повторяющуюся проблему Z.» И именно так вы можете использовать свои собственные прочные подсистемы, такие как Adam V.

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

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

Изучите текущую систему

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

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

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

Уточнить ожидания

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

Некоторые примеры вопросов, которые я мог бы попробовать в ваших ботинках:

  • Существующая команда не использует Test Driven Development. Они специально просили кого-то нанять с этими навыками?
  • Какую временную шкалу вы думаете, я должен искать, чтобы попытаться реализовать эти новые практики?
  • Какую поддержку вы готовы или можете мне дать в этом изменении?

и т.п.

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

Этот процесс требует времени

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

TL; DR

Часто, может ли предложение быть успешным или неудачным, происходит не то, что вы говорите, а то, как вы это говорите. Я нахожу, что задавать много вопросов для меня. «Если мы примем такой подход, как это повлияет на нашу способность добавлять функцию A, которая, как мы знаем, подходит?» Это приводит людей к самому ответу и помогает вам избегать выглядеть высокомерным. Что еще более важно, если вы полностью не совершенны, вы будете ошибаться некоторое время. Задавая такие вопросы, вы попадаете в мясную область, не вставая на ноги, поэтому они должны защищаться, так что вы не завершаете позицию, которую вы отчаянно защищали там, где вы оказались неправы.

Я считаю, в частности, что фразы «Почему бы не работать, чтобы сделать B вместо C?» работает очень хорошо, потому что это ставит бремя на них, чтобы придумать обоснования, почему вы не можете что-то сделать. Для команды, которую вы описали, вероятно, это не их сильная сторона. Однако, даже если они могут полностью снять вашу идею, это потрясающе! Вы получили ценное понимание проблемы, и вы можете сделать другое предложение.

lambdapool
Существуют системы, которые не могут применять любой TDD, потому что его внутренняя архитектура технологий не позволяет этого.

Adam V

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

Исправьте одну область, чтобы быть отличной.

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

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

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

Нажмите для методологии с нулевыми дефектами.

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

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

(На самом деле, цель Joel's «Getting Things Done When You're Only Grunt» полна полезных советов в этой ситуации.)

Нажмите для других соответствующих правил.

Постоянно растущий охват кода? Нет нового кода без связанных модульных тестов? Весь код передает QA до его принятия? Найдите простые правила, которые помогут больше всего, но наиболее трудные в борьбе против (кто хочет сказать боссу «не имеет значения, что QA думает, что он работает неправильно»?), И нажимайте на них.

Оставьте (при необходимости).

Имейте в виду, что компания прошла это долго, не рассматривая это как проблему, несмотря на все симптомы (багги-код, разработчики и т. Д.). Вполне возможно, что независимо от того, насколько разумны ваши аргументы, они будут воспринимать вас как «не подходящие», и это может раскрасить их против вас. Поэтому учтите это - если вы действительно заинтересованы в том, чтобы оставаться и пытаться изменить ситуацию, возможно, начинайте с менее вызывающих возражение идей и проведите свой путь, чтобы «уволить людей, которые вызывают проблему»; если, с другой стороны, вы не заинтересованы в том, чтобы остаться, если они не очистят свое действие, вы можете быть грубыми и сказать им: «Этот код является гнойной кучей, и я не могу продолжать работать, если вы не делаете X, Y и Z, чтобы дать мне возможность очистить его », при том понимании, что ответ, вероятно, будет« хорошо, приятно работать с вами ».

Удачи!

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

Adam V
Возможно Вы правы. Если вы можете получить третью сторону, чтобы указать на ошибки и неэффективность (и быть послушными), вы, скорее всего, получите уверенность, когда их результаты совпадут с тем, о чем вы предупреждали. Однако, основываясь на записи OP, я не уверен, есть ли какой-либо QA, или есть ли у QA достаточно усилий, чтобы указать на проблемы или быть услышанными.

IDrinkandIKnowThings
Если вы удалите последний абзац, я бы проголосовал за этот ответ. Уход не решит проблему, а просто отвлечет ОП от проблемы, но создает новые проблемы.

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

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

Telastyn

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

Вы этого не сделаете.

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

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

На нем работали некоторые другие разработчики, но все они ушли

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

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

Carson63000
+1 для связывания «эффекта Мертвого моря» при обсуждении того, что звучит как один из лучших примеров упомянутого эффекта в любой точке мира.

Смотри также