— Если я в чём-то сомневаюсь, я возвращаюсь к началу.
Альбус Персиваль Вульфрик Брайан Дамблдор

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

Введение

Чтобы разобраться с изменениями, к которым привела удалёнка, сперва расскажу вам немного о том, как устроен спринт в нашей команде. Product owner (PO) и техлид готовят задачи к n+1-ому спринту в течение всего n-ого двухнедельного периода. Простые (если выразиться точнее, то понятные) задачи сразу попадают в трекер с более или менее подробным описанием. Такая таска самодостаточна и не требует дополнительного разбора, поэтому разработчик может увидеть её первый раз на планировании, при необходимости — задать уточняющие вопросы, и успешно с ней справиться. Второй класс задач требует особого отношения: их нельзя просто скинуть на разработчика, потому что решение не очевидно, или кажется сложным, или делать придётся так много, что за один спринт не уложиться и лучше задачу разбить. Такая история уносится на грумминг.

Цель грумминга — получить из истории готовый набор задач, распределённый между сторонами разработки и спринтами. После такого разбора вся команда становится в курсе не только истории, но и принятого решения, у PO появляются примерные сроки реализации и понимание трудоёмкости грядущей доработки. Состав участников церемонии сильно разнится в зависимости от ситуации: вопросы оптимизации взаимодействия с БД касаются только беков, при обсуждении доработки админки не нужны мобильные разработчики, а стандарт веб-виджетов не требует присутствия всех беков. Но подключиться к обсуждению может любой желающий член команды.

В грумминге истории, о которой я буду рассказывать, участвовали все, кроме мобильных разработчиков. PO принесла команде интересную и амбициозную задачу: пользователям неудобно управлять шаблонами в трёх средах, поэтому нам нужна единая админка! Речь тут идёт о шаблонах уведомлений, которыми управляет специальный сервис, живущий в средах QA, STAGE и PROD. И проблема заключалась в неудобстве переключения между этими тремя средами и в их изолированности. Нет возможности перенести шаблон из одной среды в другую, синхронизация только руками, переход между средами — новый URL в браузере. Логичный вывод, к которому и пришла PO — единый интерфейс, один сервис для управления тремя средами вместо трёх полностью решил бы озвученные проблемы. Тем более, что в компании уже был такой успешный опыт. И мы начали думать над реализацией.

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

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

— Зачем нам единый бекенд?
— Чтобы объединить три админки в одну, потому что три ужасно неудобно.
— Это единственное решение?
— ...

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

Новое решение было выработано примерно за час; вся команда понимала, как будут работать сценарии использования сервиса; PO согласилась с тем, что мы таким образом добьёмся желаемого результата.

Сейчас я вспоминаю то время и понимаю, что эта задача была не единственной, которая вызвала лишние трудности. Команда на удалёнке гораздо чаще сталкивалась со сложностями на груммингах. И триггером, который меня очень сильно злил, служил вопрос «а какую проблему мы решаем?», звучащий примерно через 40 минут после начала от произвольного члена команды. И злил он не потому, что это глупо, а потому, что я в этот момент понимал, что не могу на него толком ответить. И очень хорошо, что он задан сейчас, а не ещё через 40 драгоценных минут. Но лучше, если бы ответ мы узнавали в самом начале, когда погружались в проблему.

Объяснение

Что же происходило? Почему было так тяжело?

На грумминге мы начали не с того: упомянув проблему (неудобства использования трех админок), мы сразу приступили к обдумыванию реализации решения (единый сервис). Решение было принято ещё до грумминга, не командой, а одним PO. Почему его изначально никто не подверг сомнению? Оно выглядело логичным. У PO была хорошая техническая база, она сама была разработчиком, внутреннюю структуру сервисов знала прекрасно и, очевидно, потратила немало времени и сил на обдумывание принесённой истории. Поэтому формулировка «.., поэтому нам нужен единый бек» была принята. Позднее начались сложности, ведь в головах членов команды не было того же пройденного пути и того же контекста задачи, что и у PO. Принесённое извне решение, сталкиваясь с трудностями, не находило поддержки в команде, и совершенно не хотелось искать пути реализации, потому что на самом деле мы не считали его правильным. Оно не рождалось в пылу дискуссии и пинг-понга из аргументов разных членов команды. Было ли оно плохим? Нет. Сейчас я понимаю, как можно было встроить его в наш сервис. Но тогда не понимал. Не понимала и команда. Мы считали правильным другой путь развития, на который и получилось попасть, сделав шаг назад благодаря тому диалогу с техническим руководителем.

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

А может быть, дело совершенно не в этом, и ценой хорошего решения как раз и были те три неудачных грумминга? Может быть, именно они добавили нам понимания проблемы и наших возможностей? Я считаю, их можно было избежать. Изначальный рассказ о проблеме загнал нас в определённые рамки, и в них проходили все дальнейшие рассуждения. Хочется сказать, что мы стали жертвами фрейминга. Ууу, эта злая PO издевалась над командой. На самом деле PO, как мне кажется, оказалась в той же самой ловушке: перед ней был успешный пример соседнего сервиса, развивающегося по готовой схеме, а наши потребности казались очень похожи. Единственное, что отличало её от нас, это эмоциональная привязанность к решению, выросшая в ходе предварительной работы и осмысления. Именно поэтому она его защищала, а мы были настроены скептически.

