Байка для оруженосца — 8. Жизненный цикл задачи на изменение кода.

Дисклеймер.

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

———————————————-

Сегодня в кухоньке были все свои. Чеширский, Заяц с Шляпником, Соня и, конечно, Королева. Небольшой «чай-брейк» после релиза. Команда всегда делала небольшие паузы между большими блоками задач. Только Армигера не было. Его послали в небольшую командировку. Порулить в несложном проекте с чужой командой.

Соня, как всегда, дремала, лениво перелистывая очередную статью по тестированию, Шляпник с Зайцем азартно вели один из вечных споров типа «Пробелы-Табуляции», иногда скатываясь к проблемам генерации идентификаторов, а Королева с Чеширским просто пили чай. 15 минут это немного. Но и не мало.

— Я не опоздал? — с порога спросил Армигер.
— Заходи, заходи. Пока чай льдом не покрылся. Сегодня мы пьем какой-то редкий сорт, который Чеширский привез из Китая. — И Шляпник наклонил чайник над кружкой с эмблемой SQADays-10.
— Позавчера сам собирал. На плантации старого приятеля. Цените. — Поистине, связям Чеширского Кота оставалось только позавидовать.

Армигер порывался что-то сказать, но на него цыкнули. Все синхронно подняли чашки, сделали по глотку, и на лицах отразилась гамма чувств.

— Ладно, давай, выкладывай, а то тебя разорвет.
Армигер вытащил листочки с распечатанными жизненными циклами задач (воркфлоу).
— Вот. Глядите, как можно все тщательно настроить в Jira, — начал Армигер. — Вот по этой схеме мы всегда знаем, в каком состоянии находится доработка.
Шляпник взял в руки листок с безумной паутиной статусов и переходов. Покачал головой и показал листок Зайцу. Зайца перекосило. Он в сердцах помянул 21-е прерывание и барабанный принтер со снятым кожухом.

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

— Нет, но мы собираемся так настроить. Парень новенький принес.
— Соня! — гаркнул Заяц.

Соня вышла из медитации и начала говорить речитативом:
— Давние, давние, давние исследования юзабилити показали, что добавление лишнего статуса воркфлоу приводит к ухудшению понимания не на какое-то значение, а в разы. Умножение там происходит. Непонимания.
— Насколько? — голос Шляпника походил на голос ласкового дознавателя в подвалах Веселой башни.
— Не помню. Гуглить надо. 1.2-1.3 раза. Плюс примерно квадратично растет число переходов. А это тот же коэффициент.
— Грубо возьмем, что добавление трех статусов приводит к проблемам с пониманием в два раза. Увеличивая число статусов задачи с пяти до двадцати трех, мы увеличиваем проблемы с восприятием в 60 раз. 60 раз, Карл!

— Иначе говоря, когда ты добавляешь хотя бы один статус к жизненному циклу задачи, ты крадешь у фирмы тысячу долларов в год, — прокомментировал Заяц.
— Ну, не надо так резко, — вмешался Кот.
— Так много? — удивился Армигер.
— С учетом прогрессии, озвученной Соней, сумма еще больше, — вздохнул Кот, — Гораздо, гораздо больше. Просто 1000 долларов ты еще можешь себе представить, а истинные суммы потерь — нет. И дело даже не в том, что на перевод из статуса в статус тратится время. Переключение из контекста в контекст — это гораздо большие потери.
— А потери на управляемости так вообще зашкаливают, — добавила Королева. — Чем меньше статусов у задачи, тем быстрее идет проект. Но всегда есть «но».

— Наименьшее число статусов задачи… — Соня сделала паузу.
— Два. Естественно, два, — синхронно ответили Заяц с Шляпником.
— Но! Но! — Соня проснулась и была в ударе. — Это отлично работает для волка-одиночки. А скажи мне, родной, как мне проверить выполнение какой-то задачи? Как я узнаю об этом? Я тестировщик! Кстати, меня за это уважают… Как я узнаю, что какую-то из решенных задач… — Соня провела глазами по комнате, и Заяц с Шляпником прижали уши.
— Не стесняйся. Мы знаем, что делаем ошибки. Ты ищешь их быстрее, чем мы. Нам нравится работать с тобой в паре. — Было непонятно, кто это сказал, но все всё поняли.
— Так вот. Какую из задач мне тестировать? Нужен новый статус, — продолжила Соня. — И этот статус мне нужен! Нужен мне!
— Очевидно, — резюмировал Шляпник.
— Без вариантов, — отрезал Заяц.

