Чеклисты шагают по планете

Назвался практиком полезай в кузов.

Замечено (невооружённым глазом), но вооружённым мозгом место для оптимизации. В этом месте всегда есть потери. Это место называется “переход этапов/передача результатов работ”. РП - фича. Она же объект, который должен менять состояния.

Состояния фичи:

  1. создана
  2. готова к разработке (ready for dev)
  3. взята в разработку (work in progress)
  4. готова к ревью (code review)
  5. готова к тестированию (ready for test)
  6. готова к слиянию (ready for merge)
  7. готова к доставке на стенды (ready for delivery)

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

Почему я не хочу разбивать чеклист на отдельные чеклисты по этапу? Потому что тогда они будут перезатираться, и ты видишь текущий, но не можешь проверить, что весь прошлый этап пройден правильно. Либо тогда придется в каждом новом критичные штуки из предыдущего дублировать. Но там ещё начнётся “не забудьте поменять чеклист, когда фича поменяла состояние”. А с глобальным чеклистом он один раз подставляется в описание (желательно автоматически) и будь добр заполняй. И взаимный присмотр потеряется, если чеклисты разделить.

Заготовка чеклиста

Ready for development

  • в задаче описаны сценарии использования (use case)
  • в задаче описаны технические решения по реализации
  • из описания задачи понятно, что нужно сделать
  • задача содержит все необходимые спецификации (схемы, контракты)

In progress

  • задача переведена в In progress
  • создана ветка в формате xy-123456-new-feature
  • задача проверена по чеклисту ready for development
  • коллеги проинформированы о смене статуса

Сode review

  • сделан pull --rebase на dev (конфликты отсутствуют)
  • добавлены тесты
  • добавлена документация (doc, moduledoc, комментарии)
  • коммиты содержат номер задачи (“[#1234567] Что сделано”)
  • CI успешно пройден
  • задача выполнена в полном объеме
  • задача проверена на стенде разработчиком
  • задача переведена в Code review
  • коллеги проинформированы о смене статуса
  • замечания в MRе отработаны (треды закрыты)
  • ревью проведено (апрувы получены)

Ready for test

  • если добавлена новая ENV переменная, она добавлена на стенды (через [задачу на devops](ссылка где создавать задачу))
  • задача переведена в Ready for test
  • понятно как тестировать (кейсы описаны)
  • понятно как разворачивать (все ссылки приложены в задачу)
  • ревью пройдено (весь прошлый чеклист заполнен)
  • коллеги проинформированы о смене статуса
  • MR в актуальном состоянии (нет конфликтов, нет отставания от базовой ветки)

Ready for merge

  • подготовлены ветки в dev и в релиз
  • ответственный смержил ветку в dev (достигнута договорённость, кто это делает разработчик или QA)
  • задача переведена в Ready for merge
  • проверено, что предыдущий чеклист успешно пройден
  • сообщение в релизный чат отправлено
  • задача закрыта

Формулировки и список пунктов будет уточняться с интересантами (непрерывно). Это меня волнует чуть меньше. Меня волнует что получилась простынь, даже чисто визуально. Как вы думаете такой объём испугает людей? Или какая разница, надо объяснять где чья часть и зачем всё это нужно. “30% на смерть проекта”!

Update. 19.09
Почистила заготовку чеклиста, не такая уж и простынь. Всем спасибо за комментарии.

Добавлю контекста. Я не целюсь в инженерный процесс “фичи” целиком. Давайте фичёй будет называться в нашем случае user story в таск трекере. В которой может быть одна и больше задач. Эти задачи могут быть назначены на разных разработчиков (в том числе разных по стекам: фронтенд, один бекенд, другой бекенд). Движение фичи по состояниям внутри таск трекера я в чеклисте затрагиваю только потому что “вроде все понимают, что нужно менять статус задачи (когда дороге к готовности мы продвинулись на очередной шаг), но банальные вещи проще всего забыть в потоке внешних раздражителей”. Таск трекер, как общедоступный операционный моделер сотрудника, я не вижу. Потому что это место куда смотрят менеджеры. Но работы делаются не там. С того момента, как фича/задача описана и назначается на исполнителя (разработчика), он уходит в свой операционный моделер (в репозиторий конкретного сервиса в git). Поэтому кстати и забывает двигать “карточки по доске”. И его пинает скрам мастер на дейли каждый день. При этом репозиторий это место работы ближайших смежников участвующих в разработке (QA, релиз менеджер, системный аналитик). У всех у них есть доступ, и все они на некоторых состояниях через этот моделер взаимодействуют с разработчиками.

Почему я хочу сделать чеклист именно в репозитории? Потому что 1) я могу его сделать (никого не спрашивая, не уговариваю, не ходя по кругам бюрократии) 2) его легко будет редактировать 3) он доступен внутренним интересантам, при взаимодействии которых я вижу регулярные косяки 4) там есть весь функционал из коробки (шаблон чеклиста подставляется в каждый MR, его всем кому нужно видно, видно кто делал изменения, когда, этот шаблон дешёво растащить по всем командам).

