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

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

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

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

Идеи, которые у меня были:

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

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

" На самом деле это не решает проблему " Конечно, решает. Вы не занимаетесь обучением людей быть хорошими разработчиками. Как менеджер вы занимаетесь созданием и поддержанием хорошей команды. При этом есть ли правда в утверждениях этого человека? Ваши обзоры кода не проводятся должным образом, или это просто тот случай, когда обзоры кода снова и снова указывают на проблемы, потому что разработчик продолжает их создавать? И рискуя превратить это скорее в ответ, чем в комментарий: поймите, что вы должны делать № 3 только после нескольких экземпляров № 1.
Подожди, подожди. Я прочитал по фоновой ссылке. Вы говорите о гипотетической ситуации, когда вы управляете автором связанного поста? Потому что если это так, то вы не сможете ответить на мои вопросы в комментарии выше, а задавать вопрос на самом деле очень мало смысла. Вы бы просто спросили «как мне справиться с проблемой производительности/поведения человека», что является «Управлением 101», но это слишком широкая тема, чтобы ее здесь освещать.
Это не гипотетический вопрос. Слишком личное отношение разработчиков к проверкам кода — очень распространенная проблема.
Чтобы ответить на ваш первый вопрос. Нет. Я не считаю, что есть проблема, когда люди задают слишком много вопросов. Я считаю, что причина, по которой они жалуются на повторяющиеся вопросы, заключается в том, что они не могут удовлетворительно ответить на вопрос, что, вероятно, является результатом их разочарования тем, что их спрашивают несколько раз, и в итоге они дают либо краткие, либо расплывчатые ответы. в результате, что только усугубляет проблему.
Некоторые другие (не очень хорошие) варианты: 4. Установить ограничения на то, что разрешено и что не разрешено в ходе проверки кода. 5. Не позволяйте младшим разработчикам рецензировать код кого-то, кто не является младшим. 6. Нанимайте людей, которые не будут давать обратную связь, которая может кого-то обидеть. Но кажется, что какой вариант выбрать, будет полностью зависеть от вас.
@Dukeling Мне на самом деле очень нравится, когда младшие проверяют более старшие работы, поскольку обычно это очень положительно влияет на нашу командную культуру. Люди чувствуют, что их ценят, учатся друг у друга и признают, что даже у самых опытных из нас есть чему поучиться у самых маленьких.
Все три предложенных вами варианта являются резкими и снисходительными, я боюсь, что не было варианта «Активно выслушать жалобы devpr и помочь переформулировать их в конструктивные изменения: «Как мы можем улучшить наш процесс проверки кода / процесс разработки программного обеспечения? Устранить повторение? Собрать и формализовать нашу базу знаний/кодовую базу? Улучшить документацию?»
«даже подвергать сомнению решения, принятые на предыдущих встречах». Ну, если это правда, то кто ведет (краткие) протоколы этих встреч? в той же системе документации, что и проверки кода? Если никого, назначьте кого-нибудь как можно скорее. Опять же, это законная конструктивная жалоба/предложение по улучшению. Код-ревью — это не закулисные занятия для новичков.
@smci да, это хорошее наблюдение. Я был довольно расстроен, так как я чувствовал, что жалобы были чрезмерными. Несмотря на то, что я лично чувствую напряжение во время проверки кода, я сохраняю спокойствие, поэтому я чувствовал, что этот разработчик должен быть в состоянии сделать то же самое, не жалуясь.
Откровенно говоря, довольно многие обзоры кода являются «грубыми, снисходительными или иным образом токсичными», если люди, которые их делают, недостаточно опытны, плохо общаются, мелочны, невежественны, полное отсутствие руководств, программного процесса, документации, написанного минут, доведение до конца... ваша работа - преобразовать жалобы в конструктивное улучшение. Я не понимаю, почему вы, кажется, автоматически сомневаетесь во всем, что говорит ваш devpr, даже если они не говорят это оптимальным образом или не тем сторонам. Ради бога, не ожидайте, что HR будет предлагать конструктивные улучшения вашего программного процесса.
Пусть младшие ребята начнут читать кучу книг по улучшению процесса кодирования и рецензирования, например. «Code Complete: Практическое руководство по созданию программного обеспечения, второе издание» , особенно. Часть V. Попросите их улучшить процесс. Заставьте их документировать повторяющиеся вопросы (пусть они создадут вики). И так далее. Спросите devpr, помогают ли эти улучшения.
«...получение повторяющихся вопросов... неспособность удовлетворительно ответить на вопрос, что, вероятно, является результатом того, что они разочарованы тем, что их задают несколько раз, и в результате они дают либо краткие, либо расплывчатые ответы, что только усугубляет проблема." Так что покажите им правильный путь, выбрав несколько конкретных примеров и показав им предполагаемый хороший ответ в письменной форме. «не сумев удовлетворительно ответить на вопрос» снова указывает на «к чьему удовлетворению? младшие ребята в обзоре? вы? консенсус ваших разработчиков?»…
...похоже, что у вас мало процессов и практически нет письменных ответов на вопросы, связанные с проверкой кода. Вы должны следить за теми, кто идет вперед, пока вы не решите эту проблему.
@GlenPierce Конечно, я понимаю, что это, возможно, обычная проблема, но это не делает ее здесь автоматически актуальной. Стратегии реализации отраслевых практик, таких как обзоры кода, обычно не рассматриваются нами. Это также, вероятно, приведет к многочисленным дебатам (например, я сдерживаю себя от того, чтобы прыгать на «младших обзорах старших», но, возможно, это работает так, как вы это делаете). Основываясь на ваших комментариях, кажется, что связанный вопрос вдохновил вас задать вопрос о проблемах, с которыми вы столкнулись в своей команде при проверке кода? Вы можете отредактировать это, чтобы быть более конкретным.
Заголовок вообще не имеет отношения к сути вопроса.
Как насчет решения его/ее проблем? Проверка кода наиболее эффективна, когда коллеги имеют одинаковый уровень опыта; в противном случае это превращается в своего рода избиение новичков самодовольными старшими. Если вы хотите решить проблему различий в опыте, улучшите/введите наставничество/парное сотрудничество.
Основная проблема заключается в том, почему младший разработчик проводит проверку кода? Если вам нужно их тренировать, то делайте это другим способом. Проверка кода предназначена для поиска проблем или улучшений, а не для обучения кого-то нового...
@Lilienthal, «обзор» не относится к индустрии программного обеспечения. В других отраслях есть виды деятельности, в ходе которых конечные результаты рассматриваются и критикуются группами (в программном обеспечении они просто называются «проверкой кода», в инженерии это может называться «проверкой печатных плат» — в какой бы отрасли динамика ни была). Я думаю, что люди зацикливаются на том, что, по их мнению, является точной целью проверки кода, и необоснованно пытаются исключить очень важный обучающий аспект проверки кода. Обзор — это ОЧЕНЬ место для участия младших разработчиков.
@teego1967: Абсолютно нет. Хочешь тренироваться - тренируйся. Здесь происходит злоупотребление процессом проверки.
@ gnasher729, я думаю, здесь стоит выбирать между «злоупотреблением» процессом рецензирования или его полным отсутствием. Ведущий не может выбирать свою аудиторию. Если докладчик буквально напуган до паники, потому что ему нужно объяснить некоторые основы своим коллегам, возможно, ему нужно адаптироваться и потратить время на это — или уйти.
@teego1967: Вы не объясняете некоторые основы своим коллегам во время проверки кода. Особенно, когда вам нужно объяснять это снова и снова.

