Автор статьи: Дмитрий Курдюмов
Участвовал в Аджайл-трансформациях в крупнейших компаниях в России (Альфа банк, МТС, Х5 retail group), с международным опытом в стартапе зарубежом.
На просторах интернета мы часто можем встретить дискуссии о том, что должен делать разработчик и чем ограничена его роль.
То ли этот человек просто пишет код по четко написанному ТЗ — исполнитель.
То ли этот человек должен быть способен придумать решение самостоятельно, исходя из четко поставленной бизнес-задачи — герой.
То ли вообще должен быть способен разобраться в проблеме клиента, уточнить вопросы и придумать наилучшее решение — суперзвезда.
Делюсь своим опытом как эксперт и консультант по работе с Agile-командами. На своем опыте я встречал разных разработчиков и все три типа были в разных контекстах и разных компаниях.
Давайте разберемся в плюсах и минусах каждого из категорий разработчиков:
1. Тот, кто просто пишет код по четко поставленному ТЗ — исполнитель
Обычно такие разработчики хорошие исполнители, они действительно фокусируются на ТЗ и выполняют задачи так, как там написано. Но здесь кроется одна большая проблема — как правило, такие разработчики совсем не думают и не знают о потребностях пользователей, и поэтому механическое выполнение ТЗ в итоге может привести к низкому качеству продукта с точки зрения бизнеса и пользователей.
В компаниях, в которых присутствует такая культура разработки, разработчик в итоге не несет ответственность за результат, а скорее всего, переложит ее на того, кто принес ТЗ, со словами: «В ТЗ же так написано». Соответственно, тот человек, который делал ТЗ, переложит ответственность на того, у кого он уточнял это ТЗ. Также при передаче документов теряется смысл и информация, невозможно все положить в ТЗ. Как минимум, требуется регулярная коммуникация, чтобы качественно сделать задачу.
В общем, культура размытия ответственности порождает низкое качество и долгие сроки разработки, так как чтобы передать, нужно заново пройти цепочку.
Вывод из этого таков — подобная культура разработки имеет смысл в тех проектах, где результат заранее понятен, где можно четко написать ТЗ и сделать по нему. Но там, где мы создаем что-то новое, такая модель будет приводить к долгим срокам разработки и созданию некачественного продукта.
2. Тип разработчика — герой
Это разработчики, готовые придумывать решение самостоятельно, без четкого ТЗ со стороны системного анализа, но все еще не настолько проактивные, чтобы коммуницировать с бизнесом напрямую и уточнять задачу. Плюс здесь в том, что мы даем пространство разработчику действительно включить весь свой опыт и навыки и придумать простое решение проблемы клиента. Это поможет снизить стоимость решения, так как можно сделать проще и руки у разработчика развязаны. Но в то же время существует риск: разработчики склонны к тому, чтобы сразу сделать круто, и тут стоимость решения может быть выше. В этом случае разработчиков стоит обучать принципам lean (бережливого создания продукта): сначала сделали базовую версию, потом улучшили, потом сделали круто. Также в этом типе разработчика все еще нет проактивности и проактивной и прямой коммуникации с бизнесом. То есть если у разработчика возникнет вопрос в ходе разработки, он может сделать так, как посчитает нужным или спросит у того, кто принес ему бизнес-требование. И коммуникация здесь может быть рваная.
3. Тип разработчика — суперзвезда
Это те разработчики, которые не просто получили четкое описание бизнес-требований, но мыслят проактивно и готовы самостоятельно созвониться с бизнесом, если в начале и в ходе разработки возникают вопросы, чтобы лучше понять проблему клиента и предложить лучшее решение. Такие разработчики не требуют посредников, которые являются передатчиками информации от бизнеса. Такой разработчик — не просто кодер, а специалист, который создает решение под потребности клиента. Это важно в продуктовой разработке, где мы создаем новый продукт или улучшаем метрики текущего продукта, и где есть много неопределенностей.
Это также снизит количество документации, которая пишется на входе для первого типа разработчика, на которую уходит много времени, в попытке учесть все детали. Улучшит качество готового решения, поскольку не будет теряться контекст из-за передачи из рук в руки, и благодаря полному пониманию разработчиком того, что хочет бизнес.
В итоге в структуре продуктовой команды частично или полностью роль аналитика может быть в самом разработчике, так как он придумывает и уточняет требования у бизнеса или владельца продукта самостоятельно. Это уменьшает время на коммуникации и улучшает их качество. Требования разработчики фиксируют в письменном виде для сохранения знаний.
Также во втором и третьем варианте разработчика важны следующие детали:
Проверка качества. Разработчик должен удостовериться в качестве того, что он делает, а не просто кодить и передавать в тестирование. Поэтому разработчики могут проводить все виды тестирования самостоятельно. Каждый отвечает за то, что выходит в прод.
Часто замечал, что роль тестирования во многих командах является узким горлышком. Все просто — тестировщиков в команде всегда меньше, чем разработчиков, плюс передачи от разработки в тестирование и обратно создают большие задержки. Зачем? Если в качестве может удостоверяться сам разработчик и на ходу исправлять все баги. Качество и скорость благодаря этому только улучшатся.
Также хорошей практикой является парная работа разработчика с тестировщиком — тестировщик тестирует, разработчик сразу же исправляет, что ускоряет время выполнения
Демонстрация готового продукта пользователям и бизнесу и ведение прямого диалога с ними. Этот пункт важен потому, что разработчики должны слышать обратную связь от бизнеса напрямую, а не через посредников, это позволит им лучше понимать потребности бизнеса и придумывать лучшие решения.
На практике каждый спринт команда должна показывать работающий продукт, который они доработали за спринт. На обзоре спринта (демо) происходит демонстрация и обсуждение готового кусочка продукта. Важно, чтобы разработчики сами демонстрировали и фиксировали обратную связь, слышали голос заказчиков и пользователей.
В чем же задача тим лида в такой структуре?
Развивать культуру ответственности и самоорганизации.
Растить зрелость разработчика и помогать выйти ему на следующий уровень.
Устранять барьеры и препятствия (например, в общении с пользователями и бизнесом).
Растить инженерную культуру и лидировать это направление.
Всех желающих приглашаю на открытый урок «Как правильно увольнять человека». Увольнения — сложная тема, поэтому научимся работать с увольнениями как с нормальной частью менеджерской деятельности. Обсудим:
- Кого и почему надо увольнять?
- Причины увольнения; законодательная основа; сроки увольнения.
- Увольнение по инициативе сотрудника — как предотвратить.
А если вам понравилась статья, жду в своем телеграмм канале и на сайте.
Комментарии (6)
WiseMango
24.06.2022 16:58+1На текущем проекте роль разработчика включает в себя написание серверного и клиентского кода, CI/CD процессы, загрузка, очистка, анализ данных, а также их поиск в различных источниках. Никаких бизнес-аналитиков, помощи от проектного менеджера, владельцам бизнеса при этом не важно откуда будут приходить данные и по каким алгоритмам будут показываться, они только согласовывают инфраструктурные моменты и пользовательский интерфейс. Никаких ТЗ или документации для разработчиков. Разработчики сами пишут документацию.
Получается полная свобода действий, но и большая ответственность. Подход на любителя, но расти позволяет очень быстро.
Sly_tom_cat
Не работает.
У разработчика и тестировщика мозги работают по разному (по крайней мере так должно быть): разработчик думает над тем как решить задачу, а тестировщик "как сломать то что сделал разработчик". Т.е. подход "созидателя" и "разрушителя" - переключить свой образ мышления с одного подхода на другой - практически невозможно (лично я не встречал еще таких уникумов).
И только качественный конфликт этих подходов может обеспечить высокое качество.....
Хотя, судя по качеству некоторых популярным продуктов, это откровение все глубже уходит в непознанное.
ЗЫ я таки не призванию жестко разделять тестирование и разработку. Я считаю должным для разработчика обеспечить высокий % покрытия юнит-тестами, и максимально плотно взаимодействовать с тестерами (парная работа или просто максимальный приоритет тому что из тестирования "прилетает").
Sergey-Titkov
Нет, это просто разные доски мышления
awfun
Разработчик может как минимум провести смоук тест - проверить что его правки не сломали стенд, что новый эндпоинт работает и тд. "Обычные" разработчики зачастую даже не знают как обратиться к своей системе и видят ее только со стороны кода
AlexSpaizNet
Есть какие-то исследования что бы это утверждать? Ну джуниоры может быть и не могут в силу отсутствия опыта. Но не вижу причин что бы разработчик с 10+ лет опыта не понимал как он может сломать собственный код. Наоборот, он реально понимает что и как там работает и может накидать еще десятки кейсов как это сломать.
Другое дело что ему как разработчику не интересно заниматься QA.
Для меня QA это хакер не минималках. И я не думаю что существуют хорошие хакеры которые сами не являются программистами. Поэтому не могу согласиться с утверждением что разработчики не могут делать QA в силе разного мышления. Там много других причин.
Sly_tom_cat
Исследований не встречал, но в разработке и около уже очень много лет (порой страшно подумать - сколько). И это все наблюдал с разных сторон: разработчик, аналитик, руководитель, и даже в роли приемщика работ разработчиков (это по сути такой e-mail переводчик-форвардер между разработчиками и приемщиками, которые по факту работали тестерами). И везде примерно одна картина: то что разработчику в голову не приходит, тестировщик делает чуть ли не первым делом. То разработчик не подумал что поле ввода могут оставить пустым, то не учел, что форму ввода могут просто закрыть - и это были совсем не джуны, а довольно опытные разработчики. Они могли сделать "под капотом" гениальный алгоритм, но забыть в нем обработать исключение деления на ноль.
И, да, определение хакер на минималках - вполне подходящее. Я знал и знаю таких тестировщиков, которые вообще ничего сами написать могут, но им хватало готовых инструментов и своей соображалки, что бы найти такие баги, что разработчики потом неделями в дебаггере и логах копались, что бы понять как же это все-таки так может произойти в их гениальном коде...
Может быть это и не разный образ мышления, может это как-то по-другому называется. Но я не верю, что разработчики могут быть тестировщиками, тем более своего кода и при этом эффективно выявлять все возможные баги.