— Ладно. Три минимально. Хорошо, я понял, что много — это много. У нас именно эти пять. Почему? — спросил Оруженосец.
— Есть давление снизу и сверху, — Кот сделал глоток чая, — мы должны использовать минимально необходимое. Н-да… Коллеги, расскажите, что вы об этом думаете.

Королева взяла слово:
— Каждый лишний статус — это потери. Большие потери. И нужно понимать, почему вы на эти потери идете. Мы идем. Со статусами «New» и «Close» — все понятно. Они просто нужны. Соне нужен статус «Resolve» как информация о необходимости тестирования. Кстати, мне этот статус тоже совершенно необходим, для отслеживания загрузки рабочих центров. Если в среднем в этом статусе больше 20 задач на пять тестировщиков — очень вероятно, что у нас проблемы с тестированием. Очень серьезные. И с проектом в целом тоже. Показатель числа задач в этом статусе — это как температура. Если на градуснике 38,5, то что-то надо делать. Например, сменить градусник. Теперь «Assign». Этот статус показывает, что задача назначена в релиз. Можно еще указывать конкретного исполнителя, но в этом смысла нет. Сами разберутся. В конце концов, у нас работают взрослые люди. Это позволяет делать легкую фильтрацию задач, на которые менеджеру продукта уже не надо обращать внимание. Менеджер работает со статусом «New». Это его зона ответственности. Не разработчика.
— А «Open» (примечание: иногда называют «In work»)?
— А этот статус нужен, когда над кодом работает не один программист. И когда программисту не нужна нянька, чтобы отобрать задачу из релизного пула. А те, кому нянька нужна — у меня не работают. Мой час стоит довольно дорого, чтобы работать простым диспетчером.
Это была правда. Кроме чисто менеджерской нагрузки Королева еще ухитрялась писать спецификацию требований для десятка программистов. К счастью, в последнее время ей начала помогать Соня. Да и Шляпник с Зайцем иногда писали постановки.
— Перед тем как уйти в бранч, программист обязан перевести задачу в «Open». Это сигнал всем остальным программистам — не трогай, работаю! Или по-другому: этому больному лекарство уже дали. Не надо второй дозы.
— А если не переведет статус — бить. Больно. Ногами, — добавил Заяц.

— Угу, — сказал Шляпник, — меня как-то пригласили помочь с кодом в один из проектов. У них одну и туже фичу реализовали три разных программиста. Тремя разными способами. И спокойно залили это в транк. Потом туда заливали еще три недели. Тестирование у них было ограничением системы, и эту фичу протестировать не успели. И в один замечательный солнечный день прод сплясал джигу-дрыгу. Да так качественно сплясал, что заказчика вискарем отпаивали. А программистов спасло только то, что пока заказчик ходил за «Сайгой» на стоянку, программистов успели спрятать в серверной за железной дверью. Лихие 90-е, что ж вы хотите.
— И этих статусов вполне достаточно, — закончила Королева.

— Ага. «Assign» общий буфер для программистов, и именно общий — для снижения вариаций. Именно поэтому программист назначает на себя задачу сам. — Оруженосец по памяти перерисовывал ЖЦ команды на листок, делая пометки. — А почему для тестировщиков так не сделать? Тоже общий буфер.
— Смысла нет. Если случайно один и тот же код протестируют три тестировщика, то транку от этого хуже не будет. Иногда такие эксперименты даже нужно делать. Для замера качества тестового покрытия и снижения вариаций в описании дефектов. Тем более что в правильно выстроенном производстве у тестировщиков должен быть запас по мощности.
— Но, может быть, все-таки добавить статус «Отложено»?
Тут Заяц выдал фразу, которую в приличном обществе не произносят.
— Родной, — Королева была на удивление вежлива, — тебе же уже рассказывали о двух видах списков задач? — в конце фразы голос Королевы начал походить на шипение змеи.
— Э-э-э… да.
В разговор вмешался Шляпник:
— Если у нас список с недостачей, то…
— То у задачи нет вариантов быть отложенной, — Соня опять ушла в медитацию, но была в курсе всего. Как и полагается настоящему тестировщику. — Просто нет. Ее или отвергнут, или сделают. Без вариантов. А если список с избытком, то мы все равно вынуждены не решать часть задач. И первый кандидат на это — то, что «отложили».
— Не закрыть задачу сразу — это как положить дохлую кошку в багажник, — вставил Заяц. — «Может Пригодиццо».
— А через пару лет выкинуть со словами «Нэт, нэ пригодилось».

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

———————————

ЖЦ, разные типы диаграмм
lc-epc.JPG lc-uml.JPG

——————————————————
Что сказал Заяц

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

Оставьте комментарий

Вы должны войти, чтобы оставить свой комментарий.