Как часто выпускать с Lean / Kanban?


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

На мой взгляд, одним из самых больших преимуществ Scrum перед Waterfall является использование спринтов. Имея все наготове каждые 14 дней вы получаете короткие циклы обратной связи и можете часто выпускать. Однако, как я понял из чтения о бережливом производстве, с этим связаны некоторые затраты (например, время, затраченное на планирование спринта, встречи с членами команды и некоторые проблемы с поиском чего-то полезного для всех в конце спринта).

Lean / Kanban удалит эти отходы, но только ценой невозможности высвобождать их каждые 14 дней. Или я упустил важный момент? Ибо, в канбане, как вы можете одновременно работать над новыми задачами разработки и выпуском? Как убедиться, что вы не отправите то, что сделано только наполовину? И как вы можете проверить это должным образом?

Мои лучшие "решения / идеи" на данный момент:

  • не выпускайте часто и не допускайте отходов, связанных с исчерпанием новых задач разработки. Хотя на самом деле это не решение поставленного вопроса.
  • Развиваются в ветвях, а затем сливаются в основной ствол. Заставляет Вас поддерживать по крайней мере двоих ветви непрерывно внутренне.
  • Используйте некоторую интеллектуальную автоматическую систему маркировки, чтобы автоматически создавать только определенные готовые задачи, а не другие.

В качестве резюме, мой вопрос : Когда вы используете Lean / Kanban, можете ли вы часто выпускать без введения отходов? Или релиз часто не является частью Lean/Kanban?

дополнительная информация, относящаяся к моей компании : Мы используем Team Foundation System & Source Control и ранее имели некоторые плохие опыт в отношении ветвления и слияния. Можно ли решить эту проблему простым привлечением специалистов в этой области?

7 11

7 ответов:

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

Я предполагаю, что Вы читаете это блог о Kanban vs SCRUM и связанном с ним практическом руководстве?

И, отвечая на ваш вопрос, Да, вы можете часто выпускать с помощью Канбана.

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

Запрос клиента (или владельца продукта или подобного) на функцию в работающей системе-это то, что запускает процесс.

Запрос-это сигнал, который отправляется на развертывание. Развертывание найдите тестируемый элемент со свойствами, соответствующими запросу. Если их нет, вы пишете тесты и смотрите на разработку, если есть слот для разработки, который можно использовать для реализации чего-то, что удовлетворяет тест. Когда разработка завершает свою разработку (возможно, сначала нужно найти подходящий анализ и т. д.), тест выполняет свою проверку, а развертывание развертывается.

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

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

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

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

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

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

Если бы я запускал Kanban для новой версии a проект, я бы использовал аналогичную стратегию, но сгруппировал все связанные проверки как "функцию", перенеся функцию en masse в ветвь выпуска, как только функция была сделана, а затем выполнив дополнительное модульное/интеграционное/приемочное/регрессионное тестирование в ветви выпуска, прежде чем удалить выпуск с этой функцией. Обратите внимание, что ключевой концепцией Kanban является ограничение незавершенной работы, поэтому я могу ограничить свою команду работой над одной функцией одновременно (это, вероятно, будет несколько рабочих элементов/пользовательских историй).

Это больше, чем просто управление версиями, но ваш выбор TFS будет ограничивать вас. Когда проект Burton был задуман еще в 2004 году, Microsoft не уделяла внимания Agile, а тем более Lean. Это будет твое самое слабое механическое звено в течение некоторого времени. Ваши хаки должны были быть подняты собственным принятием CodePlex Mercurial после того, как были предложены сообществу Microsoft в качестве постера реализации TFS.

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

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

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

Эта роль является Старком контраст с предложением скрама. Главный инженер в бережливой команде сам является голосом клиента, и роль владельца продукта не нужна.

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

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

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

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

Я бы также посоветовал не пытаться следовать таким вещам, как lean, scrum, kanban & co. слишком тесно. Просто решайте проблемы сами, обращаясь к этим идеям за руководством, а не за инструкцией. Специфика ваших проблем, скорее всего, потребует некоторой гибкости для лучшего управления.

Как мы это делаем:

У нас есть конвейер со следующими этапами

  1. отставание
  2. TODO
  3. в процессе (разработка и быстрое тестирование)
  4. обзор кода
  5. Тест (строгое тестирование)
  6. интеграционные испытания и общие приемочные испытания
  7. развернуть

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

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

Удалив ветку" master " из git и не проводя слияния до этапа проверки кода, мы убедились, что нет никакой возможности "прокрасться" в релизы. Что, как интересный побочный продукт, заставило нас визуализировать большую часть работы, которая раньше была скрыта.