Ответы (4)

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

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

  2. Ваши три предложенных варианта ограничены суровостью, принуждением и снисходительностью, я боюсь, что не было варианта «Активно выслушивать жалобы разработчиков и помогать переформулировать их в конструктивные изменения: «Как мы можем улучшить наш процесс проверки кода / процесс разработки программного обеспечения? Устранить повторение? Собрать и формализовать нашу базу знаний/кодовую базу? Улучшить документацию?». Это критика вашего стиля слушания. Итак, вы думаете, что они должны были быть в состоянии с этим смириться, потому что вы могли... остерегайтесь снисходительности, у всех нас есть свои слабости, сдерживайте свое эго... предположительно есть вещи, которые они могут сделать легко, которые вы можете найти невозможными. Если вам действительно трудно с ними общаться, поговорите с ними наедине и проясните ситуацию. Конструктивно. Иногда некоторые из моих наиболее надоедливых коллег научили меня полезным вещам. Даже если бы мне пришлось расшифровывать их клубок эмоций.

  3. «даже подвергать сомнению решения, принятые на предыдущих встречах»Ну, если это правда, кто ведет (краткие) протоколы этих встреч? в той же системе документации, что и проверки кода? (JIRA? git? Bugzilla? вики? Mondrian? GoogleDoc?) Если никого нет, назначьте кого-нибудь как можно скорее. Если кто-то делал это, но плохо, скажите ему, чтобы он сделал это правильно, или переназначьте просьбу (но остерегайтесь вознаграждать плохое поведение). Опять же, это законная конструктивная жалоба/предложение по улучшению. Код-ревью — это не закулисные занятия для новичков. Не позволяйте новичкам перекладывать ответственность за обучение на старших разработчиков и на проверку кода. Кроме того, есть ли у вас встречи, которые не приводят к решениям или действиям? Это еще один распространенный организационный антипаттерн. Является ли комментарий решением? Правомерно ли групповое голосование? Когда ошибается большинство? и т. д.

  4. одно мощное предложение (особенно когда общаются ботаники) состоит в том, чтобы переформулировать вопросы/критику, чтобы сосредоточиться на вещах, а не на людях, и, в частности, обезличить вопросы/разногласия : например * «Почему ваш код делает X? Почему вы реализовали Y как A вместо Б?» -> "Каковы причины того, что строки LLL делают X? Почему лучше реализовать Y...?"

  5. В качестве общего процесса и для того, чтобы научить всех, что ваш процесс принадлежит сообществу , попросите младших ребят (особенно) начать читать кучу книг по улучшению процесса кодирования и проверки, например. «Code Complete: Практическое руководство по созданию программного обеспечения, второе издание», особенно. Часть V. Попросите их улучшить процесс. Заставьте их документировать повторяющиеся вопросы (пусть они создадут вики). И так далее. Спросите разработчика, помогают ли эти улучшения.

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

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

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

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

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

