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

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

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

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

Как я могу избежать наказания за унаследованный мной проект, в котором уже были ошибки, в то время как мне сказали работать над дополнительными функциями, а не исправлять ошибки?

РЕДАКТИРОВАТЬ: я чувствую, что это отличается от вопроса, отмеченного как дубликат, поскольку я совершенно новый разработчик с 0-летним опытом. Я чувствую, что это важный аспект моей ситуации.


Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
Ах, отравленная чаша. Я думаю, что у меня был этот проект на некоторое время.
@Simba Обязательная ссылка на Скотти .
Как бы хорошо (или плохо) это ни шло, будьте благодарны, что вы усвоили урок в начале своей карьеры, а не позже. Это нередкая ситуация, и я вижу здесь много хороших советов: если это произойдет снова, вы будете готовы справляться с этим тактично и профессионально с самого начала отношений.

Ответы (12)

Теперь вы знаете эту программу лучше, чем кто-либо.

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

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

Очевидно, взгляните на то, что вы демонстрируете, и узнайте, что работает, а что нет. Также посмотрите любую документацию/поговорите с людьми и поймите, что должно работать и как. Демонстрация знаний и демонстрация уверенности в системе вызовут доверие к вам и тому, что вы говорите. Это поможет вам вернуть все на рельсы.

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

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

Я думаю, что ваш ответ лучше всего помогает мне в этой ситуации, но я немного не решаюсь использовать строку «старый разработчик оставил это ...», потому что может показаться, что я пытаюсь обвинить кого-то другого.
@Prodnegel - Почему? Совершенно естественно, что персонал уходит. Вы также можете назвать это тем, что его «сняли с проекта» или «теперь меня назначили на этот проект». Не нужно обвинять, это просто факты.
Речь идет не столько о передаче вины, сколько о передаче ответственности. Я думаю, что лучше сказать «Мне было поручено добавить x новых функций, которые я вам покажу здесь». С другой стороны, это выглядит так: «Мне дали это, я нашел это и решил не исправлять их, потому что это не моя проблема». Проблема здесь в том, что для заказчика, если он является разработчиком проекта, то это в какой-то степени его проблема (на самом деле проблема менеджера, но в данном случае он представитель).
Кроме того, было бы неплохо записать шаги для демонстрации и заранее просмотреть версию программы, которую нужно продемонстрировать, чтобы вы могли записать все, что может пойти не так. Затем вы можете сказать «это должно...» и, прежде чем делать это в демоверсии, сказать, что может пойти не так, и что это должно быть исправлено в вашей очереди «сделать». Таким образом, вы не останетесь с мыслями "ммм... ммм... этого не должно было случиться".
@AndrewMorton Это слишком хорошо, чтобы оставить комментарий. Когда вы делаете демо, подготовьте демо . Не просто планируйте это, репетируйте, исправляйте или избегайте ошибок, которые вы обнаружите таким образом, и сделайте представление. Подумайте о том, что клиент, скорее всего, спросит или захочет увидеть, и придумайте хороший ответ. Обсудите все с вашим менеджером, чтобы вы оба четко понимали, что именно вы предлагаете, и чего вам/ему следует опасаться. Вырезать то, что работает недостаточно хорошо — отсутствующая функция («WIP») часто лучше, чем ужасно сломанная функция.
@Pete Признаю, что это нормально для внутреннего проекта, но совершенно не подходит для клиентских презентаций. Но опять же, в большинстве случаев эти презентации все равно не должны запускаться разработчиком.
@Prodnegel - это проблемы, которые будут действительно очевидными и неизбежными, вместо того, чтобы говорить, что «старый разработчик оставил это так», имейте список «известных проблем», о которых вы знаете, и они нуждаются в исправлении, и вам дали ваш менеджер имеет для вас меньший приоритет, чем добавление новых функций.
@Luaan Пожалуйста, не стесняйтесь использовать мой комментарий в качестве материала для редактирования этого ответа, если Пит не сделает этого своевременно.
Следует отметить, что демонстрация чего-то глючного далеко не редкость. iPhone, продемонстрированный Стивом Джобсом, просто смог показать набор демонстраций, которые он сделал во время презентации; отклонение от «золотого пути» могло привести к его краху, AT&T привезла переносную вышку сотовой связи, чтобы обеспечить их обслуживание, и на сцене было несколько устройств, чтобы он мог переключиться, если одно из них умрет — nytimes.com/2013/10/ 06/журнал/…

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

