Имеет ли смысл Scrum при реализации нового бэкэнда компилятора?


15

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

Переписать бэкэнд - это значительный объем работы. Я не вижу способа разбить это на разумные истории, не нарушив критерии INVEST.

Я не вижу, как каждая история может быть предметом переговоров - все они необходимы для работающего компилятора. Все истории имеют одинаковый приоритет, и не важно, в каком порядке я их доставляю. Мне нужно сделать их все.

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

Я планирую попытаться следовать за Scrum, но я просто прохожу движения?

Есть ли рекомендуемые практики для такого проекта?


1
@Sklivvz обновленный имеет больше смысла?
Дэйв Хиллиер,

1
В качестве альтернативы схватке взгляните на канбан. Они оба проворны, но AFAIK kanban лучше подходит для той работы, которую вы выполняете, а scrum - для работы, которую можно разделить на различные приоритеты.
Изката

@Izkata Kanban по-прежнему ожидает приоритетную очередь ввода, либо по значению, либо по времени прибытия. Ценностное предложение «все или ничего» является фундаментальным блокирующим фактором при рассмотрении любой итерационной модели разработки.
CodeGnome

@CodeGnome Хм .. Я признаю, что не сделал kanban, но я понял, что это хорошо для того, чтобы иметь много всеобъемлющих вещей, как описано в этом вопросе: если вы работаете для каждой карты в ее собственной ветви, то объединяйтесь с транком, когда он завершено, это одна "итерация" / релиз. Они просто перекрывали друг друга, в отличие от спринтов в схватке.
Изката

2
Требования не изменятся. Вы просто не можете в это поверить.
JeffO

Ответы:


22

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

Подумайте, что все эти «должны иметь» истории составляют одну эпопею: «Уметь компилировать на платформе X». В этом случае весь эпос должен быть завершен до того, как пользователю будет передано какое-либо значение, но это часто имеет место в начале больших проектов. Начните с истории, чтобы составить простейшую из возможных программ, а затем создайте дополнительные истории, чтобы поддерживать все больше и больше языковых функций.

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


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

@JeffO Я согласен: изменяющиеся требования - востребованная особенность Agile, например, поэтому у нас есть демоверсии.
Sklivvz

1
@JeffO Если вы хотите придираться, требования не всегда меняются, они почти всегда меняются . Я изменю свою формулировку независимо.
vaughandroid

1
Я считаю этот ответ неприятным. «Начните с истории, чтобы скомпилировать простейшую из возможных программ, затем создайте дополнительные истории, чтобы поддерживать все больше и больше языковых функций». Но, вероятно, потребуется 6 месяцев работы, чтобы построить структуру, прежде чем можно будет построить даже самую маленькую программу! Это не реалистичный ответ, описывающий использование гибкого подхода к бэкэнд-системе.
Дэн Ниссенбаум

10

Конечно Scrum полезен. Это методология, которая делает две вещи для вас:

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

Таким образом, есть некоторая ценность в использовании этого.

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

Я не вижу, как каждая история может быть предметом переговоров - все они необходимы для работающего компилятора

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

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

Все истории имеют одинаковый приоритет, и не важно, в каком порядке я их доставляю.

Это не правильно, как вы говорите ниже, что некоторые истории не «должны иметь», поэтому, безусловно, некоторые из них менее ценны. Но даже в категории «должен иметь»: некоторые языковые особенности намного более фундаментальны, чем другие, и в значительной степени таковы.

Один из способов измерить это - «сколько еще строк кода мы можем скомпилировать в существующей кодовой базе» или «сколько еще тестов пройдено», если у вас есть предопределенный набор тестов.

Есть и другие варианты. Если вы компиляции C-подобный язык, строго говоря , вам нужно только ifи gotoцикл иметь (едва) функциональный язык , и вы можете реализовать while, forи repeatкак макросы. Предполагая, что написать прекомпилятор достаточно просто, у вас может быть дешевое решение для временной задержки (эй, мы ведем переговоры? :-)

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

В заключение, чтобы ответить на ваш вопрос более прямо: нужны ли вам гибкие процессы, когда ваши требования неизменны? Точно нет! Они пригодны для использования? Возможно - да! Они стоят вашего времени? Вероятно, нет - но ваши требования неизменны? В моем прошлом опыте «неизменяемые требования» => «ленивый владелец продукта» - не правило, но стоит помнить.


