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

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

Я очень внимательно отношусь к деталям и очень внимательно отношусь к стандартам, чистому коду и архитектуре в целом.

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

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

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

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

«У меня нет полномочий с точки зрения иерархии, чтобы «исправить» коллегу». Я не понимаю. Зачем нужен авторитет в иерархии, чтобы поправить коллегу?
Совет: не говорите ему, что он создал большую ошибку — скажите ему, что он создал ошибку, покажите, что она делает, и позвольте ему применить к ней свое собственное прилагательное. Первое, что важно, это исправить. После этого спросите, должна ли команда в целом лучше тестировать, прежде чем вносить изменения...
Спасибо вам обоим; на самом деле это проявление уважения ко мне при передаче сообщения. Иерархия, или авторитет, помогает навязывать сообщение. Но и без этого, я думаю, можно обойтись. Я искал коммуникативные подсказки для этого. Мне нравится предложение показать, это более тонко.
этот вопрос выглядит жутко, как будто я его написал...
Как вы ожидаете, менеджер поймет, что качество кода важно, если вы скрываете от него ошибки?
По крайней мере, лично я предпочел бы услышать это сразу, если у меня возникла большая проблема в коммите, прежде чем она вызовет большие проблемы. Поскольку «я» сделал код, я, скорее всего, тоже буду знать, как его быстро исправить. Разве у вас нет обзоров кода, где это можно было бы отметить, прежде чем он будет объединен в постановку/производство?
«Меня могут считать святым парнем, что не помогает». - Я, конечно, так тебя воспринимаю. Этот вопрос звучит очень агрессивно и претенциозно. Если это не было задумано таким образом, вы можете поработать над своими коммуникативными навыками. Если у вас будет такая репутация, ваши коллеги, скорее всего, начнут игнорировать вас каждый раз, когда вы предложите исправить.
@amphibient тоже самое, обычно я не смотрю, кто ОП, на этот раз мне пришлось это сделать...

Ответы (7)

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

Есть несколько путей потенциального снижения:

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

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

Я не могу поверить, что № 1 - серьезное предложение. Остальное разумно. Отпиши мне, когда исправишь ответ, и я удалю свой минус :)
@LightnessRacesinOrbit В этом есть элемент серьезности. Если коллега плохо реагирует на то, что ему говорят, что есть ошибки (из-за назойливых комментариев), а руководству все равно, иногда должны произойти вещи, которые заставят руководство побеспокоиться. Конечно, в идеальном мире он мог бы сделать пункт 2, попытаться ввести пункт 3, и это было бы так, но является ли работа ОП указывать (или скрывать) ошибки, допущенные старшим коллегой? Похоже, это происходит часто, и просто сказать не делать x или y еще не сработало.
Намеренный саботаж продукта из-за того, что вы не можете работать со своим менеджером, является грубым профессиональным проступком. Поднимите вопрос. Если это игнорируется, это не ваша проблема. Но если вы не поднимаете этот вопрос, потому что вы хотите , чтобы проблема просочилась к клиентам, по политическим причинам, это в значительной степени ваша проблема, и как ваш босс я без проблем проясню это, если я когда-нибудь узнаю!
Это справедливое замечание. Я отредактирую соответственно
Все упирается в нюансы, как рассказать о баге. Мне нравится код-ревью, я доводил это до руководства в прошлом, но безрезультатно.
Если вы можете ввести какую-то формальную настройку (например, проверку кода), то это устраняет необходимость в нюансах, поскольку проверка кода устанавливает это.
Код-ревью — это способ сделать его формальным, но я считаю, что он может просто отодвинуть проблему на шаг — слишком поздно. Лучше всего решать возникшую проблему.

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

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

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

Мы нашли ошибку в A после последнего патча, нам нужно исправить C, D. Чтобы избежать подобных ошибок в будущем, я думаю, было бы хорошей практикой делать X, Y, вы согласны? Если нет, что, по вашему мнению, мы можем сделать по-другому, чтобы избежать этого?

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

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

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

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

  1. Зарегистрировать ошибку
  2. Сделать тестовый пример
  3. Исправьте ошибку. Сохраните тестовый пример в качестве доказательства
  4. Исправить связанные проблемы

Нас это сейчас не волнует, вы должны сосредоточиться на X

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

Поговорить с коллегой, конечно, лучше всего, мой ответ дает альтернативу идеалу.

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

Но я также чувствую, что это один из тех случаев, когда нужно просто отпустить ситуацию.

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

Затем, вооружившись таким отношением, вы можете приступить к реальному решению своей проблемы.

Просто скажи ему это прямо.

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

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

Я чувствую... когда ты... я хочу.

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

"I feel annoyed when you produce work with bugs because then I have to fix them. I really wish you wouldn't do this any more."Это довольно враждебная формулировка. Это вызывает мышление «я против тебя». Сравните это с предложением Jonast92 о том, We found a bug in A after the latest patch, we need to fix C,D. To avoid future bugs of similar sort I think it would be good practice to do X,Y, do you agree? If not, what do you think we can do differently to avoid this?что это очень похоже на мышление «мы против проблемы».

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

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

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

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

Спасибо. У нас нет ни того, ни другого; Я считаю, что они, как вы говорите, необходимы для качественного результата. Я пытаюсь обеспечить отслеживание (которое обычно более или менее решается путем отправки писем), но меня больше всего интересует проверка кода. Как бы вы развернули это и справились с эго? Я боюсь задеть программистов за их гордость.
проверка кода должна быть обязательным этапом SDLC, который находится между изменением, зарегистрированным в функциональной ветке в вашей системе контроля версий, и основной веткой, из которой оно развернуто. Ни одно изменение не должно проникнуть в развертываемую ветку до того, как оно будет проверено. Он работает по-разному с разными системами контроля версий, поэтому это зависит от того, что вы используете.
Понятно, но здесь меня больше интересует психологическая сторона. Существует нежелание признать, что такие процессы могут и должны быть необходимы. Управлению, могу вам сказать, это кажется "слишком сложным для того, чем мы занимаемся". Хотя я вижу в этом необходимость. Моя проблема не техническая; это одна из идей.
Извините, я не могу дать совет в области "психологии"...

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

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

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

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

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

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

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

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

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

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