Добавление функций в программный продукт всегда вызывает дополнительные изменения в проекте, а эти изменения не всегда очевидны. Влияние расширения функционала на различные аспекты разработки зависит и от того, когда изменения поступили, и от того, каков их объём, и от их связанности с другими функциями.
Сложность разработки при увеличении числа функциональных возможностей возрастает нелинейно
То есть сложность разработки комплексного продукта с множеством функций выше, нежели сложность реализации эти функций изолированно. Усложнение проявляется сильнее, если функции тесно взаимосвязаны между собой: реализация 2х функций по отдельности может занимать не так уж и много времени, а вот на работы по обеспечению их взаимодействия может уходить в разы больше ресурсов. А сложность, в свою очередь, влияет на стоимость и сроки разработки.
Большее количество функций порождает большее количество ошибок
Не существует сложных программных систем, вовсе не содержащих ошибок. И зависимость от функциональности тут прямая — чем больше реализовано возможностей в продукте и чем более сложной является бизнес-логика, тем больше количество ошибок и тем выше вероятность сбоев. Ошибки в ПО, разумеется, выявляются и исправляются, но часто это происходит уже после выпуска программного продукта. Особенно часто остаются скрытыми ошибки, связанные с интеграцией нескольких компонентов между собой — количество комбинаций граничных условий для проверки всех возможных вариантов взаимодействия может превышать все разумные пределы.
Динамичное и интенсивное добавление функций приводит к снижению надёжности системы
Высокий темп внесения изменений всегда приводит к снижению стабильности программной системы. Любой добавленный функционал требует тестирования и «обкатки» для выявления и исправления ошибок, а это немало времени, которого часто просто нет. Также стоит отметить тот факт, что затраты на тестирование и отладку не только временные, но и финансовые. Любой релиз — это всегда затраты времени и денег на его подготовку, тестирование и запуск. Таким образом, если продукт должен очень динамично обновляться, то надо предусмотреть и затраты на этот процесс.
Архитектура программных продуктов не всегда выдерживает кардинальные изменения
Если программный продукт изначально разрабатывался под одни задачи, а потом было принято решение серьёзно изменить или усложнить бизнес-логику, то заложенная изначально архитектура может уже не подходить под новые непредвиденные задачи и переделки потребуют уже реализованные компоненты. В этом случае бюджет и сроки проекта по разработке возрастают опять же нелинейно относительно сложности задачи.