Летом я сменил должность старшего инженера в крупной компании на должность главного инженера в небольшой компании. Сейчас я курирую около 20 инженеров младшего и среднего звена, работающих над 3 разными системами бронирования. Все системы бронирования работают на одной и той же проприетарной внутренней структуре, которой управляет другая команда, за которой я не наблюдаю.
В прошлом месяце, в ночь перед запуском большого релиза для одной из систем бронирования, старший инженер («Клинт») из группы поддержки бэкенда оставил кучу комментариев к запросу на слияние, который мы открыли, чтобы объединить наш релиз-кандидат вMaster
Отзывы варьировались от несколько полезных до несколько бесполезных. Мы все равно объединились, Master
и на следующий день я спросил, мог ли он проверить этот код раньше, вместо того, чтобы ждать завершения интеграционного тестирования. Когда он оставил отзыв, это был конец дня, и мы готовили заявку для нашего релиз-инженера для развертывания в 4:30 утра следующего дня.
Он сказал мне, что учить моих инженеров не его работа (он прав, это не так). Но мне трудно обучать 20 инженеров одновременно, даже если они проводят экспертную оценку и контролируют код друг друга. Я также обеспокоен тем, что моя команда была немного демотивирована, так как они не смогли ничего сделать, чтобы ответить на отзыв.
У нас есть еще один выпуск, запланированный сразу после того, как мы вернемся с Дня Благодарения, и, судя по тому, как Клинт отклонил все наши приглашения на встречи по обзору кода в этом месяце, я думаю, что через пару дней я увижу повторение того же самого.
Я не могу сказать, действительно ли Клинт хочет помочь или просто тешит свое эго. Я был бы рад, если бы он помог нам в обучении наших младших разработчиков, но то, как он это делает, бесполезно. Я не думаю, что мои инженеры когда-нибудь смогут поймать все, что может Клинт.
Как я могу сказать Клинту, если он хочет оставить отзыв, это должно быть на наших условиях?
РЕДАКТИРОВАТЬ : мне неловко, что я упустил эту деталь, но наши инженеры открывают запросы на вытягивание из своих веток функций development
, куда должна идти эта обратная связь (по этим запросам на вытягивание)... когда все эти изменения готовы для перехода в нашу производственную среду ( после того, как наши QA-инженеры проведут интеграционное тестирование и удостоверятся, что изменения, по их мнению, безопасны) мы открываем PR для слияния Master
после того, как инженер одобрит изменения и согласится, что мы не вносили ничего ужасного, а затем развертываем на следующее утро.
Если Клинт не обнаружит какие-либо серьезные, «не развертываемые» ошибки, я просто поблагодарю его за отзыв и объясню ему, как вы собираетесь решать вопросы, которые он поднимает (если они верны) в будущих выпусках.
Если у него с этим проблемы, то у вас есть возможность объяснить, почему ему было бы лучше дать отзыв раньше.
В конечном счете, это его проблема, что он дает обратную связь так поздно. Не делайте это своим, принимая обратную связь как личную/командную ошибку.
Либо проверка кода требуется для релиза, либо она не требуется. Если это требуется, то рецензент должен нести ответственность за своевременную проверку. У вас должна быть возможность подойти к его столу и сказать: «Бросьте все остальное и сделайте этот обзор, иначе мы не сможем назначить дату релиза». И у вас должна быть возможность сказать: «Извините, мы не смогли выпустить вовремя, потому что проверка не была сделана вовремя».
Если не требуется, то отпускаете.
PS. Если Клинту дается один день на обзор недель или месяцев работы, это, по-видимому, указывает на то, что обзор не нужен. Но если Клинт обнаружит проблемы за это короткое время, это, по-видимому, указывает на то, что предыдущие обзоры были не такими хорошими, как должны были быть.
Похоже, здесь есть ряд проблем, но все они решаемы.
Проблемы с процессом:
Личные проблемы:
Оставлять PR открытым для "реального просмотра" до вечера перед пушем означает, что либо нужно серьезно относиться ко всем отзывам и не сливаться и не пушить, если есть неотвеченные комментарии, либо нужно изменить расписание пушей, чтобы было достаточно времени, чтобы завершить проверку и запланировать или отменить отправку (например, PR, не объединенные по крайней мере за 24 часа до запланированной отправки, не отправляются).
Может быть хорошей идеей пригласить его на кофе и обсудить это, дав ему понять, что да, вы действительно цените его вклад, но что процесс в том виде, в каком он идет сейчас, означает, что вы не получили его отзыв достаточно рано, чтобы подействуйте на это на этот раз, подчеркнув «на этот раз». Сообщите ему, что вы хотите изменить процесс, и спросите, есть ли у него какие-либо предложения.
Спросите его, что облегчит ему участие, и убедитесь, что он понимает, что вы цените его беспокойство. Если он действительно пытается помочь, то никакие действия по его комментариям его тоже демотивируют. Похоже, что никаких стопоров не было, так как вы продолжили слияние, но это также звучит так, что с его точки зрения работа была напрасной тратой усилий.
Поблагодарите его за то, что он нашел проблемы, на которые он указал, и дайте ему знать, что вы намерены заняться важными вопросами, которые он поднял. Вы должны рассмотреть возможность сделать это как один на один с ним, так и публично в закрытом PR, чтобы дать понять ему и команде, что вы рады, что он помогает. Проявление благодарности в частном порядке и публично за его заботу и готовность помочь, даже если ни один из отзывов не был действенным с точки зрения вашей команды, — это просто вежливый поступок, который помогает укрепить солидарность между командами.
Как я могу сказать Клинту, если он хочет оставить отзыв, это должно быть на наших условиях?
Если Клинт не работает на вас или не существует какого-то формального процесса, определяющего, когда комментарии не разрешены, вы не можете заставить Клинта придерживаться «ваших условий».
Вы можете игнорировать его комментарии. Вы можете поблагодарить его за «несколько полезные» комментарии, чтобы поощрить их больше. Вы можете добавить элементы в свой технический список, чтобы учесть эти полезные комментарии. Вы можете продолжать приглашать его на встречи по обзору кода. Вы можете призвать свою команду не терять мотивацию из-за нескольких запоздалых комментариев.
1) Есть ли среди вас и 20 инженеров никого, кто мог бы помочь вам их наставлять? Вот почему 20 человек — это слишком много в команде, потому что один человек не может управлять и наставлять 20 человек. Вам нужно сократить размер вашей команды или, по крайней мере, размер вашей ответственности, потому что вы слишком рассредоточены.
2) Что касается выпуска кода, Клинт в вашей команде? Если Клинт входит в вашу команду, то Клинт должен участвовать в проверке кода, особенно если он старший инженер. Вы должны поощрять своих подопечных присылать обзоры кода Клинту, где это возможно (не перегружайте его, но поощряйте их вовлекать Клинта в процесс). Если Клинта нет в вашей команде, то, если проблемы, которые находит Клинт, не являются критическими ошибками, нарушающими работу, пусть он регистрирует их как отчеты об ошибках; он не в вашей команде, он не отвечает за ваш продукт.
4) Что касается отсутствия Клинта на «совещаниях по обзору кода»: во-первых, я не уверен, что такое «совещание по обзору кода». Проверка кода — это асинхронные операции: разработчик отправляет код, рецензент кода выполняет проверку, пока разработчик делает что-то еще, проверка завершается, разработчик обрабатывает комментарии, полоскание, повторение. Я не знаю, что такое «совещание по обзору кода», это звучит глупо. Но помимо этого, если Клинт в вашей команде, Клинт должен присутствовать на собраниях команды. Если Клинта нет в вашей команде, Клинту не нужно посещать собрания команды. Это просто.
Кто-то должен определить «процесс», например, последовательность, в которой что-то происходит.
Как разработчик, если я не определяю процесс, я проведу проверку кода (если это моя работа, как ожидает мой менеджер), когда процесс говорит мне об этом и/или когда кто-то просит меня об этом.
Я не понимаю часть вопроса, в котором говорится: «Отклонил все наши приглашения на встречи по проверке кода в этом месяце».
Кстати, я не уверен, что такое «совещание по обзору кода». Моя идея проверки кода такова:
Если я «старший», то, возможно, я не слушаю обзорные встречи других людей.
Чтобы сэкономить время (уменьшить усилия), я люблю проверять код после того , как он был протестирован. Я все еще могу находить ошибки (например, если тестирование не завершено идеально), но легче просмотреть код, который работает, чем код, который не работает. Проверка кода, который не работает, называется «разработкой и отладкой» и требует больше времени.
Можете ли вы сделать «интеграционное тестирование» проще, возможно, более автоматизированным? Чтобы вы могли сделать:
В качестве альтернативы вы можете выполнить слияние перед проверкой кода (если вы уверены, что интеграционного тестирования было достаточно без проверки), провести проверку кода в основной ветке и использовать комментарии проверки кода в качестве входных данных для того, что вы, возможно, захотите улучшить в последующей итерации (последующая «спринт»).
Почти уверен, что этот парень просто говорит тебе, что ты плохо работаешь. Вот что значит «учить ваших инженеров не моя работа». Он не заинтересован в том, чтобы делать за вас вашу работу, он хочет, чтобы вы делали ее лучше. Вот почему он просматривал код, предназначенный для производства (код, который вы подписали), а не код в конвейере. Что с этим делать, ну это тема для отдельного вопроса.
Остерегаться.
✓ Старший разработчик
✓ Находит проблемы в коде, который никто не
замечал ✓ Команда обескуражена из-за позднего отчета
✓ Сообщает что-то «не о своей работе», но все равно проверено
✗ Готовится к повторению того же сценария
Это выглядит не очень хорошо ни для команды, ни для старшего разработчика.
Но я говорю вам, берегитесь. Убедитесь, что вы понимаете все комментарии к этому обзору. И я действительно понимаю. «Это просто неправильно». не считается, если вы действительно не потратили усилия на проверку.
Вероятно, нет ничего серьезного, ожидающего, чтобы быть разрушительным для вас. Но может быть обнаружена очень тонкая ошибка потери данных, которую он не может выявить при тестировании. Вы не поймете разницы, пока не поймете все комментарии.
Приложение: чтобы восстановить боевой дух команды, убедитесь, что у вас есть достаточно времени, чтобы исправить все проблемы, которые старший разработчик обнаружил в запросе на включение, которые, по мнению остальной команды, должны быть исправлены.
Проблема здесь в том, что ваш рабочий процесс несовершенен. Экспертные проверки должны проводиться до интеграционного тестирования по той простой причине, что ожидание окончания тестирования может затормозить процесс. Если экспертная проверка обнаружит проблемы, требующие изменений, а интеграционное тестирование уже выполнено, потребуется больше времени, чтобы вернуться и повторить все тесты после внесения изменений.
В идеале разработчик должен писать и выполнять тесты по мере разработки кода, а любое окончательное тестирование должно выполняться после рецензирования кода, чтобы убедиться, что он работает так, как ожидалось. Следует помнить, что экспертная проверка может обнаружить ошибки в коде до того, как они смогут вывести систему из строя во время интеграционного тестирования.
У вас есть два разных вида отзывов (три, если считать вашу личную встречу). Это не так уж плохо, но это означает, что вам нужно очень четко представлять свои ожидания для каждого обстоятельства. Я бы создал шаблон запроса на вытягивание для вашего окончательного обзора, который выглядел бы примерно следующим образом. Это очень четко показывает не только то, что ожидается от этого обзора, но и то, как более успешно обрабатывать ваши отзывы в будущем.
<Сводка изменений>
Это предварительный обзор. Его цель - найти основные проблемы, такие как:
За исключением подобных проблем, этот запрос на вытягивание будет объединен в <дата и время>.
Обзоры отдельных проектов, в ходе которых мы обсуждаем удобочитаемость, ремонтопригодность и общую архитектуру, уже завершены. Если вы обнаружите здесь подобные проблемы, откройте проблему или внесите изменения в свой собственный запрос на включение в разработку вместо того, чтобы загромождать этот запрос на вытягивание. Обзоры дизайна были выполнены в следующих запросах на включение:
слеске
пользователь34687
Бернхард Баркер
Дэвид Конрад
Хенрик Россо
Хенрик Россо
Хенрик Россо
Хенрик Россо
WernerCD
jpmc26