Как в моей голове выглядит по интересантам. Бизнес аналитик создал сторю. Внутри системный аналитик создаёт несколько задач на разработчиков. Первый порог - это описанная задача, которая уходит разработчику. Порог это потому что она может быть плохо описана, там не хватает разных штук в голове у системного аналитика (понимания нашего ПО целиком, мысли о нужных командах для реализации, внимательности и т.п.). На этом пороге, если работу аналитика не проверить, уже будет хождение кругами. Причём оно может быть даже на два шага вперёд. Если разработчик считает, что “вот ТЗ, моё дело сделать по ТЗ”. Такое тоже есть. Разработчики разные. Поэтому фактически первый чеклист (ready for development) это заход на то, чтобы разработчик перед тем как первую строчку кода писать, взял и проверил задачу. Сходил к аналитику. Предлагать ли аналитикам этот чеклист как этап их работы? Я не знаю. Его можно конечно скопировать в описание задачи в таск трекере, или пусть себе на стикер на монитор приклеют. Одинакового удобного решения для всех нет. Поэтому я делаю ставку, на “возвратное научение”. Кому понравится, куда-нибудь себе сохранят. Показать им, что “не обижайтесь, вы классные ребята, но мы вам больше не верим”, я думаю покажу. Ожидайте, что разработчики будут вам возвращать задачи на доработку, если они плохо описаны. Есть повод подумать о том, чтобы самим приходить показывать описание разработчикам, до того, как сказать “задача готова”. Статуса такого кстати в таск трекере нет. Я много раз про него заикалась, но не дотащила. Может быть надо дотащить.

Дальше три шага делает разработчик: разработку, готовность для ревью и просьба о ревью (к коллегам по стеку сходит), готовность для тестирования. Разработчик проверяет сам себя, перед тем как пойти к коллегам за ревью, и к QA с просьбой о тестировании. По чеклисту Ready for test QA может проверить разработчика. И по идее вынужден будет проверять, потому что задача не всегда прилетает на тестирование с пылу с жару.

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

Предфинальное состояние это выливание на стейджинг. Ready for merge тут задействованы разработчик и QA, как подготавливающие материалы. И релиз менеджер, как тот кто потащит дальше. Т.е. опять разработчик и QA проверяют себя, что не прошляпили то, что должно быть готово. Релиз менеджер может проверить за ними непосредственно перед доставкой на стенд. Я думала о том, что можно ещё сэкономить внимание релиз менеджера и добавить пункт “чеклист пройден” в сообщение в релизный чат. Человеку, который пишет в чат это ещё раз обращает внимание на его чеклист. Релиз менеджеру по идее экономит лишний поход в репозиторий. Но там тоже будут возвратное научение. Написан про чеклист, а сам его не прошёл. Кто ты после этого?

Кого потеряли? Менеджеров. Бизнес аналитик не имеет доступа к репозиторию (слава богу). Скрам мастер. Продакт. Для них есть таск трекер, который по моему чеклисту должны не забывать обновлять. Т.е. они стоят в начале цепочки (появилась потребность в фиче, она вытащилась из беклога, отдана в какую-то команду разработки, бизнесовое описание составлено). Дальше фича попадет в черный ящик разработки. Из черного ящика, выезжает готовая фича в релизный чат (если мы внутри ящика не лажаем, но на это и ставка). На стейдже проверяет финально кто-то из этих менеджеров. И своей царской волей позволяет отправить наш ящик в продакшен к людям. Опять же идея в том, что если внутри команда разработки работает внимательно и слаженно, то возвратов из релизного чата уже не должно быть (в действительности). Либо должно быть крайне мало (в реальности).

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

6 лайков

Это альфы и подальфы, можно ж дробить до бесконечности.
Если табличный формат – простыни людей не пугают, глаз банально привыкает, где что в таблице находится.
Пугает слово “этапы”, ибо даже в водопаде с этапа на этап рисуют сейчас не вертикальный переход, а диагнональненкий, намекая, что нет жёсткой смены этапов. Можно говорить про рабочие процессы вместо этапов, легче пойдёт, не так жёстко (то есть от языка работ переходить к языку методов и полноты прохождения процедур, а не началах-окончаниях работ).

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

