Как стать автором
Обновить

Комментарии 26

Прочитал и получил эстетическое удовольствие. Вы молодцы однозначно.

Начну с самого простого вопроса: почему мы вообще пришли к ежедневным релизам? Ответ очевиден: бизнес хочет «фичи на бою». Таким образом он оценивает динамику разработки. Для разработчиков это тоже удобно. Если система построена на ежедневных релизах, а значит, на небольших изменениях, намного проще и быстрей находить проблемы

Не нахожу убедительными оба ответа.


"Бизнес хочет «фичи на бою». Таким образом он оценивает динамику разработки

Я не понимаю что это значит.


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


Больше релизов != больше денег


Если система построена на ежедневных релизах, а значит, на небольших изменениях, намного проще и быстрей находить проблемы

Больше релизов = больше багов.


И ведь действительно: в погоне за частотой релизов и скоростью вы неизбежно их создаёте, а потом героически преодолеваете.


И вроде бы все довольны: бизнесу приятно видеть бурную деятельность "на все деньги", менеджменту приятно набивать KPI (раздробив один нормально оттестированный и продуманный крупный релиз на десятки маленьких), но все равно попахивает.


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


xxx: Посмотрите на этот чудесный восходящий график! В этом месяце мы закрыли в 10 раз больше тикетов, чем во всем прошлом! Мы эффективны!
yyy: В прошлом месяце тикетов было в 20 раз меньше

Больше релизов = больше багов.
в погоне за частотой релизов и скоростью вы неизбежно их создаёте

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

Но слишком эффективным менеджментом тут за версту пахнет.

Не вижу причин увеличения количества багов от того, что вместо 1 деплоя на 10 фич стало 10 деплоев по одной

Обычно погоня за количеством+скоростью заканчивается примерно так:


feature1Output(){
    return "whatever business wants";
}

feature1OutputTest(){
    return assertEquals("whatever business wants", feature1Output());
}

А потом они уходят (с)


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


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


Утрирую, конечно. На мой взгляд сама гонка за количеством релизов — ложная.

Здесь релизят не быстро, а часто. А требование делать это часто вполне себе обосновано как с технической, так и с продуктовой стороны.

Есть некоторые недостатки, да. Недостатки есть и у больших релизов. На которые тоже может оказываться давление: график поставок определен, список обязательных фич тоже. И нужно успеть :)

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

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

Большие фичи, бьются на несколько частей, и завозятся на прод поэтапно.

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

И ведь действительно: в погоне за частотой релизов и скоростью вы неизбежно их создаёте, а потом героически преодолеваете.

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

Если бизнес оценивает KPI в кол-ве задач это грустно. Но это не наш случай. 

У нас каждый день есть небольшие улучшения которые выкатываются на продакшн

можете привести пример такого улучшения, которое вы делаете за день?


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


пользователям точно нужно, чтобы каждый день их UX улучшали?


пользователи точно считают эти ежедневные изменения улучшениями?


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

'можете привести пример такого улучшения, которое вы делаете за день?'

ежедневные релизы это больше про независимую множества разных улучшений по мере готовности. Что не надо всем принудительно синхронизироваться и выводить 7 фичей дней во второник. А каждый может вывести фичу в свой день

так понятно, спасибо

Подскажите пожалуйста, как организовано управление проектом? Если два релиза в день, то как вы их планируете? Как происходит оценка фич/задач? Как вы разбиваете фики на таски так, чтобы каждый день релизиться?

Как вы разбиваете фики на таски так, чтобы каждый день релизиться?

Чтобы релизиться каждый день, не обязательно всё делить на маленькие фичи. Вот на скрине иллюстрация того, как каждый день есть что релизить, но что-то делается за 30 минут, а что-то 4 дня.

Как вы измеряете продуктовые метрики как зависимость от фичей?

Добрый день!  Есть дашборды с продуктовыми метриками, гипотезы проверяются а/б тестами.

Вы не поняли вопрос.
У вас есть фича, вы хотите проверить изменения показателей (например: воронки регистраций и продаж, которые могут состоять из нескольких этапов).
Для этого вам нужно делать А/Б-тестирование. Причем оно должно идти достаточно долго, чтобы график стабилизировался. Если фича не особо популярна, то ветку должны запускать на большой аудитории (и такой же объем в контрольную группу). Плюс проблема плохих результатов.

АБТ эксперимент из ветки — это исключение. Обычно новую фичу закрывают флагом и открывают во время АБТ.

Суть моего вопроса от этого не меняется. Да и ответ я знаю: там так никто не оценивает влияние фичей на финансовые показатели. Но зато «измеряют» эффективность линейного персонала.

Финансовые показатели — это супер нечувствительная метрика. Есть, конечно, исключения типа изменений, связанных с рекламой или если сайт занимается продажами. Но в массе свой, например, более удобный способ написания комментов на Хабре скорей всего не прокрасит деньги, но может прокрасить time spent.

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

Мой вопрос все же относится к контексту проекта.

Согласен: чувствительность - показатель производный от времени эксперимента и количества пользователей. Отсюда и другие метрики.

Но суть тут в другом, финансовые и около-финансовые показатели могут как улучшиться, так и ухудшиться: из-за особенностей ui/ux, багов или нагрузки, не говоря уже о влиянии функционала.

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

Но как разработчик, я против них :) Меня они демотивируют.

А можете, пожалуйста, немного подробнее рассказать про скриншот тестирование? Какой сервис используйте для сравнения скриншотов? Насколько удобно апрувить и коммитить ожидаемые ченжи? Как это встроено в CI? Как это отображается в мерж-реквестах?

Не знаю, что за решение использует автор, но лично я смотрю в сторону Loki.

По поводу удобства не знаю, можете предварительно оценить по этому докладу (где-то в середине будет демонстрация Loki)

Да, конечно! Большинство скриншот тестов, делаем с помощью playwright и @playwright/test.

Для скриншот тестов есть билд в CI (teamcity). Билд автоматически запускается на каждой ветке. В нем сначала поднимается витрина компонентов (react-styleguidist), а потом playwright заходит на страницы компонентов и фоткает все примеры. Внутри @playwright/test есть хелпер toMatchSnapshot который сравнивает скриншоты и в случае если они не совпадают создает картинку с дифом. В playwright v1.16.0 завезли html репортер, мы еще не успели его прикрутить и смотрим дифы картинок в артефактах в CI если что-то пошло не так.

Для обновления скриншотов в CI предусмотрен отдельный билд, который можно запустить на нужной ветке. Это те же тесты, но с флагом, который обновляет скриншоты при необходимости. Далее билд с новыми картинками делает комит в ветку. В пул-реквестах видно что поменялось тк картинки хранятся рядом с кодом под git lfs.

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

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

А как вы решаете такую проблему?:

Пользователь открыл вкладку с SPA и ушел в гибернацию на пару дней. А в это время SPA зарелизился. После включения компьютера, у пользователя открыт старый код со старыми предзагруженными ресурсами. И пока он сам не сделает F5 - ресурсы не перезагрузяться.

Я не ТС, но могу ответить как было сделано у меня в разных проектах:

  • принудительная перезагрузка после суток работы (не было времени чинить утечки памяти, каюсь)

  • По хедерам респонсов. Пока юзер не получает реквестов на старую страницу - она остаётся такой, какой есть

Зарегистрируйтесь на Хабре, чтобы оставить комментарий