Это звучит плохо. Ваша проблема в том, что вы разработали совершенно неподходящий метод обучения младших сотрудников. Роль рецензента заключается в улучшении рецензируемого кода. Проверка кода не предназначена для обучения людей. Обучение предназначено для обучения людей. И старшие разработчики не являются тренерами. Если вы хотите, чтобы кто-то обучал ваших младших разработчиков, наймите тренера. Не старший разработчик программного обеспечения.

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

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

> Обзоры кода не предназначены для обучения людей < Я не согласен, это отличный способ обучить всю команду тому, как работает функция и что делает приложение
Большинство из нас согласны с тем, что «не злоупотребляйте процессом проверки кода для этого [базового обучения]» , но это ни в коем случае не означает: «Либо наймите инструктора ($$$), либо заставьте своих старших разработчиков проводить рутинное обучение юниоры» . Гораздо лучше разработать процесс, в соответствии с которым команда создает FAQ/стандарты кодирования/контрольный список/вики/автоматический линтинг. По моему ответу. Более 95% проблем должны решаться самостоятельно, без личной встречи или обучения. (Но они должны серьезно относиться к привитию этой культуры, а не только к слову)

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

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

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

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

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

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

В agile-магазине ни один из этих вариантов нежелателен.

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

Потенциальные разногласия и недоразумения, которые выявляются при проверке кода, не создаются проверками кода.

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

Это сказано из комментариев вашего разработчика:

мы делаем их индивидуально с наших столов. Я всегда всем говорю, что готов обсуждать вещи более подробно, но в итоге мы просто пытаемся ввести миллион строк текста в систему Visual Studio/TFS – DefunctNinja

Похоже, что DefunctNinja описывает вовсе не обзоры кода , и, возможно, проблема в этом.

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

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

Скорее всего, они просто выпалили первое, что пришло им в голову при чтении кода во время сеанса видеоконференции, отсюда отсутствие у них фильтров и такта. Так что на самом деле это вовсе не тщательно продуманная сессия проверки кода, а скорее бесконечная дискуссия о догадках «велосипедного сарая».

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

Паркинсон объясняет это тем, что атомная установка настолько велика, настолько дорога и настолько сложна, что люди не могут ее понять, и вместо того, чтобы попытаться, они полагают, что кто-то еще проверил все детали, прежде чем дойти до этого. Ричард П. Фейнман приводит в своих книгах пару интересных и очень точных примеров, касающихся Лос-Аламоса.

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

В Дании мы называем это «установкой отпечатка пальца». Речь идет о личной гордости и престиже, о возможности указать куда-то и сказать: «Вот! Я сделал это». Это сильная черта политиков, но она присутствует у большинства людей, которым предоставляется шанс. Только подумайте о шагах на мокром цементе.

источник