Кристиан Вервейс: О сложности или зачем вам Скрам?
Предисловие переводчика
Предупреждение: Это лонгрид и это достаточно серьезный текст, далекий от большинства “простеньких” объяснений, которые вы могли прочитать на русском про Скрам и Эджайл.
Оригинал статьи находится тут.
Статья входит в список scrum.org рекомендованного к изучению для подготовки к экзамену PSM III.
Важность таких статей сложно переоценить. Судя по ошибкам, которыми делятся команды, и по некоторым комментариям, немалое число людей, пытающихся применить Agile, на самом деле не пошло дальше материалов типа “строим Скрам за 5 дней”, которые больше сосредоточены на элементарных практиках, а не на причинах и не на основополагающих принципах Скрам и Эджайл. Я сам, как руководитель, изначально столкнулся именно с такой, “от сохи”, реализацией Скрама, но, к счастью для себя, не сделал “обоснованный” вывод что весь этот ваш Скрам - это очередная подделка и модная глупость, а полез разбираться откуда и зачем есть пошел Эджайл и прочие Скрамы. Честно скажу - объем “открытий чудных” был намного больше ожидаемого, несмотря на годы опыта в управлении проектами, накопленные к тому моменту. Так что, надеюсь, что перевод достаточно важной для понимания Скрам статьи будет полезен почтенной публике, и, конечно же, я сам, как сертифицированный Скрам-мастер и человек преподающий Скрам и Эджайл (я помню, коач слово ругательное, буду рад ответить на все вопросы.
Предисловие
Разработка ПО и продуктов никогда не была чем-то простым, если, конечно же, исключить проекты длиной в пару дней, в которые вовлечены пяток человек. В целом же, все проекты можно рассматривать как сложные. Под сложностью я понимаю “слишком много переменных, влияющих на результат, и возможных связей между вовлеченными людьми, для того чтобы иметь возможность надежно предсказывать хотя бы ближайшее будущее”. Мы часто страдаем от склонности упрощать, звучащей как “это не может быть настолько сложно”, “мы уже это делали”, “мы хорошо знаем что делать”. И я нередко встречал людей искренне верящих что их проект “недостаточно сложен” для того чтобы применять Скрам. Я искренне верю что эти люди просто не понимают что значит “сложен”. В этой статье я покажу пару моделей полезных для понимания сложности и для лучшего понимания чем Скрам (и другие итеративные подходы) лучше.
Выкинь свои планы?
Большинство людей понимают сложность исключительно в контексте “насколько сложно то, что мы создаем”. Недавно я общался с руководителем, который считал что его проект простой, потому, что речь идет о переписывании огромной, но уже существующей системы. Но ведь это всего лишь один из факторов! На курсах для профессиональных скрам-мастеров мы всегда просим участников найти можно больше факторов, которые влияют на успех проекта (примечание переводчика: имеются в виду курсы Professional Scrum Master и Professional Scrum Master Advanced от scrum.org). Мы даем всего несколько минут, но этого хватает, чтобы участники полностью заполнили лист формата A1. Если бы мы давали целый день, я точно знаю - им бы не хватило стен в классе чтобы записать все факторы.
Просто, чтобы вы представили, на вскидку можно перечислить:
Стили и опыт общения в команде
Правомочия команды и поддержка проекта внутри организации
Профессиональный уровень вовлеченных специалистов
Насколько у проекта ясная цель
Количество вовлеченных в проект
Техническая и организационная культура
Обмен знаниями
Используемый процесс
Насколько доступны представители заказчика
Насколько заинтересованы и вовлечены пользователи
Выбранный инструментарий
Нестабильность рынка
Умение планирования и управления временем
Мотивация
Время исполнения проекта
Качество и размер унаследованного кода
Отношения с поставщиками ключевых компонент
Некоторые из факторов приведенных выше - просто огромны, например организационная культура, технические навыки, или прозрачность цели. Как вообще можно предсказать не только влияние этих факторов на проект, но и их взаимодействие между собой? Реальность состоит в том, что с таким уровнем непредсказуемости создание планов просто неоправданно. Планы превращаются в неисчерпаемый источник ритуализированных потерь времени и ресурсов, трату ресурсов впустую на составление, прочтение, понимание и поддержание в актуальном состоянии самих планов. Это не означает что мы не должны тратить времени на то, чтобы понять как мы будем все это делать. Мы просто должны делать это способом, учитывающим сложность и непредсказуемость. Как говорил Эйзенхауэр: “планы - бесполезны, но планирование - бесценно”.
Я собираюсь описать два хорошо известных способа преодоления сложности - матрицу Стейси (Stacey’s matrix) и модель Кеневин (Cynefin).
Примечание переводчика: Позволю себе немного дополнить. Западные источники тоже часто стараются оградить читателя от излишне сложных знаний, но мы-то не такие, да? “Сложность” в данном случае не модная выдумка и не околонаучное словоблудие. Это отрасль науки, входящее в общую теорию систем, называемая “теорией сложных систем”. Теория получила активное развитие с середины 70-х годов прошлого века, и известный ученый и популяризатор науки Хоукинг даже предсказал что 21-й век будет веком познания сложных систем. Итак, что такое сложность, и, самое главное, то самое непонятное слово часто встречающееся в контексте Аджайла - эмерджентность? Система считается сложной, если её поведение невозможно предсказать, зная поведение каждого отдельного элемента системы. Поведение, которое свойственно только системе как единому целому, но не свойственно ни одному её компоненту как раз и называется эмерджентным.
Выше, где автор говорит об упражнении на их курсах, приведен хороший пример эмерджентности сложной системы - каждый участник в отдельности (даже если бы мы посадили каждого написать свой список на листочке и потом собрали листочки в кучу) - не был бы в состоянии составить насколько исчерпывающий список факторов. Такой список и за такое короткое время возможен как раз для группы участников, совместно работающих на один результат. Взаимодействие разных способов мышления и разного опыта (а это еще один жупел нашего времени - та самая дайверсити!), происходящее в реальном времени, как раз и создает условия для возникновения поведения и получения результата, свойственного только группе. Кстати, когда вам в следующий раз будут рассказывать псевдонаучную байку про групповое перетягивание каната - проведение такого эксперимента по совместному мышлению является самым простым способом показать что это “всё совсем не так”.
Матрица Стейси
Один из способов понимания сложности - это матрица Ральфа Стейси. За годы её использования было выработано несколько “классических” способов представления, но все они говорят о сложности как о функции от согласованности понимания “что надо делать” и уверенности в знании о том “как надо делать”. Ниже показана матрица в виде, адаптированном для процессов разработки ПО.
Матрица Стейси создана, чтобы помочь руководителям понять степень сложности, с которой они столкнулись, и выбрать адекватную модель принятия решений. Для разработки ПО матрицу организуют по координатам “Требования” (Что делать?) и “Технологии” (Как делать?). Первая определяет насколько хорошо нам известно какой именно продукт следует создать, вторая - насколько хорошо нам известно как именно следует создавать продукт. Матрица как она представлена на рисунке не совсем совпадает с оригинальной матрицей в работах Стейси, но использует те же самые концепции. Матрица определяет четыре типа ситуаций:
Простая: Проект прост, если нам точно известно и что надо сделать и как именно мы будем его делать. Представьте себе веб-сайт из одной странички на основе уже изданной рекламной брошюры. Наиболее эффективный способ создания такого проекта - сесть и сделать его, используя уже готовые рецепты и успешные решения.
Усложненная: Проект усложнен, если нам не очень хорошо понятно что мы будем делать или как мы будем делать. Я часто привожу пример инструментария для Web. Реализация достаточно понятна, достаточно взглянуть на схожие решения, типа Magneto или WooCommerce, но вот в чем именно нуждается рынок и как именно представить рынку новый продукт уже не так очевидно. Другой пример - стыковка интерфейсов двух разных систем. Что делать вполне понятно - вот хорошо задокументированный интерфейс одной системы, вот хорошо задокументированный интерфейс другой системы. Но вопрос “как” уже не так однозначен, начиная прямо с вопроса “какие данные в одной системе соответствуют конкретным данным в другой системе”? Часто ответить на все эти вопросы заранее просто невозможно. Кто-то может сказать что анализ, проектирование и разработка вполне решает такие задачи, но по моему опыту - не очень. Именно итеративная разработка может помочь здесь.
Примечание переводчика: По моему мнению в выводах автор зря уходит от теории сложности, предлагая доверять его всего лишь его опыту. Предсказательный подход (чаще известный как “водопад”) весь построен на одной посылке - систему можно полностью изучить разобрав её на части и изучив каждую часть. Именно на этом построен хорошо известный механизм упрощения сложных и больших задач - декомпозиция. Мы разбираем требования на части (OOA), мы разбираем дизайн на части (OOD/OOP), мы разделяем работу на маленькие кусочки (WBS) и рассчитываем что в итоге у нас получиться именно то что нам надо. Каждый кусочек-то правильный, так? Теперь вернемся в вопросу “а что такое сложная система и что такое эмерджентное поведение”. А ведь это система, поведение которой не объясняется поведением отдельных частей! То есть, весь предсказательный подход в принципе не может работать для сложной системы - методы которые там применяются просто не предназначены для понимания и создания сложных систем, они не учитывают поведения возникающего только у системы в целом.
Сложная: В сложной системе нам не очень хорошо известно ни что делать, ни как делать. Взаимодействие между неизвестными нам переменными настолько сложны, что их просто невозможно предсказать заранее, а значит любой план, построенный на предсказаниях будет бесполезен. Вместо того, чтобы управлять тем, чем мы управлять не способны - лучше использовать более подходящий процесс управления - эмпирический. В эмпирическом процессе принятие решение происходит на основе того, что уже случилось, а не на основе того, что мы ожидаем что случиться. Поэтому мы ведем работу небольшими шагами, постоянно проверяя приближаемся ли мы к конечному результату. Scrum является примером такого процесса.
Примечание переводчика: В русском языке эмпирический подход еще называют научным подходом - способом познания неизвестного путем высказывания теоретически обоснованной гипотезы и проведении эксперимента по ее проверке, объективного и повторяемого. Скрам использует эту же самую терминологию когда мы говорим об управлении. Цель спринта, как и спринт бэклог являются не более чем гипотезами о том, что реализация выбранной функциональности создаст ожидаемую заказчиком ценность, а команда способна эту функциональность реализовать. Спринт является, по сути, экспериментом по проверке этих гипотез, ревью - валидацией результата эксперимента, а ретроспектива - адаптацией процесса на основе новых знаний, полученных в результате проведенного эксперимента. Предиктивный процесс совершенно некорректно сравнивает разработку ПО с массовым производством и пытается применить методы массового производства к работам, которые по сути являются НИОКР (научно-исследовательские и опытно-конструкторские работы). Ни на одном заводе и ни в одном КБ такой глупостью, как внедрением методов массового производства в конструкторскую работу никогда не занимались. А вот если посмотреть как работают в результативном КБ - то внезапно окажется что это очень похоже… на все тот же Аджайл. Такие дела.
Хаотичная: В правом верхнем углу зарезервировано место для процессов находящихся в непрерывном изменении. В таких местах даже вчерашний опыт оказывается бесполезным для предсказания будущего и принятия решения. Представьте себе к примеру глобальный отказ энергосистемы. Лучшее что мы можем сделать - это, подобно медикам, заняться триажем - выбирать где сейчас мы можем приложить усилия с для достижения наибольшей возможной пользы.
Примечание переводчика: Термин триаж пришел из сортировки раненных военными врачами или в медицине катастроф. Цель триажа в первую очередь оказать помощь тем, кого можно спасти и кто без оказания немедленной помощи не выживет. В целом и общем - это поиск баланса между “вот этим уже не помочь” и “вот эти вполне подождут”, в ситуации когда время потраченное на принятие решения уменьшает шансы на успех лечения.
Итеративный подход может быть эффективен и тут, но с двумя условиями. Во-первых итерация должна быть очень короткой, во-вторых объем работы в итерации должен быть жестко ограничен.
В нашей модели добавлена ещё одна ось, которой нет в исходной матрице Стейси - количество вовлеченных людей. Это отражает увеличение сложности любого процесса при увеличении количества вовлеченных людей. Работа элементарная для одного может оказаться сложной для группы, просто представьте себе выбор “какое бы кино посмотреть” компанией из десяти человек.
Ограничения матрицы Стейси
Интересно, что сам Стейси отказался в итоге от использования матрицы, объясняя это тем, что все работы - сложные. Даже самая простая работа внезапно может оказаться сложной, если “что-то пошло не так”.
Вторая причина заключается в том, что бездумное использование матрицы может создать впечатление что мы можем уменьшить сложность системы просто “усилием мысли”, например потратив немного времени на то, чтобы договориться что мы будем делать или как мы будем делать. Иными словами “все что нам надо - просто еще больше планирования”. Но это совершенно противоречит тому, что пытался донести Стейси своей матрицей.
И, наконец, третья причина в том, что матрица “как есть” учитывает только “согласованность” и “определенность” (примечание переводчика: координаты в оригинальной матрице Стейси), но на самом деле сложность зависит от большего числа факторов, таких как способность людей договариваться, умение применять имеющиеся навыки, состояние культуры в компании и даже просто неудачное стечение обстоятельств.
Модель Кеневин (Cynefin framework)
Модель Кеневин была разработана в 1999 Дейвом Сноуденом (Dave Snowden) из АйБиЭм, чтобы помочь лидерам и управленцам лучше понять ситуацию, в которой они оказались и выбрать правильную стратегию действий. Позже модель была доработана Синтей Курц (Cynthia Kurtz). Модель активно используется Эджайл-сообществом и помогает объяснить почему Эджайл вообще и Скрам в частности хорошо подходят для разработки ПО. Модель выглядит сложнее матрицы Стейси, но дает более четкое объяснение.
Говоря простыми словами, Кеневин определяет пять видов сложности, которые принципиально различаются между собой. Соответственно, модель утверждает что есть четыре способа познания неизвестного. Каждому виду сложности соответствует свой способ познания и свой подход к управлению. Хотя модель выглядит как квадрат 2x2, на самом деле в ней нет осей абсцисс и ординат.
Виды сложности:
Простое. В простой ситуации очевидно что делать, так как проблема понятна, а путь решения хорошо известен и проверен. Диагностика проблемы и выбор решения не требует экспертных знаний. Такие задачи хорошо решаются выбором “лучших практик” (best practices). Управление строится на диагностике ситуации (осознай), понимании к какой уже известной категории относится проблема (упорядочь) и к выбору и применению известного и устоявшегося метода решения (реагируй). Примером такой ситуации может быть колл-центр, использующий готовые сценарии для звонков. Для управления в простой ситуации достаточно убедиться что люди понимают что надо сделать и как надо сделать.
Усложненное. В усложненной ситуации диагностика проблемы и выбор решения уже требуют экспертных знаний и навыков. Для начала, нужны экспертиза и время для изучения, чтобы задать правильные вопросы и получить адекватные ответы. Потом, экспертиза и опыт нужны чтобы выбрать (и, если надо, адаптировать) правильный способ решения из ограниченного набора возможностей. Управление строится на диагностике проблемы (осознай), глубоком анализе проблемы (изучи), и выборе и применении способа решения (реагируй). Для управления такой ситуацией важно привлечь экспертов.
Сложное. В сложной ситуации и проблема и способы решения по большей части неизвестны. В такой ситуации даже найти правильного эксперта или задать правильный вопрос - уже сложно (мы имеем дело с “неизвестными нам неизвестным”). И понимание проблемы и поиск её решения требуют активного экспериментирования, до тех пор пока не начнет проявляться подходящий способ решения. И если общее направление еще может быть известно заранее, окончательное решение остается неясным до тех пор, пока оно не будет найдено. Подход к управлению строится на планировании и проведении эксперимента (попробуй), на анализе результатов эксперимента (осознай) и выборе нового эксперимента на основе полученных ранее знаний (реагируй). (примечание переводчика: коллеги, применяющие методы Деминга и их производные, такие как Kaizen или SixSigma без труда узнают цикл PDCA - plan, do, check, act). Наиболее эффективный стиль управления в такой ситуации - сотрудничество.
Хаос. В хаосе и проблема, и способ решения неизвестны (примечание переводчика: управленцы и команды часто не учитывают фактор времени - жесткий лимит времени способен любую, даже простую задачу сделать хаотической, просто за счет того что не остается время ни на диагностику известной проблемы, ни на выбор и применение известного решения). Это временное состояние. С течением времени, ограничения и структура проблемы проявляются сами по себе. Представьте себе ситуацию, когда большой и важный кластер сервисов внезапно перестал работать, например из-за стихийного бедствия. Время на решение жестко ограничено и фокус идет не на то, чтобы найти наилучшее решение, а на то чтобы хоть как-то вернуть систему в работоспособное состояние. Наилучший подход в этой ситуации - триаж. Надо найти самое больное, но в принципе решаемое место, и действовать без промедления. В ходе действия неизбежно будет получена новая информация, которую можно применить для более удачного выбора следующего объекта для работы. Наилучший способ управления - это быстрое принятие решений, обеспечение быстрых и эффективных способов распространения информации и постепенное приведение ситуации от хаотической к просто сложной.
Беспорядок. Область в центре модели зарезервирована для ситуаций, в которых сложность неизвестна. Сноуден добавил эту область, чтобы подчеркнуть важность того, что любые действия должны начинаться с понимания ситуации, в который мы находимся, и использования доступных данных и информации для оценки сложности ситуации. Если таких данных нет - то ситуация остается беспорядочной. Приоритет в таком случае остается за определением степени сложности ситуации и выборе правильной стратегии решения проблем.
Еще эта область подчеркивает что сложность не является объективным свойством ситуации, а характеризует в первую очередь нас и наш способ мышления в отношении к ситуации.
Знания, границы и где тут Скрам
Ключевой элемент Кеневин - это знание. Наше понимание ситуации помогает сделать и проблему и способ решения более очевидной. Используя рекомендуемый для каждого варианта подход - мы в первую очередь лучше понимаем проблему, с которой столкнулись. И это помогает нам снизить степень сложности.
Представьте что мы находимся в хаосе, скажем, обычный наш пример массового отказа систем. У нас нет времени сидеть и думать, мы сортируем проблемы по важности и решаем то что можем решить здесь и сейчас. Принцип: важное - вперед, жестко ограниченное количество незаконченный работы (work in progress). Рано или поздно, все эти действия приведут систему в более упорядоченное состояние и дадут нам время на более продуманные решения.
В сложной системе, если следовать Сноудену, Скрам позволяет сделать сложное просто усложненным. Скрам разделяет большую проблему (например продукт) на множество мелких проблем (PBI), и каждый из отдельных кусочков уже будет просто усложненным.
Таким образом, изменяя наше поведение, мы способствуем лучшему пониманию ситуации. Это помогает двигаться по модели по часовой стрелке - от хаоса - к сложному, от сложного - к усложненному, и, наконец, - от усложненного к простому. Между простым и хаосом находится перевал (иногда “обрыв”) показывающий возможность падения из простоты обратно в хаос. Такое случается, например, когда устоявшиеся лучшие практики устаревают, но их упорно продолжают применять. Или, например, когда человек, обладающий критически важными для продукта знаниями, покидает компанию, не передав знания и опыт кому-то еще. При первой же возникшей проблеме оставшимся придется иметь дело с хаосом и собирать головоломку утерянных знаний заново.
Самый важный урок тут заключается в том, что разработка ПО никогда не бывает простой. Она усложнена, сложна, и иногда просто хаотична. Когда нам не хватает знаний ни о том, что следует получить, ни о том как мы будем это делать - итеративный подход позволяет нам найти и проблему и решение. Сколько бы мысленных усилий мы не тратили на предсказания, огромное количество влияющих на ситуацию факторов легко сделают эти предсказания беспочвенными. А значит использование далеко идущих планов в сложном окружении легко “доведет вас до цугундера”.
В сложных системах наиболее ценным источником информации являются не предсказания и экспертные мнения, а практический опыт и знания, накопленные ранее при работе с проблемой. Это и есть основа эмпирического, итеративного процесса. Точно так же поступают ученые, высказывая гипотезы и проводя эксперименты, или изобретатели, приходящие к работоспособному решению через череду прототипов. Частая проверка текущего состояния в его эволюционном развитии - совершенно необходима для лучшего понимания ситуации и дает нам те самые знания, которые необходимы для принятия будущих решений. Ну и, как сказано было ранее, разделяя большую проблему на более мелкие (спринты) мы стремимся к переходу от сложного к усложненному.
Так что там про Скрам?
Собственно, Скрам и есть тот самый фреймворк, который позволяет вам построить эмпирический процесс. Именно поэтому Скрам - не метод, не процесс, не набор практик. Все это подразумевало бы законченный набор принципов и инструментов. Скрам же просто показывает как именно эмпирический процесс может быть применен к разработке ПО, используя прозрачность (понимание всеми, в первую очередь, цели), инспекцию (регулярную и частую проверку текущего состояния в его развитии на пути к цели) и адаптацию (сбор и анализ информации, полученной в рамках инспекции, и принятие на ее основе решений). Все события и артефакты скрама служат поддержанию прозрачности, проведению инспекции и своевременной адаптации. Любая попытка убрать что-то из Скрам сразу же негативно скажется на понимании командой целей, на возможности команды получать новую информацию путем эксперимента, или ограничит возможности команды изменить свое поведение сообразно требованиям ситуации. Скрам не единственный, но один из самых популярных вариантов реализации Эджайл. И если моя статья помогла вам понять, что ваш проект нуждается в эмпирическом подходе и вам стоит попробовать Скрам - то это прекрасно.
Примечание переводчика: Повторюсь, важность этой статьи для понимания Эджайл и Скрам сложно переоценить. Обратите внимание, что в ней совершенно не говориться о “методах и практиках” - ни о ревью, ни о парном программировании, ни о, прости Господи, еще каком тим-билдинге. Вместо этого в ней выводятся очень важные признаки того, что проектная команда действительно реализует Эджайл.
Если команда осознает недостаток своих знаний о проблеме и способах её решения.
Если команда организует свою работу признавая и учитывая этот недостаток знаний
Если команда стремиться к получению дополнительных знаний о проблемах и способах решения путем эксперимента
Если команда осознанно и обоснованно использует практически полученный опыт для улучшения своих знаний и для изменения своего поведения сообразно ситуации.
Вот тогда и только тогда команда действительно делала Эджайл. А не тогда, когда команда разбрелась как “подружки по парам” делая типа XP, и не когда они собираются на формальный митинг для пляски с бубнами в течении 15 минут ежедневно, называя их точно также, как в скрам-гайде. Такие дела.
powerman
Вот такие пассажи всё сильно портят — это явное преувеличение области применимости скрама. На практике, например, если надо написать отдельный микросервис, который пишется в среднем за неделю-две, то использование скрама явно избыточно и заметно замедляет разработку. А целый пяток человек, на практике, за пару дней в лучшем случае только-только успеют договориться что они будут делать, но никак не успеют за это время ещё и сделать что-то.
Ещё, на мой взгляд, канбан незаслуженно вынесен почти что за скобки, в область хаоса. Он прекрасно себя показывает в качестве более дешёвой и эффективной альтернативы скраму для тех самых небольших проектов и команд, вроде вышеупомянутых микросервисов. (Но, я понимаю, он слишком прост, и на обучении канбану много не заработаешь…)
К изложенному в статье я бы ещё добавил, что основное свойство конкретно скрама — это гарантированный ритм, с которым выполняются эти циклы A-B-Реагируй, который и обеспечивает относительно стабильное продвижение вперёд проекта в целом.
ngekht Автор
Спасибо за комментарий и за замечания. Лайкать пока не могу, надо еще «набрать веса», поэтому пока словами. :-)
Вот такие пассажи всё сильно портят
Полностью согласен, но так в оригинале. Я тоже засомневался не добавить ли еще и сюда примечание переводчика, но решил что пункт недостаточно важный, чтоб совсем уж делать так, чтоб переводчика в статье было больше чем автора.
На практике, например, если надо написать отдельный микросервис
А вот тут вопрос конечно интересный.
С одной стороны он умышленно в своей статье подводит к мысли что «простых проектов в разработке ПО просто не бывает».
С другой «сделать за две недели без скрама» все еще можно очень по-разному.
Кто-то пишет-пишет 2 недели, потом рассказывает что у него все готово на 99% (причем последний процент потом растягивается еще на пару месяцев). И самое печальное таких — не скажу что большинство, но… немало.
А кто-то, по сути, делает тот же самый Agile, каждый день добиваясь небольшого, но полностью законченного и отлаженного инкремента, причем желательно чтобы в итоге что-то само по себе уже ценное получалось.
Что в этой статье ценно — она объясняет не только почему может работать скрам, но и почему подход #2 выше куда чаше приводит к реально работающему продукту, а вот подход #1 не смотря на его фейковую высокую экономическую эффективность (мы отлаживаемся/выпускаем только один раз, не тратимся каждый день) — куда чаще заводит проекты в полный провал.
Ещё, на мой взгляд, канбан незаслуженно вынесен почти что за скобки, в область хаоса.
И тут я полностью согласен. Я сам, если быть честным, куда больше делаю чистого Lean management/Kaizen чем Scrum.
У меня такое ощущение что долгое время Agile community умышленно дистанционировалась от Kanban и Kaizen. Ну наверное можно объяснить — говорящим головам продавать надо :-).
Статья 2017 года тогда еще Kanban для них был экзотикой. Как я тут давеча видел в комментариях на хабре — Канбан «оказывает плод скрещения Agile с чем-то-там». Ага, особенно если учесть что Канбан появился на десятилетия раньше — конечно же это так. Но сам уровень познаний большинства рассуждающих — характерен.
Но я, опять-таки, по опыту, пока побаиваюсь подступаться к этой теме. Kaizen вообще и Kanban в частности еще пока ждет человека который объяснил бы их «на пальцах». :-) Большая часть источников по ним — увы, просто зубодробительна.
Ну и надо отметить что за три года ситуация все-таки поменялась. И «Scrum with Kanban» появился у Scrum.org, и вообще в 2020 версии Scrum guide внезапно вспомнили Lean корни Agile и терминология Lean management стала снова активно использоваться.
К изложенному в статье я бы ещё добавил, что основное свойство конкретно скрама — это гарантированный ритм
Немножко позволю себе поправить.
Гарантированный ритм, и, как писал сам Швайбер — тамйбокс все-таки в первую очередь механизм принуждения команды. «Никогда человек не бывает таким изобретательным как с петлей на шее»©, однако. Но строго говоря ритмичность все-таки это побочка, особенно полезная в ситуации когда команда до конца не понимает эмпирицизма. Рваный ритм никак не противоречит скраму, пока между инспекциями проходит не больше чем установленный timebox. Т.е. sprint эквивалентно release — это ошибочная точка зрения. Sprint это не менее одного релиза. Но сколько их и в каком ритме — дело команды.
jMas
Если микросервис пишется людьми с опытом — он пишется быстро. Люди которые впервые пишут микросервис и пытаются его интегрировать — это уже сложная задача. Первый комментатор умышленно приуменьшает сложность, забывая про условия в которых будет выполняться задача.
powerman
Нет, дело в другом. Разработка в микросервисном стиле, по своей природе, подразумевает написание большого количества (от десятков до тысячи) достаточно однотипных сервисов. Более того, абсолютное большинство из них довольно простые (это следствие их количества и одна из основных причин вообще использовать микросервисы). Поэтому, хотя написание первых трёх сервисов может занять много времени, равно как и написание немногих больших и сложных сервисов, в общей картине разработки проекта эти затраты теряются. Поэтому однозначно имеет смысл оптимизировать методологию и процессы под бо?льшую часть работы — а это как раз те самые сервисы, которые пишутся в среднем недели за полторы одним разработчиком (опытным, но при таком количестве однотипной работы все разработчики быстро становятся достаточно опытными конкретно в этом).
jMas
Да, просто не совсем понятно было написано: «канбан простой и денег на нем не заработаешь». Насколько я понимаю: канбан будет работать где конвейер уже построен (понятный продукт, нужно только делать), а скрам будет работать там где конвейер только предстоит построить (непонятно что и как делать).
powerman
Не совсем так. Разные типы работ имеют бо?льшее влияние на выбор методологии, чем "понятный продукт". Например, при разработке обычного веб-проекта:
Иными словами, да, для канбана нужен настроенный конвейер "берём таску из трекера, пишем чистый код, покрываем тестами, выкатываем на стейдж" — но это не имеет никакого отношения к тому, насколько хорошо бизнес понимает какой продукт мы пилим, равно как и к тому, пишем ли мы тупой CRUD или в процессе нужно проводить какие-то исследования и временами осваивать новые технологии (т.е. конвейер вполне справляется с задачами, у которых высокая степень неопределённости и/или сложности — просто их тоже нужно правильно декомпозировать и раз в пару дней анализировать по ним прогресс, т.е. выполнять Попробуй-Осознай-Реагируй или Осознай-Изучи-Реагируй в терминах статьи).
jMas
Хорошие примеры. Спасибо. Есть ощущение что вы правы, хоть пока доказать тоже не могу. :) За дизайнеров скажу: работают по скраму, если проекты более менее повторяющиеся и клиент больше ориентирован на запуск продукта, а не на цвет кнопок. И сюда приходит «конвейер».
ngekht Автор
Неистово плюсану про отличные примеры и прекрасное объяснение. Спасибо.
jMas
Это косвенно подтверждается тем, что канбан был изначально внедрен в цехах по сборке автомобилей — то есть там где: вот тебе ключ, гайка — прикрути. То есть, там где процесс уже построен и речь идёт о механическом исполнении заданий.
Тогда как скрам в моем понимании — исследовательский подход. Я не знаю чем и что прикручивать, давай пообещаю что за неделю научусь прикручивать камешек палкой, а потом обсудим и попробуем что то ещё.
ngekht Автор
С точностью до наоборот. Канбан был внедрен в момент отказа от массового производства и от конвеера. Конвеер и ключ-гайка — это push подход — мы пихаем дальше по конвееру так много, как много успеваем сделать. По сути, waterfall — это такая попытка сказать, что разработка ПО — это массовое производство.
Основная проблема которая возникает — это стоимость. Нам продукт обходится не во столько, сколько минимально было необходимо чтобы сделать реальное проданное количество продукта, а во столько, сколько рабочие успели наваять.
Канбан же пришел с lean management и сменой парадигмы. Процесс становится pull — мы не делаем больше, чем надо дальше по цепочке, а у нас не вытягивают больше чем могут обработать. Это обеспечивает нам тот факт, что затраты не будут превышать минимально необходимых для того, чтобы сделать реально потребовавшуюся ценность.
ngekht Автор
В ситуации когда это тридесятый сервис в на той же технологии и в той же предметной области — однако это попадает под определение «простое».
Но «однотипность» микросервиса легко ломается как только даже при той же технологии внезапно становится надо решить принципиально новую бизнес задачу.
powerman
Я выше уже описал что нет, не ломается, конвейер отлично перемалывает и принципиально новые задачи. Но чтобы это сработало нужен поставленный процесс преобразования таких задач в обычные — декомпозиция исследовательских задач и частое (пара дней) получение обратной связи об их прогрессе с соответствующей коррекцией постановки этих задач при необходимости (чтобы в них не "тонуть", и чтобы не отклоняться сильно в сторону и не делать то, что не нужно бизнесу прямо сейчас).
При этом сама оригинальная задача вполне может быть довольно большой и сложной, и в целом работа над ней может занять от нескольких недель до пары месяцев. Но. В течении этого времени она будет делаться как последовательность небольших (2 часа … 3 дня) задач, создаваемых (и удаляемых тоже, кстати) в процессе непрерывной декомпозиции на основе анализа того, что уже стало понятно (та самая обратная связь каждые пару дней). И канбан отлично "переваривает" такие задачи.
P.S. А конечным итогом выполнения этой большой исследовательской задачи будет создание совершенно обычных задач по разработке совершенно обычных микросервисов, потому что уже стало ясно что и как в них надо делать.
ngekht Автор
Где-то мы ушли говорить о разных вещах, ко всему что вы написали выше — у меня никаких возражений нету. :-)
И уж тем более в рамках Канбан и DevOps совершенно точно можно все, что в Скраме, и еще вагон и маленькую тележку. Полностью согласен.
powerman
Возможно. Я отвечал на
в духе, что существует процесс, который позволяет в этой ситуации ничего не сломать, а выполнив предварительно группу других задач (не являющихся разработкой "незнакомого" микросервиса) вернуть возможность разрабатывать нужный микросервис как "типовой".
Возможно я просто не понял, что Вы имели в виду, и ответил на что-то другое.
Кстати говоря, возможно для большей ясности стоит ещё ответить на
Я искренне убеждён в том, что единственный способ делать "сложные" задачи — ни в коем случае не делать ничего "сложного"! Поэтому да, все задачи, которые в моих проектах добираются до колонки "To do" — простые. Потому что сложные задачи в "To do" никто никогда не добавляет — сначала их надо преобразовать в простые.
Так что да, это читинг, задачи которые я делаю по канбану действительно "попадают под определение простых" — так задумано. :)
ngekht Автор
:-)))
Я искренне убеждён в том, что единственный способ делать «сложные» задачи — ни в коем случае не делать ничего «сложного»!
Мы бы точно сработались, попадись мы в одну команду.