Закон Конвея

Закон Конвея — это принцип, утверждающий, что организации, проектирующие системы, вынуждены создавать проекты, копирующие структуры коммуникаций внутри этих организаций. Сформулирован Мелвином Конвеем (Melvin Conway) в статье «How Do Committees Invent?», опубликованной в журнале Datamation в апреле 1968 года.

«Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.» — Melvin Conway, How Do Committees Invent? (Datamation, 1968)

В соответствии с законом Конвея, когда организация создает новую систему, её архитектура в значительной степени определяется тем, как между людьми распределена работа и как они общаются. Команда из четырёх человек, работающих над одним модулем, почти неизбежно создаст монолитный компонент; команда, разбитая на независимые подгруппы, — систему из слабо связанных сервисов.

Влияние организации на архитектуру

Структуры коммуникации внутри организации влияют на способ взаимодействия различных компонентов системы и определяют её общую структуру. Однако, по мере того как система начинает функционировать, она сама становится фактором, ограничивающим дальнейшее развитие: предприятия оказываются связаны со сложившейся архитектурой, а изменить её без перестройки команд сложно.

Один из примеров применения закона Конвея — попытка разработчиков изменить архитектуру системы, не учитывая структуры коммуникации внутри организации. Такие попытки часто приводят к конфликтам: команда, формально ответственная за один модуль, физически не может изменить другой, потому что «не её это зона», — и проект буксует. Это не проблема характера, а прямое следствие того, что границы кода повторяют границы команд.

Обратный манёвр Конвея (Inverse Conway Maneuver)

Главное современное практическое применение закона — Inverse Conway Maneuver (обратный манёвр Конвея): сознательная перестройка организационной структуры ради получения желаемой архитектуры. Вместо того чтобы пытаться «сломать» команду под готовый код, руководство меняет состав и границы команд так, чтобы естественным результатом их взаимодействия стала нужная архитектура.

Этот подход особенно важен при переходе к микросервисам: границы сервисов должны совпадать с границами команд (см. закон Голла о выращивании систем и концепцию Conway’s Law + microservices). Эмпирическое подтверждение закона получено в исследовании MIT (MacCormack, Rusnak, Baldwin, 2012): архитектура крупных проектов действительно повторяет оргструктуру их создателей.

Как использовать закон

Чтобы избежать негативных последствий закона Конвея, разработчики должны учитывать структуры коммуникации внутри организации при проектировании системы и работать в тесном сотрудничестве друг с другом. Существующие структуры коммуникации можно использовать для организации команд, занимающихся конкретными модулями: это повышает производительность, так как команды получают лучшую координацию и быстрее решают задачи.

С другой стороны, неправильное использование закона приводит к созданию сложных и неэффективных систем: если в организации плохая структура коммуникации, отражением этого станет запутанное и неудобное в поддержке ПО. Закон Конвея — фундаментальный принцип проектирования, указывающий на необходимость учёта коммуникаций при создании программных систем.