«Здравствуйте, босс, в дополнение к нашему разговору, не могли бы вы уточнить, что мне следует сделать в первую очередь, пожалуйста. В X есть куча ошибок, или мне просто нужно использовать новые вещи. Также мне пришлось заняться цифровым кунг-фу, чтобы обойти ошибку в W, это нормально?»

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

Мой босс всегда приходил ко мне лично, и именно здесь происходило большинство этих разговоров. Я записывал его ответы, поэтому у меня не было большого количества бумажных следов, в которых он говорил мне: «Забудь об этой ошибке, сделай это вместо этого». Я беспокоюсь, что в конце концов они придут ко мне и спросят, почему так много ошибок, и я не думаю, что фраза «менеджер сказал мне» сработает?
Почему бы и нет? Рабочие не уходят сами по себе (надеюсь). Менеджеры несут ответственность за то, чтобы в основном управлять проектами с точки зрения его команды. Я бы скорее сам уволил менеджеров, если бы все развалилось.
Но даже электронные письма с подробным описанием проблем, на которые НЕ ответили, по-прежнему являются убедительным доказательством.
Я не думаю, что у меня есть какие-либо электронные письма с указанием ошибок, поскольку они достаточно малы, чтобы не мешать БОЛЬШИНСТВУ программы. Я просто всегда говорил своему боссу, что «я не думаю, что это очень стабильный код», и указывал на мелкие вещи, которые не работают на 100%.
@Prodnegel ведет «быстрые разговоры» — это то, как много недобросовестных людей пытаются делать что-то незаметно. С этого момента в вашей карьере и каждый раз, когда это происходит в последний раз , отправьте последующее электронное письмо, начинающееся с «Согласно нашему разговору», и подробно опишите, что вам было сказано. Это единственный способ прикрыть свой зад, когда кто-то настаивает на том, чтобы поговорить с вами «офлайн» .
Отправка краткого изложения беседы по электронной почте не только является хорошим способом для CYA, но и ценной проверкой того, что обе стороны одинаково понимают проблемы.
Я бы, наверное, воздержался от использования таких выражений, как «цифровое кунг-фу» , особенно с менеджерами, не являющимися техническими специалистами. Если реализованное решение должно было быть некачественным, чтобы уложиться в ограничения по времени, вы должны четко понимать, какие компромиссы были достигнуты, иначе они не будут знать, на что они соглашаются, и не будет ожидания, что они должны понять, что «кунг fu" означает, что в кодовой базе есть скрытые недостатки, которые могут вызвать осложнения в будущем.
Это хороший ответ, но «цифровое кунг-фу» звучит гораздо более гламурно, чем есть на самом деле. На самом деле это необходимость нагромождать дерьмо на дерьмо. Если фундамент шаткий, иногда приходится прибегать к всевозможным ненужным инженерным хитростям, чтобы сделать его едва стабильным.
О, черт возьми, я думал, что «цифровое кунг-фу» - это законный технический термин, я использую его уже десять лет :-)
Если вы используете систему тикетов, заранее создавайте тикеты технического долга с высокими оценками для всего, с чем вы видите проблему и знаете, что для ее устранения потребуется время. Jira и я думаю, что у Trello есть контрольные журналы, и таким образом вы можете отслеживать ошибки и то, что вам нужно делать, а также иметь цифровую запись ваших бронирований.
Я собираюсь украсть «цифровое кунг-фу».

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

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

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

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

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

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

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

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

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

Но я бы посоветовал дать вашей компании шанс. Делайте то, о чем вас просят, как можно лучше и примите тот факт, что компания является совместным делом.