3
+1 за « Это не правда. Вы можете поддерживать подмножество языка и при этом иметь компилятор, который работает при определенных условиях. Конечно, менее ценный, чем полноценный компилятор, но все же ценный». Потому что это создает тестируемый и пригодный для использования модуль до конец разработки.
Росс Паттерсон

2
А также «Один из способов измерить это -« сколько еще строк кода мы можем скомпилировать на существующей базе кода »или« сколько еще тестов пройдено », если у вас есть предопределенный набор тестов». - Я считаю, что важно уметь демонстрировать прогресс.
Дейв Хиллиер,

+1, хотя здесь я упускаю один момент: требования к компилятору можно также сократить «по горизонтали» вместо «поддерживает языковую функцию X». Компилятору может потребоваться оптимизировать вещи (собственное требование), может выводить отладочную информацию (собственное требование), может соответствовать некоторым требованиям к производительности и так далее.
Док Браун

Требования @DocBrown могут быть горизонтальными, но истории должны быть вертикальными.
Sklivvz

«Как пользователь компилятора я хочу войти DavesCompiler -O9 program.c, и вывод должен быть высокооптимизированной версией program.c (более формальное определение того, что означает высокооптимизированное средство)» - звучит для меня как разумная пользовательская история.
Док Браун

4

TL; DR

Все элементы управления проектами добавляют накладные расходы. Не добавляйте накладные расходы, которые вам не нужны.

Scrum - неправильный молот здесь (не будь гвоздем)

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

Кроме того, когда вы говорите:

Все истории имеют одинаковый приоритет, и не важно, в каком порядке я их доставляю. Мне нужно сделать их все.

вы подразумеваете пару вещей:

  1. Проект имеет нулевую ценность, если все истории не завершены на 100%.
  2. Истории не зависят друг от друга.

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

Предлагаемые альтернативы

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

  1. Убедитесь, что все ваши истории имеют «определение выполненного», которое включает в себя юнит-тесты и приемочные испытания.
  2. Интеграция и рефакторинг часто; не оставляйте себя с гигантской интеграционной задачей в конце проекта.

Кроме того, даже если ваш продукт действительно имеет нулевую ценность, если не все истории сделаны, я бы потратил некоторое время на группирование историй по темам, которые вы можете рассматривать как завершенные этапы. Возможность сказать «Я выполнил функцию foo» часто более полезна, чем сказать «У меня 23/117 случайных историй». YMMV.


1
Я не претендовал на статус отдельного разработчика.
Дейв Хиллиер,

@DaveHillier "У меня есть существующий язык ... Я, вероятно, попытаюсь это ... Я планирую попытаться следовать за Scrum." Ничто из этого не говорит о командах, других людях или необходимости формального управления проектами. Даже если над проектом работает 347 человек, ответ остается в силе, если ваша предпосылка верна. Если нет, обновите свой вопрос, и я сделаю все возможное, чтобы обновить ответ соответствующим образом.
CodeGnome

1
Никто другой не сделал такого предположения. Я согласен с тем, что вы написали.
Дейв Хиллиер,

4
@DaveHillier Я прочитал ваш вопрос так же, как CodeGnome, что вы будете сольным разработчиком этого проекта. Злоупотребление Iвместо вместо, Weвероятно, почему.
Изката

Неправильный инструмент, а не неправильный молоток. Молоток - это молоток, не все проблемы - это гвозди :-)
Sklivvz

2

Я понимаю ваши опасения, но я верю, что использование скрама для вас все еще полезно.

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

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

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

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

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


0

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

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


Scrum is not a set of strict rules to follow- Я думал, что это наоборот. Разве это не похоже на то, что у него есть только несколько правил, но вы должны придерживаться их (например, ежедневные заезды, определение выполненного, сюжетные пункты)?
Uooo


@ Уууу, только первая из трех, о которых вы упомянули, это Scrum, остальные - просто хорошие практики, но не строго фундаментальные.
Sklivvz

@Sklivvz Вот почему многие руководители проектов думают, что «мы делаем ежедневные резервы, поэтому мы делаем скрам» ? Скрам - это больше, чем просто ежедневные приемы.
Uooo

1
@Sklivvz хорошо, теперь я понимаю, что ты имеешь в виду :-) Я думал, что ты имел в виду только делать standups уже скрам
Uooo
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.