3 лайка

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

Это список с галочками. Причешу, покажу картинкой. Фактически я хочу запихнуть чеклист в описание merge request. А там markdown. По идее можно и таблицей сделать. Галочки вроде чуть привычнее.

Вычеркиваем, это пометка для себя и то по старой памяти.

Должно быть состояние - список под галочки. Такое примерно.

Ready for test

  • апрувы получены
  • задача переведена в RFT
  • конфликты в MRе отсутствуют

Автоматически. Но история зачем? Проверить кто конкретно галочку ставил и когда?

Можно списком с галочками, но по опыту – менеджеры хотят на такое пачками смотреть, оценивать состояние кучи объектов. А отдельный лист – ну это как старинные системы, где для редактирования строки таблички надо ткнуть в строчку, выскочит плашка, ты её редактируешь (таблица при этом полностью закрыта! Подглядеть, что там у соседей нельзя!), потом жмёшь кнопочку “ОК” – ура, строчка отредактировалась. Сегодня это моветон, делают инлайн редактирование.

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

Поэтому – таблицы. Хотя в таблицах может быть только свод из листов с галочками )))

Но это я забегаю вперёд, пока же хоть как-то надо сделать )))

2 лайка

Чтобы иметь такую возможность.

2 лайка

тезисно:

  • в тексте не рассмотрена целевая система в момент эксплуатации (надеюсь, что это просто в текст не попало, но где-то в других местах в экзокортексе топикстартера такое рассмотрение проведено: оно может сильно добавить всяких ролей, которым интересно, что там с фичей происходит (и, следовательно, сценариев использования чеклиста)) и в целом набор верхнеуровневых альф (для тех же целей - выявления ролей, которым есть дело до рассматриваемой фичи)
  • в выборе формата (хотя это далеко не первый вопрос, который я бы рассматривал - но, будем считать, что с предыдущими / причинными / влияющими на формат чеклиста вопросами топикстартер разобралась (на что указывает disclaimer, что смысловая часть чеклиста интересует меньше, чем формат)) один из краеугольных камней - это сценарии использования, а другой - стиль работы команды (в широком смысле - всех тех, кто будет этот чеклист использовать)
    • по поводу сценариев использования: они не выявляются без определения ролей, которые будут этот чеклист использовать (см. выше), и их не удастся выявить заранее (они будут меняться как по количеству / набору, так и по составу / содержанию)
    • по поводу стиля: там возможны самые разнообразные варианты, начиная от “да разве ж это простынь - вы простыней не видели” через “у нас канбан-доска, где каждое состояние - отдельная колонка, и мы по ней фичи-таски прогоняем, и чеклист(ы) нужно вписать в этот стиль” до “всё, что не помещается на экран смартфона без скроллинга - не рассматривается”. Другими словами, получить вменяемые рекомендации извне (от участников обсуждения, не вовлеченных в контекст) сложно
  • чеклист - это ж фрагмент инфопотока / инфообмена, связанного с фичей и проектом ее создания (а не сферический чеклист в вакууме). Например, ответы на вопросы чеклиста хорошо бы подкреплять / свидетельствовать рабочими продуктами (а значит, связь с этими рабочими продуктами следует предусмотреть - что накладывает дополнительные ограничения на формат / способы реализации чеклиста)
  • а еще чеклист (или набор чеклистов) должен поддерживать сценарий непоследовательного прохождения состояний / возврат к предыдущим состояниям - Анатолий указал на это в одном из предыдущих комментов (и это тоже накладывает ограничения на способы реализации чеклиста)

Резюмируя: поскольку с первой попытки всё равно создать качественный чеклист вряд ли получится (а даже если получится - то это ненадолго, он будет эволюционировать, и на это закладываемся изначально), рекомендую применить подход release early, release often (а хоть бы и с тем вариантом, который вы опубликовали), а дальше “подкручивать” по ходу дела. Некоторые гипотезы “куда смотреть при подкручивании” я привел выше, другие - в материалах курсов, начиная с “Рациональной работы”, в количестве :slight_smile:

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

5 лайков

Девять Чек-Листов Наталья отдала людям, семь — Гномам. во всех них была заложена часть силы СМ и воли Натальи; ещё три чеклиста были написаны эльфами без участия Натальи и не несли в себе силы СМ.

Но все они были обмануты, ибо был создан еще Один Чеклист, чтоб править всеми, Он главнее всех, Он соберёт всех вместе И заключит в СМ.

5 лайков

А это тоже будет в “следующей серии” (третий семестр)? :sweat_smile:

Хаха) Так-то всевидящее Око надзора за исполнением чеклиста ещё предстоит изобрести.

