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

Разбиение системы на модули должно быть осуществлено таким образом, чтобы изменения в большей части случаев затрагивали только один, редко два или больше, модуля (см. Single Responsibility Principle). Также модули необходимо создавать с расчетом на их дальнейшее переиспользование в других комбинациях для других систем.

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

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