При чём тут удалёнка?

Как иной режим работы повлиял на наши способности понимания проблем?

Позвольте начать с аналогии. В детстве мама мне говорила «не кусочничай, хочешь есть — поешь нормально». На удалёнке мы все невольно начали следовать этому совету в отношении потребления информации о рабочих задачах. Раз в неделю случался полноценный обед (грумминг), на котором мы получали большую порцию информации за короткий промежуток времени. Причём часто это оказывалась первая порция по этой теме. В офисе всё было иначе. Часть общения PO с бизнесом соседних команд происходила прямо на рабочем месте; когда мы ходили выпить кофе, то обсуждали интересные баги и идеи; брошенное в сердцах ругательство после очередной непростой встречи по планированию интеграции завязывало разговор; то есть команда всё время получала кусочки информации об окружающих делах и проблемах. Таким образом, к груммингу мы подходили уже каждый с собственным представлением о задаче. Мы почти никогда не слышали о теме первый раз на грумминге. И обязательно в первые минут десять мы выравнивали свои представления о предстоящем предмете обсуждения. Удалёнка убрала все эти случайные перекусы, оставив только грумминг, блюда для которого PO готовила в одиночку.

Получается, на грумминге PO и остальная часть команды оказывались во власти совершенно разных контекстов:

  • PO успевала подумать, поискать референсы и даже, возможно, прикипеть к какому-то решению. ("Тому, кто занимается моделированием и проектированием программ­ных систем, нельзя слишком привязываться к своим собственным идеям." Эрик Эванс в книге "Domain - Driven Design")

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

Что можно сделать?

Удалённый режим стал неотъемлемой частью нашей жизни: одну коллегу я так и не успел увидеть вне зума, она уволилась раньше, чем мы пересеклись. Так что с такими ситуациями нужно уметь справляться, ведь сам по себе информационный разрыв между бизнесом и разработкой никуда не денется. И вот что мы предприняли в своей команде:

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

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

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

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


  1. SlimShaggy
    20.01.2022 18:36
    +3

    Откуда у вас взялись две "м" в слове grooming?


    1. alexey_and_kazakov Автор
      21.01.2022 10:19
      +1

      Поиск по внутренней вики показывает 231 результат по слову "грумминг" и лишь 169 по слову "груминг". Видимо, какое-то общее искажение.

      Спасибо, что указали на ошибку! Исправлюсь.


  1. cross_join
    20.01.2022 20:47

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


    1. alexey_and_kazakov Автор
      21.01.2022 10:33

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

      А технические сложности, конечно, были в обоих решениях.


  1. dimalu85
    20.01.2022 21:10

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

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

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


    1. alexey_and_kazakov Автор
      21.01.2022 10:37

      А скажите, пожалуйста, насколько спроектированное решение должно приходить в команду имплементации? Вплоть до классов-интерфейсов или что-то более верхнеуровневое?

      Очень любопытно, потому что не приходилось работать в таком ключе.


  1. Racheengel
    20.01.2022 22:09
    +5

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

    В процессе кроме планинга, появился и груминг. А теперь и пре-грумминг.

    Это какой-то новый сленг или так сейчас принято? :) Ну, типа "афтар пеши исчо", как раньше было?


    1. alexey_and_kazakov Автор
      21.01.2022 10:43
      +1

      А как вы называете эти встречи?

      Я сам люблю заменить англицизм русским словом, но в профессиональной среде самое важное - одинаковое понимание терминов всеми участниками обсуждения, т.е. строгость. И вот я уже не обращаю внимания на "груминг" и "ретро". А про всяческие "кролик", "ручка", "борда", "стата", "фриз", "лок", "джоин" и прочее и говорить не приходится :)


      1. vectorplus
        21.01.2022 11:47
        +2

        Сджойнил два датасета, а они не матчатся... )


      1. Caraul
        21.01.2022 20:34

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


      1. Racheengel
        21.01.2022 23:28

        Обычно митингами называем, как и все годы тому назад :)

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

        А ретро у меня лично ассоциируется со старыми ламповыми компами и играми, типа спектрумов с амигами)


  1. alexander222
    21.01.2022 07:55
    +7

    По заголовку ожидал что в статье будет о стрижке собак, даже стало интересно как это делают удаленно


  1. K0styan
    21.01.2022 12:08

    Мысли правильные, вот только при чём тут удалёнка? PO и разработка, даже PO и системный аналитик всегда будут в разных контекстах, даже сидя за одним столом. Да, если они рядом, будет этакая взаимная диффузия этих контекстов - один что-то услышал краем уха, другой "вслух подумал", но всерьёз на эти процессы полагаться нельзя. Всегда надо дополнительно выравнивать контексты, включая helicopter view.

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