Так, гипотеза целевой системы есть. Давай теперь рассмотрим ее как черный ящик в надсистеме!

2 лайка

Мой опыт показывает, что полезно разделить на две альфы и отдельно (но свзязано) думать про фичу и исходный ход.

фича: готова к разработке → взята в разработку → реализована
исходный код: задача поставлена → код написан → pr принят → код залит/прошивка выпущена.

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

3 лайка

Спасибо! Я добавила контекста в пост. Фактически меня, как разработчика, интересует движение фичи/задачи в виде исходного кода (из пустоты и до продакшена). При этом фича меняет своё состояние в такс трекере (для менеджеров). И туда я не лезу, кроме как с “поддержкой актуальности состояния” с помощью моего чеклиста.

Насчёт команд. Над фичей работают разные разработчики. А вот над задачей работает один разработчик. И экземпляр чеклиста он получит рядом со своим кодом для каждой конкретной задачи. Я верхнеуровнего различий в разработке не вижу (процесс один и тот же). Какую-то специфику допишем/исправим для каждой команды, если будет такая потребность. У меня идея в том, что шаблон чеклиста получается отдельный на каждый сервис. Его там может отредактировать любой разработчик этого сервиса. Дальше соглашение вида “у нас один шаблон на все сервисы фронтедеров” или “общий шаблон на фронтенд, но каждый сервис может его кастомизировать” принимается внутри конкретных команд. Возможны любые докрутки, лишь бы скелет не потерялся.

Если я правильно поняла, то чек-лист привязан к задаче/фиче/РП. Но вот галочки по мере прохода будут ставить разные исполнители или все-таки кто-то один? Если разные, то там же тогда нужно контролировать, что никто по ходу не поставил галочку просто так. И как разделить кто какие галочки ставит? А ещё момент с тем, что с одной стороны ты просто состояние проверяешь (кто-то что-то сделал), а с другой ты что-то делаешь и галочку ставишь.
В общем меня беспокоит достоверность информации в чек-листе, если он предназначен не только для самоконтроля.

1 лайк

“Кто виноват, что не работает? Разработка!” Это чеклист на задачу, исполнитель у задачи - разработчик. Исходно заполняет разработчик большую часть (кроме последнего куска). Но там тоже как договоримся.

Контролировать нужно. Если на какой-то чеклист будут другие люди, напишу в скобках (ответственный и тегнуть человека). Но это уже вопрос культуры работы. Т.е. мне нужно понимание, что это не бюрократическая бумажка. Я ведь там не написала ничего нового, все эти действия должны итак делаться. Но я допускаю, что не делаются по двум причинам: 1) просто забываешь в суматохе 2) отсутствует кусок культуры в голове (значит этому нужно учить и проверять, что этот кусок в голове появился).

При этом идея “полечить процесс” к взаимной выгоде. Для разработчика первый чеклист это возможность защититься от недостатка профессионализма аналитика. С первого по третий чеклисты это возможность защититься от собственного непрофессионализма и/или невнимательности. При этом не упасть в грязь лицом перед коллегами. В сумме это взаимный присмотр. Вот ты собираешься отдать свой код на ревью. Это твой внешний запрос к коллегам по команде. Они придут так или иначе смотреть код и тут же увидят этот чеклист. Прояви уважение к людям, которых ты отрываешь от их работы. И прояви уважение к себе (“выбрось мусор”), сделай нормально подготовительную работу. Чтобы не переделывать. Не приходить три раза из-за своих помарок. Тоже самое при заходе на тестирование и при выпуске очередной версии. Приятно же выйти к коллегам чистым и красивым? Я чеклистом выметаю мусор из-под ковра. И убираю отмазки: “ой, я забыл”, “ой, я не знал”, “ой, меня торопят, я не соображаю”. А дальше выбор или ты уважительно относишься к себе и людям, и все это видят. И ты красавчик) Или “Шарик, ты балбес” и тебе на это постоянно будут указывать. Ведь каждый принимающий помимо ветки с кодом увидит чеклист. И если галочки стоят, а действия не сделаны, ты всё равно получишь неодобрительный взгляд от коллеги и замечание. А там развилка “сначала учить, потом мочить”. Надо всем продать культуру, надо всех научить пользоваться, надо будет повторно ходить к тем, кто с первого раза не оценил/не понял. Но по идее это социальная история. Чеклист один и тот же на всю команду сервиса (там всегда несколько человек), и если вокруг тебя люди в состоянии заполнять аккуратно, а ты один балдес. То либо сам уйдёшь, либо подтянешься под свою “банку с огурцами”.

2 лайка