Как обрабатывать пользовательские истории, которые нельзя разделить и которые не подходят даже для 30-дневного спринта?

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

как вы поступаете с историями, которым требуется более одного месяца, чтобы достичь состояния ГОТОВО-ГОТОВО? Конечно, их всегда можно разделить на несколько так называемых «технических историй», но они, за исключением всплесков рефакторинга, являются большим табу в Agile, не так ли?

Я думаю, что этот ответ является хорошим ответом на ваш вопрос, даже если это не совсем тот же сценарий: pm.stackexchange.com/a/23372/29374

Ответы (7)

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

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

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

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

В конце концов, Agile — это гибкость, реакция на изменения, а не соблюдение правил любой ценой, верно?

Нравится комментарий «Вам не платят за то, что вы идеально приспосабливаетесь к тому, что говорят некоторые лидеры мнений».
Одна вещь, которая всегда заставляет меня задуматься: не приносит ли рефакторинг ценность и клиенту в долгосрочной перспективе? Особенно, если это уменьшило техническое обслуживание, то это должно было изменить «что-то» - либо позволить вам доставлять больше товаров в будущем (клиент +), либо уменьшить количество и / или критичность дефектов (также клиент +) - так что, возможно, это не так. плохо, как мы иногда думаем? :)
Ну, наверное, да. По крайней мере, пока это сделано хорошо. Однако трудно провести прямую связь между рефакторингом куска кода и выигрышем клиента. Кроме того, я сомневаюсь, что многие клиенты будут платить за «рефакторинг» :)
«Если бы вы хотели и нуждались в архитектуре, которая принесла бы ровно 0 ценности вашим клиентам, но помогла бы вам ограничить затраты на обслуживание, вы бы отказались от такой задачи? Вероятно, нет» ==> Мне это нравится, но как вы представляете это как пользовательская история? Я читал во многих местах, что нефункциональные требования/технические истории — это большой запрет в agile. Я борюсь с этим и не хочу попасть в ловушку «мне как разработчику…»

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

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

Сколько пользовательских историй для дома связаны с фундаментом и крышей? Тем не менее, они являются самыми дорогими частями здания.

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

Я действительно ненавижу аналогию с мостом. На самом деле вы не можете выпустить подмножество моста так же, как мы можем это сделать в программном обеспечении.
Я не думаю, что есть что-то плохое в историях как в самой маленькой единице планирования. У нас просто есть большие истории на расстоянии и все более мелкие истории по мере приближения к текущей дате.
Нет, вы не можете выпустить подмножество пользовательской истории. Это моя точка зрения. Когда инфраструктура для включения некоторых функций отсутствует, ее необходимо развивать. Пользовательская история инкапсулирует ценность, предоставляемую пользователю/покупателю. Если пользовательская история умещается на карточке, но для ее реализации требуется более одной разработки (например, 30-дневный спринт, предложенный OP), то пользовательские истории не подходят для планирования/планирования.
Но вы можете разбить истории пользователей дальше, чем наименьшую ценность для клиента. На самом деле, последние 6 месяцев я работал над проектом, суть которого в том, чтобы клиенты не замечали разницы (миграция платформы). Я мог бы смутно сформулировать пользовательскую историю о ценности более быстрого внесения будущих изменений, но это не будет достигнуто, пока весь проект не будет завершен (на самом деле, во время миграции мы фактически усложняем работу с нашей платформой).
Таким образом, наши истории не фокусируются на ценности для клиента или даже для бизнеса, это проверяемые шаги, которые приближают нас к нашей цели. Это то, о чем Павел говорит (не будьте ортодоксальными в отношении предоставления ценности клиенту) в своем ответе.
Все, что меньше ценности для клиента, не является пользовательской историей , в этом и суть. Назовите это историей разработчика. Но ОП, как и многие агилисты, пытался впихнуть все в пользовательскую историю , потому что это то, что агилисты любят использовать для поддержания гибкости разработки . Его дальнейшее разбиение рискует создать BDUF. Но довольно часто его разрушение является необходимостью. Следовательно, не ограничивайте планирование/планирование разработки или agile-модные словечки пользовательскими историями .
Извините, если я неправильно понимаю, но похоже, что вы довольно педантично относитесь к номлемематуре. Это то, над чем мы работаем; Честно говоря, мне все равно, что мы называем пользовательскими историями, рабочими элементами или рыбными котлетами. В идеале мне нравится, чтобы мои истории имели непосредственную потребительскую ценность; нарушение этого правила не мешает ему быть историей.
Если вы думаете, что я педантичен в терминологии, что вы можете подумать об агилистах, которые настаивают на том, что пользовательские истории должны вписываться в спринты? И почему вы продолжаете спорить о номенклатуре, если она не имеет значения? Хотя хорошо, что вы более прагматичны в отношении процесса и не так резки в терминологии, не все согласны. Многие agile-промоутеры зациклены на догмах «ценности для клиента», не принимая во внимание архитектурные основы, оставляя новообращенных в замешательстве. Отсюда и вопрос ОП.

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

