Источник
Эволюционная архитектура на практике
Конспект доклада: инкрементальность, fitness functions и coupling.
Эволюционная архитектура — это практический способ управлять неизбежными изменениями, когда продукт растёт, команда масштабируется, а архитектурные решения начинают влиять на скорость и качество поставки.
Контекст: почему тема возникает
Драйверы изменений
- Рост клиентов и продуктовых направлений увеличивает стоимость изменений.
- Больше интеграций между продуктами → больше зависимости и организационной сложности.
- Команды дробятся на stream-aligned, архитектура следует за оргструктурой (закон Конвея).
Ключевая мысль
Архитектура должна помогать изменяться, а не превращаться в стоп-фактор. Эволюционная архитектура — про управление качествами в условиях постоянных изменений.
Что такое архитектура в этой теме
Архитектура как набор важных решений
Решения, которые сложно и дорого менять, поэтому их нужно делать осознанно.
Архитектура как границы и траектория
Определяет не только текущее устройство, но и направление развития системы.
Что значит «эволюционная»
Видео
Доклад: Эволюционная архитектура на практике
Tinkoff Agile Conference 2021, Александр Поломодов.
Инкрементальность
Маленькие шаги проще строить, тестировать и выкатывать.
Управляемость
Изменения должны оставаться в заданных границах качества.
Инкрементальность даёт профит
- Build: маленькие изменения проще реализовать и проверить.
- Deploy: небольшие поставки безопаснее и быстрее откатываются.
- Product: проще маппить бизнес-фичи на архитектуру.
Три блока эволюционной архитектуры
Книга
Building Evolutionary Architectures
Fitness functions, architectural quantum и практика эволюции архитектуры.
Инкрементальные изменения
Строим систему так, чтобы изменения делались небольшими и частыми.
Fitness functions
Автоматизированные проверки, удерживающие архитектуру в нужных рамках.
Appropriate coupling
Связность между компонентами позволяет им эволюционировать независимо.
Визуальная карта эволюции
Поток изменений
Инкрементальные изменения
Маленькие изменения проще делать, тестировать и выкатывать.
Fitness functions
Проверки, которые удерживают качество и ограничения.
Appropriate coupling
Компоненты меняются независимо, без эффекта домино.
Формула
Инкрементальность + управляемость
Без управляемости инкременты превращаются в спагетти.
Guardrails
Инкрементальные изменения: да, но…
Бесконтрольные итерации превращают систему в «спагетти» — как на уровне кода, так и на уровне интеграций между сервисами. Это приемлемо для прототипа, но для боевой системы нужны рамки.
Fitness functions и архитектурные характеристики
Что это такое
Architectural fitness function — измеримая проверка, которая подтверждает, что система остаётся пригодной для изменений в заданных рамках.
Характеристики
Как строить рамки
- Определить архитектурные характеристики (…ility).
- Назначить приоритеты и допустимые бюджеты.
- Перевести бюджеты в тесты, метрики, проверки.
- Автоматизировать и прогонять в CI (каждый PR).
Инструменты из доклада
- ArchUnit — правила архитектуры через unit-тесты (Java)
- Danger — автоматизация проверок code review в CI
- Fitv / Fitness Validator — внутренний инструмент для контроля правил и техдолга
Coupling: как компоненты «эволюционируют»
Книга
Clean Architecture
Принципы стабильности и абстрактности для эволюции компонентов.
Stable Dependencies Principle (SDP)
Зависимости направлены в сторону более стабильных компонентов.
Stable Abstraction Principle (SAP)
Компонент должен быть настолько же абстрактным, насколько стабилен.
Метрики стабильности
Ce — исходящие зависимости, Ca — входящие зависимости.
Main Sequence
Zone of Pain
Стабильные, но конкретные компоненты — больно расширять.
The Main Sequence
Баланс стабильности и абстрактности — здоровая зона.
Zone of Uselessness
Нестабильные абстракции, которые никто не использует.
Когда пора эволюционировать
Слишком большой софт для одной команды
Команда не держит контекст целиком — возрастает количество ручных договорённостей.
Проблемы со скоростью поставки
Увеличивается lead time, растёт доля блокировок между командами.
Чрезмерная когнитивная сложность
Системы и процессы требуют слишком много контекста для работы.
Изменения архитектуры и изменения команд связаны: по закону Конвея системы отражают коммуникации и структуру организации.
Что дальше
- Сначала — зафиксировать архитектурные характеристики и бюджеты.
- Добавить fitness functions в CI и в культуру команды.
- Регулярно пересматривать coupling и следить за Main Sequence.
- Для углубления: "Building Evolutionary Architectures" и "Clean Architecture".Читать обзор
