Проблемы с итеративной моделью разработки

Я менеджер по продукту в компании-разработчике программного обеспечения. Мы используем итеративную модель разработки (подобную Agile) для разделения версий нашего программного обеспечения (например, 7.3, 7.4, 7.5 и т. д.). Перед каждой версией мы составляем план проектирования, основанный на сочетании запросов клиентов и внутренних функций, которые мы составляем на основе маркетинговых исследований.

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

  1. Это фиксирует наш график разработки на долгое время. Прямо сейчас, если кто-либо из наших клиентов сделает запрос на разработку, в зависимости от уровня приоритета, мы не сможем предоставить ему полную и протестированную версию программного обеспечения в течение более года. Это также влияет на нашу способность реагировать на изменения на рынке. Мы добавили ресурсы, но по мере того, как мы получаем все больше и больше запросов, мы посвящаем больше времени будущему. Как лучше всего убедиться, что наш график разработки включает все элементы, которые мы обязаны выполнить для наших клиентов, не тратя слишком много времени на будущее?
  2. Если мы попытаемся сократить сроки разработки и быстрее выпускать версии, это неизбежно приведет к увеличению количества версий, которые необходимо поддерживать. Обнаружение ошибки в версии 7.3, например, означает, что эту же ошибку нужно будет найти и исправить в версиях 7.4, 7.5 и т. д. Как мы можем уменьшить количество версий, когда ошибок больше?

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

Привет, Риггинс, с возвращением! Я прочитал ваш вопрос и отредактировал № 2 в зависимости от проблемы, но я не уверен, какой у вас вопрос по пункту № 1, возможно, вы или кто-то другой могли бы отредактировать, чтобы задать более прямой вопрос, чтобы помочь лучше сфокусировать № 1. Это кажется хорошим вопросом в его нынешнем виде, но прямые вопросы могут помочь лучше сфокусировать ответы и сделать его отличным вопросом StackExchange. :) +1
Вы занимаетесь параллельной разработкой будущих версий? Я не могу представить, как иначе вам пришлось бы исправлять ошибку в нескольких версиях. Особенно при итеративной разработке кажется, что как только вы исправите ошибку, она будет исправлена ​​в будущем, если только она не будет сломана каким-то волшебным образом.
Второй комментарий/вопрос Карен. Как жук так проскальзывает по цепочке? Конечно, как только это будет исправлено в 7.5, всем клиентам будет предложено «Установить 7.5». Компании, в которых я работал, отказываются поддерживать пользователей, у которых не установлена ​​последняя версия (поставщики коммерческого программного обеспечения).
2 важных вопроса, которые, я думаю, еще не заданы: 1. Как долго длится цикл выпуска? 2. Каков способ доставки новых выпусков?
@Karen - это правильно, как только ошибка будет исправлена ​​​​в последней (разрабатываемой) версии, она будет исправлена ​​​​во всех будущих версиях. Проблема во всех предыдущих версиях, которые все еще поддерживаются. Таким образом, ошибку, обнаруженную в 7.5, возможно, придется исправить в 7.2, 7.3 и 7.4.
@Jason - Цикл выпуска составляет от 4 до 6 месяцев, в зависимости от того, насколько быстро идет разработка и бета-тестирование. Метод доставки — это ручная установка нашими сотрудниками, однако наши клиенты могут выбрать, хотят они обновить или нет.
@ JMort253 - я добавил более конкретный вопрос для № 1. По сути, я хочу удостовериться, что выполняю все наши обязательства перед клиентами, но я не хочу, чтобы наш план разработки был настолько жестким, чтобы я точно знал, как программное обеспечение должно выглядеть через 18 месяцев. Мне нужно, чтобы было больше гибкости, чем это.
Риггенс, тогда я [все еще] в замешательстве. Почему вы исправляете предыдущие минорные версии приложения, а не предлагаете пользователям обновиться до последней минорной версии? Я с @gef05: известно, что в старых версиях есть ошибки. Вот почему у нас есть новые версии!
@Karen - На самом деле у нас есть более конкретные сборки (например, 7.2.1, 7.2.2 и т. Д.). 7.2–7.3 считается основным выпуском. По разным причинам мы не принуждаем наших клиентов обновляться до последней стабильной основной версии, и обычно мы поддерживаем как минимум 2 стабильных версии (ни одна в бета-версии) в любой момент времени.
Кроме того, я хочу отметить, что у нас есть чат для управления проектами , которым может пользоваться любой, у кого репутация не ниже 20. На самом деле, мы начинаем видеть немного больше использования! ;)

Ответы (5)

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

Для такого релиза я бы разрабатывал на стволе, а ветку — на релизе. Ветвление как можно раньше и как можно позже. Я видел проекты, где каждый релиз — это отдельный островок кода. Это имеет тенденцию создавать проблемы, с которыми вы сталкиваетесь.

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

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

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

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

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

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

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

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

По моему опыту, 90% клиентов устраивают одну дорожку. Остальные 10% потеряли доверие и решили из-за этого не брать новые патчи. Но, это другая ситуация.

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

Сократите объем, интегрируйте тестирование в цикл выпуска (например, не делайте этого, пока не протестируете и не исправите его) и выпускайте чаще.

Чтобы итерационный цикл работал хорошо, вам необходимо:

  1. Увеличивайте частоту выпусков и
  2. Всегда двигаться вперед

Идея в том, что:

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

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

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

По пункту 1

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

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

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

Для получения дополнительной информации ознакомьтесь с теорией очередей. Там много материала, но я особенно рекомендую взять «Управление фабрикой дизайна» Дона Рейнертсена, в которой есть действительно хороший раздел об очередях (а также в целом потрясающая книга).