Причины не переоценивать решение текущей проблемы

G'day,

Размышляя над этим вопросом о том, как переоценить возможные будущие изменения, это заставило меня задуматься.

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

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

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

Я говорю о том, что делать, когда люди настаивают на добавлении или использовании посторонних функций, чтобы "мы могли использовать их где-то еще на каком-то этапе в будущем?"

8 ответов

Решение

Множество веских причин в Википедии.

http://en.wikipedia.org/wiki/You_Ain%27t_Gonna_Need_It

  • Время, затраченное на добавление, тестирование или улучшение необходимой функциональности.
  • Новые функции должны быть отлажены, задокументированы и поддерживаться.
  • Любая новая функция налагает ограничения на то, что может быть сделано в будущем, поэтому ненужная функция теперь может помешать реализации необходимой функции позже.
  • Пока функция действительно не нужна, сложно полностью определить, что она должна делать, и протестировать ее. Если новая функция не определена должным образом и не протестирована, она может работать неправильно, даже если она в конечном итоге понадобится.
  • Это приводит к раздуванию кода; программное обеспечение становится больше и сложнее.
  • Если нет спецификаций и какого-либо контроля версий, эта функция может быть неизвестна программистам, которые могут ее использовать.
  • Добавление новой функции может предложить другие новые функции. Если эти новые функции также будут реализованы, это может привести к эффекту снежного кома в сторону ползучего фатуризма.

Смотрите также: http://en.wikipedia.org/wiki/KISS_principle

Они: "Мы могли бы использовать это где-нибудь еще на каком-то этапе в будущем".

Я: "Да, мы можем. И мы не можем. И мы не можем сейчас знать, каким образом мы могли бы хотеть. И если мы действительно хотим этого на каком-то этапе в будущем - это время, когда мы будем знать, как мы этого хотим. Именно тогда мы можем написать это с уверенностью. С другой стороны, если мы пишем это сегодня, но никогда не нуждаемся в этом, мы потратили впустую ресурсы на разработку того, что нам не нужно. И мы Мы добавили к нашему раздутию кода, поэтому труднее найти части нашей кодовой базы, которые используются, потому что у нас есть весь этот (в настоящее время) ненужный код, вытесняющий полезные вещи ".

Особенно на встроенном устройстве размер - это деньги (скажем, большая часть Flash, которая стоит дороже и требует больше времени на программирование при изготовлении; или больше периферийных компонентов).

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

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

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

В нашей команде мы просто говорим "ЯГНИ". Это напоминает людям почему. В Интернете более чем достаточно информации о YAGNI, если вы считаете, что вам нужно сопоставить ее для предоставления отчета.

На самом деле, если кто-то скажет вам "ЯГНИ" в нашей команде, это немного урезает, потому что это все равно, что сказать "Да ладно, ты знаешь лучше", что всегда немного ранит.:)

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

Если вы принимаете постороннюю функциональность (которая, вообще говоря, отличается от чрезмерного дизайна), вам нужно - снова - принять расходы, которые сопутствуют ей (время ==> деньги), - если вы не можете позволить себе эти дополнительные расходы, то вы получили свой ответ:)

Существует большая разница в обеспечении будущей функциональности и добавлении будущей функциональности. Хороший дизайн должен иметь "крючки" или что-то еще, чтобы обеспечить новые функции или модификации.

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

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

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

Ты говоришь

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

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

Другие вопросы по тегам