Автор статьи: Дмитрий Курдюмов

Участвовал в Аджайл-трансформациях в крупнейших компаниях в России (Альфа банк, МТС, Х5 retail group), с международным опытом в стартапе зарубежом.

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

  • То ли этот человек просто пишет код по четко написанному ТЗ — исполнитель.

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

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

Делюсь своим опытом как эксперт и консультант по работе с Agile-командами. На своем опыте я встречал разных разработчиков и все три типа были в разных контекстах и разных компаниях.

Давайте разберемся в плюсах и минусах каждого из категорий разработчиков:

1. Тот, кто просто пишет код по четко поставленному ТЗ — исполнитель

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

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

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

Вывод из этого таков — подобная культура разработки имеет смысл в тех проектах, где результат заранее понятен, где можно четко написать ТЗ и сделать по нему. Но там, где мы создаем что-то новое, такая модель будет приводить к долгим срокам разработки и созданию некачественного продукта.

2. Тип разработчика — герой

Это разработчики, готовые придумывать решение самостоятельно, без четкого ТЗ со стороны системного анализа, но все еще не настолько проактивные, чтобы коммуницировать с бизнесом напрямую и уточнять задачу. Плюс здесь в том, что мы даем пространство разработчику действительно включить весь свой опыт и навыки и придумать простое решение проблемы клиента. Это поможет снизить стоимость решения, так как можно сделать проще и руки у разработчика развязаны. Но в то же время существует риск: разработчики склонны к тому, чтобы сразу сделать круто, и тут стоимость решения может быть выше. В этом случае разработчиков стоит обучать принципам lean (бережливого создания продукта): сначала сделали базовую версию, потом улучшили, потом сделали круто. Также в этом типе разработчика все еще нет проактивности и проактивной и прямой коммуникации с бизнесом. То есть если у разработчика возникнет вопрос в ходе разработки, он может сделать так, как посчитает нужным или спросит у того, кто принес ему бизнес-требование. И коммуникация здесь может быть рваная.

3. Тип разработчика — суперзвезда

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

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

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

Также во втором и третьем варианте разработчика важны следующие детали: 

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

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

Также хорошей практикой является парная работа разработчика с тестировщиком — тестировщик тестирует, разработчик сразу же исправляет, что ускоряет время выполнения

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

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

В чем же задача тим лида в такой структуре? 

  • Развивать культуру ответственности и самоорганизации.

  • Растить зрелость разработчика и помогать выйти ему на следующий уровень.

  • Устранять барьеры и препятствия (например, в общении с пользователями и бизнесом).

  • Растить инженерную культуру и лидировать это направление.


Всех желающих приглашаю на открытый урок «Как правильно увольнять человека». Увольнения — сложная тема, поэтому научимся работать с увольнениями как с нормальной частью менеджерской деятельности. Обсудим:

- Кого и почему надо увольнять?
- Причины увольнения; законодательная основа; сроки увольнения.
- Увольнение по инициативе сотрудника — как предотвратить.


Регистрация доступна по ссылке.

А если вам понравилась статья, жду в своем телеграмм канале и на сайте.

Комментарии (6)


  1. Sly_tom_cat
    24.06.2022 16:31
    +2

     Зачем? Если в качестве может удостоверяться сам разработчик и на ходу исправлять все баги.

    Не работает.

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

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

    ЗЫ я таки не призванию жестко разделять тестирование и разработку. Я считаю должным для разработчика обеспечить высокий % покрытия юнит-тестами, и максимально плотно взаимодействовать с тестерами (парная работа или просто максимальный приоритет тому что из тестирования "прилетает").


    1. Sergey-Titkov
      24.06.2022 16:55

      Нет, это просто разные доски мышления


    1. awfun
      24.06.2022 17:31

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


    1. AlexSpaizNet
      26.06.2022 12:10

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

      Есть какие-то исследования что бы это утверждать? Ну джуниоры может быть и не могут в силу отсутствия опыта. Но не вижу причин что бы разработчик с 10+ лет опыта не понимал как он может сломать собственный код. Наоборот, он реально понимает что и как там работает и может накидать еще десятки кейсов как это сломать.

      Другое дело что ему как разработчику не интересно заниматься QA.

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


      1. Sly_tom_cat
        26.06.2022 17:42

        Исследований не встречал, но в разработке и около уже очень много лет (порой страшно подумать - сколько). И это все наблюдал с разных сторон: разработчик, аналитик, руководитель, и даже в роли приемщика работ разработчиков (это по сути такой e-mail переводчик-форвардер между разработчиками и приемщиками, которые по факту работали тестерами). И везде примерно одна картина: то что разработчику в голову не приходит, тестировщик делает чуть ли не первым делом. То разработчик не подумал что поле ввода могут оставить пустым, то не учел, что форму ввода могут просто закрыть - и это были совсем не джуны, а довольно опытные разработчики. Они могли сделать "под капотом" гениальный алгоритм, но забыть в нем обработать исключение деления на ноль.

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

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


  1. WiseMango
    24.06.2022 16:58
    +1

    На текущем проекте роль разработчика включает в себя написание серверного и клиентского кода, CI/CD процессы, загрузка, очистка, анализ данных, а также их поиск в различных источниках. Никаких бизнес-аналитиков, помощи от проектного менеджера, владельцам бизнеса при этом не важно откуда будут приходить данные и по каким алгоритмам будут показываться, они только согласовывают инфраструктурные моменты и пользовательский интерфейс. Никаких ТЗ или документации для разработчиков. Разработчики сами пишут документацию.
    Получается полная свобода действий, но и большая ответственность. Подход на любителя, но расти позволяет очень быстро.