«Пока программное обеспечение не решит проблему для кого-то таким образом, что они будут готовы за это платить, программное обеспечение бесполезно». Спасибо, мне нужно это услышать, и это имеет большой смысл.
Это очень разумный ответ, +1. Всегда делайте свою работу как можно лучше. Сделайте свою компанию снова великой.
Переписывать с нуля обычно плохая идея. joelonsoftware.com/articles/fog0000000348.html . При этом каждый раз, когда существующая ошибка мешает вам написать новую функцию, пришло время сделать локальную очистку. Просто локально, чтобы оставаться в фокусе.
@ gazzz0x2z статье, на которую вы ссылаетесь, 15 лет, и она посвящена почти исключительно программному обеспечению для термоусадочной пленки. Я не говорю, что вы не правы, но будьте осторожны с обобщениями.
@JaredSmith Это старо, но все эти аргументы по-прежнему актуальны. Они не являются эксклюзивными для упаковки в термоусадочную пленку - переписывание требует огромных затрат и сводит на нет все ваши преимущества. Если вам нужно начать свое консультационное ПО с нуля, где вы получите преимущество перед конкурентами?
@JaredSmith: я сказал «обычно», потому что всегда могут быть контрпримеры. во внутреннем программном обеспечении я видел много переписываний, которые заканчивались плохо (плохо, как 100 миллионов евро усилий в мусорное ведро). Я не говорю «никогда не переписывать», я говорю «переписывать осторожно, очень маленькими шагами».
@Luaan, мы говорим о программном обеспечении в контексте вопроса ОП, которое , по- видимому, никто ни для чего не использует . Нет проектной документации, нет спецификации, нет набора тестов, которые показывают желаемую функциональность. Он содержит ошибки, очевидные для младшего разработчика. Попытка спасти его вполне может оказаться чистой ошибкой невозвратных затрат. Спольски говорил о переписывании работающего программного обеспечения, которым пользуется множество людей. Вы абсолютно правы в отношении аргументов, которые он использует в этом случае.
@JaredSmith Конечно, это немного по-другому балансирует. Но вы до сих пор не представляете, сколько пограничных случаев и тонких проблем уже устранил первоначальный автор, возможно, во время общения с заказчиком. Тот факт, что спецификации нет, является бременем как для попыток ее переписать, так и для сохранения ее жизни. Вполне может быть, что полное переписывание окажется дешевле, чем попытка исправить это — также может случиться так, что при наличии выбора менеджер просто остановит проект. Но, в конечном счете, это решение руководства, и можно поспорить, что Проднегель не имеет представления о более широком плане.
@Luaan очень верно. Если это действительно невозвратные затраты, то ваше предположение почти наверняка верно, что отказ от проекта — лучший вариант для бизнеса.