Можете ли вы привести пример истории?

Я должен быть довольно общим по причинам NDA, поэтому примером может быть «Калибровка датчика медицинского устройства путем настройки ряда параметров. Параметры взаимозависимы, поэтому реализация поддержки только одного параметра не дает никакого значения до конца пользователь." Ограничения реализации: C++ как язык, встроенная среда и необходимость иметь дело с уже разработанной структурой, которую практически невозможно изменить из-за затрат на повторное тестирование, связанных с соблюдением применимых нормативных требований. Что, в свою очередь, приводит к дополнительным усилиям по поиску обходных путей.
Однако мне нравится идея «наименьшего тестируемого компонента».
Я использую «что-то достаточно маленькое, чтобы быстро получить обратную связь», поскольку в основном именно поэтому мы используем Agile в первую очередь. Если команда достаточно продуктивна, чтобы создать целую функцию за спринт — или между соответствующими заинтересованными сторонами, доступными для предоставления отзывов, с какой бы ни была частота — тогда я не рекомендую разделять историю.

Отличный ответ от Павла. Некоторые другие вещи, которые следует учитывать:

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

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

Все истории можно разбить. Теоретически при планировании это сделать сложно.

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

Спасибо, это на самом деле второй подход «наименьшего тестируемого компонента», предложенный Беном.
«Сделано должно быть с точки зрения того, кому доставляется история. Это не всегда конечный пользователь». ==> Разве Agile/scrum.org не говорит об обратном? Пользовательские истории о доставке ценности конечному пользователю, не так ли? В противном случае вы попадете в технический рассказ типа «Как разработчику мне нужно…» и вы потеряете истинную ценность работы.

Кен дал хороший совет. Мы обнаружили, что самое важное, о чем следует помнить, это то, что...

  1. Код всегда должен быть потенциально готов к отправке. Если бы сегодня была обнаружена огромная ошибка, которая привела к остановке всего приложения, могли бы вы остановиться, исправить ошибку и запустить ее в производство? Это может означать, что есть некоторые частично завершенные наборы функций, но все, что есть, является высококачественным, проверенным и полным.
  2. К концу спринта вы должны были добиться заметного прогресса. Это важно, когда вы думаете о том, как разбить предмет. Так что, возможно, эта часть сама по себе не представляет «ценности» для клиента, но мы можем продемонстрировать эту часть клиенту и использовать ее, чтобы показать прогресс в достижении конечной цели. Как предлагает Кен, обязательно избегайте разделения на технологических линиях (разработка, а затем тестирование) любой ценой. Так что полезно думать, что история должна либо приносить пользу, либо демонстрировать прогресс в создании ценности.

Точно так же, как вы беретесь за любую эпопею: разбивайте ее на более мелкие части.

Есть много разных способов сделать это. Например, если в вашем проекте есть много других (устаревших) систем для взаимодействия, попробуйте найти пользовательскую историю более низкого уровня, которая имеет дело с ОДНОЙ устаревшей системой. И посмотрите, как реализация этого повлияет на общую эпическую историю.

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

Проверьте этот пост для еще одного способа справиться с этим .

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