Balancing Coupling in Software Design - GoTo Book Club 2025
В недавнем интервью для GOTO 2025 Влад Хононов представил свою новую книгу "Balancing Coupling in Software Design" в беседе с Шином Брисалсом. Про книги и выступления Влада я уже как-то рассказывал раньше
- Про его книгу "Learning DDD", на которую я написал 4 кратких обзора: общий обзор DDD, DDD и микросервисы, DDD и event-driven architecture, DDD и data mesh
- Про его выступление "Сложность и модулярность две стороны одной медали" на ArchDays с частью истории про coupling еще до публикации книги (1 и 2) А вот интервьюера я видел в первый раз, хотя Шин Брисалс тоже автор книги "Serverless Development on AWS: Building Enterprise-Scale Serverless Solutions" (O'Reilly, 2024), который специализируется на помощи командам в проектировании, создании и эксплуатации устойчивых serverless-решений
Основными темами интервью были
- История исследования coupling в системах - здесь Влад рассказывает, как неудачный проект с микросервисами подтолкнул его к глубокому изучению принципов coupling в архитектуре ПО
- Вневременная природа проблем проектирования - несмотря на эволюцию технологий, базовые принципы проектирования и управления связями остаются неизменными на протяжении десятилетий. Влад вдохновлялся книгами 70-х годов
- Три измерения связей: интеграционная сила (knowledge sharing), дистанция и волатильность - фундаментальная модель для оценки связей между компонентами. Ниже представлены основные идеи об этих трех измерениях, хотя собеседники их прямо отдельно не проговаривали -- Оценка силы интеграции между компонентами является ключевой, начиная от интрузивной связи (высокий обмен знаниями) до контрактной связи (низкий обмен знаниями). -- Когда физическое расстояние между компонентами увеличивается (например, переход к микросервисам), связь должна быть сбалансирована за счет сокращения общих знаний (например, с четкими контрактами API и отсутствием прямого доступа к данным). -- Прогнозирование и управление изменчивостью, т. е. скоростью изменений, также имеет решающее значение при проектировании для соответствующего уровня связи. Если один компонент, например устаревшая система, не должен меняться, то высокая сила интеграции или большое расстояние не являются проблемой.
- Декомпозиция проблем и оценка сложности - подходы к разбиению сложных задач и объективной оценке их сложности с учетом неопределенности
- Локальная vs глобальная сложность - как оптимизация локальной сложности отдельных компонентов может привести к увеличению глобальной сложности системы
- Модульность как противовес сложности - модульность является ключом к созданию масштабируемых и поддерживаемых систем
- Границы знаний и абстракции - как правильные абстракции создают эффективные границы знаний между компонентами
- Креативный подход к техническому писательству - использование поэзии в технической книге для лучшего донесения сложных концепций (здесь Влад рассказывает как genAI помогал ему писать стихи для этой книги)
Если обобщать, то эта книга получилась не такой легкой как "Learning DDD", но она все равно очень полезна для всех, кто стремится создавать гибкие, масштабируемые и поддерживаемые программные системы через правильное управление связями между компонентами.
#Software #Architecture #DistributedSystems #SystemDesign #Patterns #Sofware #Metrics #Management