Как я могу избежать ползучести в сольном проекте?

12

Итак, у меня есть программа, над которой я работал в 2011 году и до 2012 года, но последний выпуск был в декабре 2011 года . Я активно работал над этим, но функция creep заманила его уродливую голову, и теперь он заполнен тоннами незаконченных функций.

Плохая часть заключается в том, что, когда я реализую функцию, появляется новая. Что я могу сделать, чтобы в будущем не сползать, чтобы я мог выпустить релиз через год ?

Проект основан на iOS и имел обыкновение выпускать релизы по каждому обновлению версии iOS, но последний вернулся с 5.1 (2011). Я хотел бы иметь возможность вернуть этот устойчивый цикл выпуска, но он оказался слишком сложным.

Коул Джонсон
источник
8
Не могли бы вы быть более конкретным в своем вопросе, откуда берутся эти функции? Кто несет ответственность за функцию ползучести? Вы? Бизнес-аналитики? Президент компании? Требования пользователей? Трудно дать совет о том, как управлять крипом, не зная, каков источник. Кроме того, потому что мне нравится Дилберт: search.dilbert.com/comic/Feature%20Creep ;)
FrustratedWithFormsDesigner
1
Вы единственный разработчик в этом проекте? Крупные командные проекты считают необходимым иметь вехи, чтобы сделать графики доставки управляемыми, но те из нас, кто летает в одиночку, также могут извлечь выгоду из таких методологий, как разработка на основе функций .
hardmath
@FrustratedWithFormsDesigner Я единственный разработчик
Коул Джонсон
1
@FrustratedWithFormsDesigner нет. Я один. Если вы не считаете Source Forge человеком, который работает над проектом , я единственный.
Коул Джонсон
4
Доставка - это тоже особенность ... Иногда это просто необходимо учитывать при рассмотрении (еще) другой функции.
Марьян Венема

Ответы:

21

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

  1. Запишите функции и дайте им оценку, которая отражает, насколько вы хотите работать над ним, и насколько вы думаете, что это принесет пользу пользователю (может быть возможно привлечь реальных пользователей для этого). Затем напишите их в таком порядке.
  2. Прежде чем проверять / выдвигать функцию, убедитесь, что у вас есть стабильная, развертываемая сборка (для этого рекомендуется использовать систему CI).

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

Замечания:

  • Этой функции никогда не может быть присвоен более высокий приоритет, чем той, над которой вы работаете (или она может, но не может прерывать ту, над которой вы работаете). Это может произойти дальше, но не сейчас . Это означает, что когда вы переходите от настоящего к следующему, у вас будет возможность сократить сборку релиза, если хотите.
Стивен Эверс
источник
Очень полезно! Мне нравится несколько строгость этого.
Коул Джонсон
Я бы добавил: не запускайте новую функцию, пока не закончите новую. В противном случае вы получите свободную базу кода, которая ничего не сможет сделать.
Тианна
@Tyanna: Вот что я имел в виду под «функцией никогда не может быть дан более высокий приоритет, чем той, над которой вы работаете ... она не может прерывать ту, над которой вы работаете ...»
Стивен Эверс
7

Ответ банален и часто невозможен: откажитесь от добавления дополнительных функций.

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

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

Хороший обзор по планированию можно найти на сайте Joel on Software:

http://www.joelonsoftware.com/articles/fog0000000245.html

Майкл
источник
9
Поскольку он полностью одинок в проекте, ему, возможно, придется отдать на аутсорсинг работу по наложению запроса на функцию.
Филипп
2

Один из самых важных уроков в развитии - это знать, когда пора остановиться.

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

Привычка, в которую вы хотите войти, - перестать думать о выпуске / версии как о «законченном» проекте. Скорее, рассматривайте развитие как долгосрочный процесс. Думайте о релизах как о вехах на пути к тому, что вы когда-нибудь надеетесь, что программа будет. Таким образом, релиз / версия - это просто снимок того, где вы находитесь в долгосрочном процессе ... снимок, который был хорошо округлен и протестирован.

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

Когда я запускаю новое приложение, я обычно думаю об окончательном «видении» приложения. Это то, что я хочу в версии 3 приложения. С этим тестом у меня есть представление о том, что сделает основную версию 1 - только основы.

Резюме:

Каждый релиз не обязательно должен быть законченным «видением» проекта. Просто веха к этому видению.

GrandmasterB
источник
2

Используйте систему управления версиями, в которой дешево создать ветку для какой-либо идеи, и не пускайте ее в путь выпуска. Например git, вы можете «подкрасться» к какой-то идее, а потом git stashее убрать. Позже вы можете просмотреть эти тайники и выбрать их в любом порядке.

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

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

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

Kaz
источник