Такого рода кодовая база встречается на удивление часто, и многие из нас работали над подобными. (Было замечено, что кодовая база является отражением организационной структуры, создавшей ее, или даже движущейся хроникой организации). Вот прагматичный подход, который я изучил:

  • Менеджмент не знает кодовой базы (на самом деле это и сила, и слабость), совершенно не заботятся об ошибках и только заинтересованы в добавлении новых функций. Так что гораздо проще продать их, если вы работаете над последним (приносящим доход), а не над первым (поглотителем затрат); им проще продать это как внутри компании, так и заказчику.
  • Поэтому, когда проект начинается, очень быстро проведите сортировку самых серьезных ошибок и либо добавьте неудачные тестовые случаи или обвязки, либо, как минимум, задокументируйте сценарии в системе отслеживания ошибок ( «Когда я делаю X на Y, это не работает». с результатом/ошибкой Z" ). Пересматривайте это время от времени, когда позволяет время, или когда очевидное наличие или серьезность ошибок в отношении разрабатываемых функций существенно меняется. Очень сложно быстро сортировать вещи, которые должны быть исправлены, но время не позволяет. Но пишите отчеты об ошибках и планируйте исправления с расчетом на то, что какое-то неизвестное время и бюджет могут появиться волшебным образом.
  • Затем, когда вы расширяете область добавления функций, любой связанный рефакторинг и исправления ошибок становятся зависимостью функции, включаются в работу, оценки времени, тестовые сценарии. Как вы определяете и сообщаете об этой работе, зависит от вас. Только ты знаешь, как их обойти. Пока в резюме говорится «Реализация функции X», им все равно.
  • Подойдите к демонстрациям, проведя внутренние репетиции за несколько недель до этого, как возможность показать им: «Мы реализовали код для X, но в нем есть ошибки A, B, C, которые необходимо исправить». На самом деле, запланируйте внутреннюю демонстрацию для своего руководства, независимо от того, просит ли ее клиент. Постепенно приучите их учитывать в своих оценках x% времени на исправление ошибок и тестирование или, наоборот, делать первые демо за несколько недель до того, как вы ожидаете работающий код.
  • «Работайте в их мире, а не в вашем»
Хороший ответ, и мне нравится последний пункт. В комментариях ОП сказал, что они просто «маленькие винтики». Но это верно только в том случае, если вы не пытаетесь больше влиять на проект, кроме написания кода. Работайте со своим руководством, давайте им идеи и новые решения, как подходить к проблемам с вашей точки зрения. Они принимают решения, но вы имеете влияние, предлагая решения. Во-первых, попросите их, как следует из этих ответов, провести репетиции. Попробуйте договориться о времени для этого, по крайней мере, за неделю до демонстрации клиента. Затем попытайтесь сделать это обычной практикой для всех демонстраций, тогда вы можете последовать совету @TheWanderingDevManager...
и постарайтесь делать демонстрации с клиентом чаще. И так далее. Вы услышите много причин не реализовывать ваше решение — это нормально. Хорошее руководство имеет больше информации о доступных ресурсах, и иногда просто невозможно использовать отличные решения в рабочем процессе проекта. Но не останавливайтесь! Какие-то решения будут уместны и будут реализованы. И вот как профессионал влияет на проект и компанию, не занимая руководящую должность. И именно так вы можете перестать быть маленькой шестеренкой и стать серьезным профессионалом.
@CodingFeles Да, это зависит от того, как высоко поднимается некомпетентность в цепочке управления. В конечном счете, ОП должен решить, насколько все это ограничивает, сколько культурных изменений они могут произвести и как долго они хотят пытаться, прежде чем уйти к чему-то лучшему. Наверное, не такая уж большая сумма.
Это блестящий ответ! Вместо того, чтобы просто надеяться, что ОП не обвинят, вы фактически описываете, как убедиться, что этого не произойдет.
@JørgenFogh: Черт возьми, нет! Плохие управленческие цепи всегда будут винить вас. Я лишь предложил несколько советов о том, как предотвратить или свести к минимуму это. Нет ничего, что могло бы помешать им загрузить новые функции, пропустить демонстрации, отказаться признавать серьезные ошибки и т. д. Я всего лишь предлагал, как использовать их невежество, чтобы попытаться выкроить небольшие окна времени, чтобы исправить то, что очень нужно исправить.
@smci: Полностью согласен, что это не панацея. Это намного лучше, чем ничего не делать и надеяться на лучшее.
И эти ошибки могут внезапно стать приоритетными, когда практическая демонстрация внутреннего управления столкнется с одной или несколькими из них.
Исправление ошибки может занять меньше времени, чем создание большого обходного пути при добавлении новой функции. Рассмотрите эту часть добавления новой функции, и это также преимущество, что ошибка будет исправлена.
Это соответствует моему опыту: лучше всего исправлять ошибки, рефакторить плохой дизайн и вносить улучшения по ходу дела . Таким образом, вы уже понимаете эту область кода так же хорошо, как собираетесь, вам не потребуется много дополнительного тестирования, вы избежите рисков, связанных с серьезными изменениями, и вам не нужно будет оправдывать то, что может показаться неправильным. непродуктивная работа. Знайте, где вы хотите оказаться, и постоянно делайте небольшие шаги в этом направлении.

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

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

Прошли месяцы и скоро пора показывать программу

Шаг 2: убедитесь, что у вас есть регулярные демонстрации/предварительные просмотры с клиентом, как для того, чтобы установить ожидания, так и для того, чтобы убедиться, что вы делаете правильные вещи/приоритеты.

Поскольку рефакторинг есть и никогда не был вариантом из-за нехватки времени и пожеланий менеджера

Шаг 3: если у вас есть подобное обсуждение, задокументируйте его в электронном письме для подтверждения. Таким образом, вы убедитесь, что грязная палка указывает в правильном направлении, когда они начинают обвинять.

так как мне пришлось делать некоторые странные вещи, чтобы обойти ошибки

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

Как я могу избежать наказания за унаследованный мной проект, в котором уже были ошибки, в то время как мне сказали работать над дополнительными функциями, а не исправлять ошибки?

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

« Никогда не прячьте ошибки, выявляйте их, добавляйте в систему отслеживания ошибок и получайте суждение об их исправлении (см. выше). » Это золото. Если вы сообщили об ошибке, но вам не было указано исправить ее (или было указано не исправлять ее), то ошибка все равно будет. (Если вы сталкиваетесь с сопротивлением использованию системы отслеживания ошибок, укажите, что нет другого способа отслеживать ошибки. Вы не хотите их забывать.) Должно быть много электронных писем о том, как расставить приоритеты для исправления ошибок. над функциями.
Я считаю, что некоторые советы на самом деле не применимы к совершенно новому разработчику или ко мне в моей ситуации. # 1) Когда я спросил своего менеджера о тестировании/исправлении ошибок, он сказал мне не делать этого, но ваш первый ответ — писать модульные тесты. Я согласен, что это то, что нужно сделать, но я не думаю, что можно идти против воли моего менеджера. #2) Я не могу гарантировать, что клиент получит регулярные демонстрации, я маленький винтик в системе, и в этой ситуации у меня нет никакой власти. Я не думаю, что любому новому разработчику вне школы будет позволено планировать демонстрации
# 5) Он уже пошел на юг с самого начала! Я сказал своему менеджеру, что хочу начать с рефакторинга/исправления ошибок, но он сказал мне не делать этого. Не знаю, что еще я мог сделать в моей ситуации.
В основном это хороший совет, однако «Все, к чему вы прикасаетесь, вы сначала пишете модульные тесты» : настаивание на полном TDD, как правило, не будет работать/получать поддержку от плохого управления. Вы должны сортировать наихудшие случаи и иметь дело с ними в качестве приоритета - см. Мой ответ для более полного. Это расстраивает.
@Prodnegel «Я сказал своему менеджеру, что хочу начать с рефакторинга / исправления ошибок, но он сказал мне не делать этого» - и если вы только что закончили колледж и ваш менеджер достаточно компетентен, это была именно правильная инструкция. В противном случае через 5 лет работы у вас будет красиво структурированная кодовая база, которая еще не отвечает ни одному из новых требований пользователя — и когда вы приступите к их реализации, вам, вероятно, придется все рефакторить заново! Разработка программного обеспечения в реальном мире не похожа на работу над проектами в колледже!
@Prodnegel «Я не думаю, что любому новому разработчику вне школы будет разрешено планировать демонстрации» - общая черта всех хороших демонстраций программного обеспечения заключается в том, что «вы демонстрируете только то, что работает». Все в реальном мире знают, что в программах есть ошибки, но они не хотят тратить свое время на то, чтобы им показывали ошибки, которые их даже не волнуют.
@smci - кто сказал тдд? вы пишете тесты, которые вам нужны, чтобы показать, что он все еще работает после того, как вы его изменили.
@TheWanderingDevManager часто пишет полные модульные тесты до, во время или после кодирования, что не разрешено расписанием. (Действительно, часто полные модульные тесты являются излишними в зависимости от навыков разработчика и от того, используются ли функции с помощью интеграционных тестов или полуручного тестирования. Это зависит от многих вещей.)
@Prodnegel Я бы сказал то же самое, что и твой менеджер. Вы приходите на новый проект, понятия не имеете, насколько он ужасен, и хотите начать его переписывать ? Возиться с такими вещами, не понимая, как и почему они работают? Ваши изменения, скорее всего, снизят качество продукта, превратившись в серию "О, я не ожидал, что эта часть кода будет зависеть от этого..." Напрасная работа, бесполезная для клиента, и вы я просто выгляжу некомпетентным всезнайкой со степенью. Сообщайте об ошибках. Но их исправление — это решение менеджера, а не вас.
@smci - «часто писать полные модульные тесты, будь то до, во время или после кодирования, не разрешено расписанием», но тратить в 5 раз больше времени на переработку / исправление ошибок - обычная история. Я управлял командами в общей кодовой базе, где одновременно работали 150-200 разработчиков, всегда есть время для тестов, вы включаете его в любую оценку. Ваше собственное время, которое вы получаете (а не пожаротушение), более чем того стоит, я бы не стал нанимать разработчиков, которые пошли бы на компромисс в этом вопросе.
@TheWanderingDevManager: это суждение. 150 разработчиков — это совсем другая история, чем команда из 1-2 разработчиков.
@smci - Нет (я также делал это в компании, где я был сотрудником № 5). Если я дам вам немного кода, который, как я сказал, делает X, и я хочу, чтобы вы просто добавили функцию Y, как вы удостоверитесь, что а) он действительно делает то, что я говорю, и б) вы не нарушили его, добавив Y? Для этого вам нужны тесты (все еще не говоря о TDD). Вы все равно будете писать тесты как часть кодирования (как Джастин Трюдо сказал о чем-то несвязанном, «потому что сейчас 2016 год»), так что дополнительные пару часов, чтобы проверить свое понимание, написав несколько тестов, — вот как это работает. Если вы этого не сделаете, я могу порекомендовать несколько хороших книг.

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

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

