Об универсальности
О чём напоминают Вам слова «мы разрабатываем универсальное решение»? Мне они напоминают о сдвигаемых сроках, неожиданно обнаруживаемых ограничениях и о чувстве горечи от костылей, которые выглядывают из недавно прекрасного решения.
Как возникают эти костыли?
Теория
Мы называем универсальным то, что подходит под широкий, но конечный спектр ситуаций.
Ложка является универсальным предметом, если мы говорим о еде, но редко может заменить вилку. Универсальные клеи имеют на упаковках перечни материалов, которые они склеивают. Универсальный крем для обуви предназначен для обуви, нет широкого понятия "Универсальный крем".

Не бывает же просто универсального крема, не так ли?
На деле универсальность связана с конечным набором вариантов применения.
Слова «универсальность» и «ограниченность», кажущиеся антонимами, должны идти рука об руку не расставаясь ни на секунду — они не существуют друг без друга.
Невозможность широкой унификации
Попытка широко унифицировать, зачастую, происходит из предположения, что текущее сложно-управляемое легаси избыточно сложно просто по историческим причинам. На самом деле, такой попыткой рулит комплекс из (но это не точно):
- Отсутствия документированных бизнес-требований.
- Веры в чисто исторические причины. Нежелание разобраться.
- Веры в единое или универсальное решение. Коварное слово — «единое».
Вера в «единое» есть бегство сознания от избыточной сложности.
Комплекс этот взаимо-поддерживающийся — одна вера или ощущение укрепляет другую.
Однако, как видно из теории выше, универсальность без ограничений невозможна.
Возможность узкой унификации
Иногда, что-то невозможно исследовать — компания велика, нет ни одного человека, который знал бы все процессы, люди ужасно заняты. В этом случае гарантирую, просто нельзя взять и заменить большой кусок системы без страданий и сюрпризов. Надо есть слона по частям.
Есть по частям означает — изменять отдельные, поддающиеся исследованию области в порядке их взаимозависимости.

Слон — есть по частям.
Есть что-то «по частям» это отказ от сильных обобщений. Это означает, не объединять все виды партнёрства или продуктов в одну модель, рассчитывая на её покрытие одной системой. Это означает слабо-связанные домены.
Изоляция частей создаёт малые контексты, в ограничениях которых универсальность становится возможна.
Далее хардкор для архитекторов.
Переход от универсальности к модульности
Надо заранее ограничивать области, чтобы они поддавались исследованию и архитектурной проработке. Противостоять попыткам глобализации некоторых решений. Обозначим этот подход как модульность, где модулем может быть отдельный сервис или система.
Что не может быть модулем?
Модулем не может быть архитектурный блок высокого уровня, объединяющий вещи недоступные для исследования в рамках интервала времени, выделяемого на его архитектурную проработку.
Скажем, выделение блока, объединяющего расчёт комиссий по десяткам разных видов партнёрства, врядли относится к модульности. Это разве что визуально упрощает схемы на уровне корпоративной архитектуры, но при реализации «в лоб» создаёт массу трудностей.
Что может быть модулем?
Модулем может быть архитектурный блок, соответствующий отдельной прикладной задаче или технологический блок.
Например, выделение блока, отвественного за хранение или подтверждение результатов расчётов коммиссий в общем виде.
Модульность на уровне слоёв архитектуры
Пример
Хранилище данных как совокупность принципов и технологий можно считать модулем технологического уровня. Почему? Возможна архитектурная проработка принципов (адаптация, с учётом ресурсов соответствующей квалификации) за разумное время.
Можно реализовывать модели расчётов в хранилище данных по одной как модули прикладного уровня, изолируя одну модель от другой.
Получается, модуль одного слоя архитектуры реализуется поверх модуля другого слоя архитектуры. Это хорошо.
Антипример
Не хорошо, когда в системе невозможно разделить модули прикладного уровня.
Например, если релиз модуля затрагивает сборки, относящиеся ко всей системе, переиспользуются одни и те же справочники и общие функции в разных контекстах, есть взаимное влияние по нагрузкам.
Обычно, плохие не модульные системы предлагаются поставщиками как универсальные. Маркетинг.
Заключение
- Вера в единое универсальное решение, обычно — самообман.
- Кушайте слона по частям.
Настороженно относитесь к разговорам об универсальности.