Это не означает, что вы не можете проводить рефакторинг по ходу дела.

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

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

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

«работает и служит своей цели» — звучит так, будто этот проблемный проект этого не делает.

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

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

Берегите себя в этой ситуации.

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

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

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

Если это произойдет в будущем, то, что вы делаете, это: -

  • Быстро оцените то, что вы унаследовали.
  • Сообщите об этом своему руководителю по электронной почте и порекомендуйте подходящие действия по исправлению вместо исправления ошибок в течение нескольких недель, прежде чем продолжить.
  • Отложите (распечатайте и храните в файле на работе И дома) любой отказ/настойчивость в отношении новых функций, чтобы прикрыть себя позже.
  • Мягко отклоняйте любой запрос на новые функции, говоря, что вы боитесь, что можете дестабилизировать хрупкую кодовую базу. Отправьте окончательное решение от вашего менеджера, как указано выше.
  • Напишите модульные тесты для всего , что вы добавляете.
  • Подкрепляйте каждую оценку, которую вы даете для новой функции , кроме добавления модульных тестов (Как кто-то может противоречить вашей оценке, если он не знает кода?).
    Затем, используя свое «лишнее» время:
  • Добавьте больше модульных тестов для областей с наибольшим количеством ошибок (как предлагали другие люди).
  • Исправьте ломающие тесты.
  • Рефакторинг старого кода.

Ваша ситуация будет улучшаться с каждой новой функцией.

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

Однако: 1. Вы понятия не имеете, является ли кодовая база хорошей/плохой/типичной. У вас нет предшествующего уровня техники для сравнения. 2. Никто не проверяет вашу работу, а это значит, что вы не сможете узнать, улучшаете ли вы кодовую базу, даже если вы занимаетесь рефакторингом... опять же, у вас нет опыта. 3. Никто больше не смотрит кодовую базу, так что вы можете исправлять ошибки и проводить рефакторинг столько, сколько захотите, поскольку ваш менеджер не заметит разницы.

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

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

Было сказано многое, с чем я согласен, но я думаю, что есть еще одна вещь, которую следует упомянуть: это потрясающая возможность для вас.

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

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

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

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

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

По моему опыту, в подобных ситуациях менеджер часто так же счастлив, как и разработчик, обвиняя парня, который покинул компанию!

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

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

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

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