Знаете про такую штуку, как закон Конвея? Он формулируется примерно так: организации проектируют системы, которые копируют структуру коммуникаций в этой организации.
Ну то есть, если рассмотреть на практике, то архитектура IT проектов компании и связанность между, будет в напоминать структуру отделов этой компании.
Так вот я всегда этот закон не считал законом. Я его относил к эвристическим утверждениям, типа CAP-теоремы, закона Мура и теоремы Эскобара. То есть это конечно интересное наблюдение, но теоретической и доказательной базы у него нет – это просто удобная мыслительная модель.
Однако, наткнулся на вот такое исследование от парней из Гарварда, где в общем-то они придумали, как оцифровать связанность проектов и в общем подтвердили закон Мура на практике.
Из интересного:
1️⃣ Какие брали данные. Взяли 5 пар компаний в пяти разных областях продуктов: Финансовый менеджмент, текстовые процессоры, операционные системы, табличный редакторы, базы данных. Сравнили между собой слабосвязанные и сильносвязанные системы, к примеру MySQL и BerkleyBD. Первую разрабатывают 60 организаций-контрибуторов из 25 стран. Вторую соответственно одна организация-контрибутор из одной страны. (пояснительный дикпик 2)
2️⃣ Как определили что такое сильносвязанные и слабосвязанные оргструктуры. Связанность организационной структуры считали вот по этой таблице (пояснительный дикпик 1). К примеру, в ней есть параметр "цель", в сильносвязанных оргструктурах она была расшаренной и явной, а в слабосвязанных разнообразные, неявные.
3️⃣ Как определили связанность архитектуры кода. Связанность программной архитектуры смотрели по связанности файлов исходного кода. Связанность между файлами определяли через Function Call. (пояснительные дикпики 3 и 4)
4️⃣ Какую метрику определили как ключевую для сравнения между проектами. На основе связи между файлами строили граф, в котором учитывали длинны путей, на основе которых построили метрику Propagation Cost, которая показывала стоимость изменений в каждом файле.
5️⃣ Самые интересные цифры:
Стоимость распространения (propagation cost) для открытых и коммерческих продуктов:
Пара финаносовый менеджмент:
Открытый продукт - 7.74%
Коммерческий продукт - 47.14%
Пара текстовые редакторы:
Открытый продукт - 8.25%
Коммерческий продукт - 41.77%
Пара таблицы:
Открытый продукт - 23.62%
- самая крупная стоимость из всех слабосвязанных продуктов!
Коммерческий продукт - 54.31%
Пара операционные системы 1:
Linux - 7.18%
Solaris - 22.59% (потенциально может затронуть более 2,400 других файлов при изменении)
Пара операционные системы 2:
Linux - 7.21%
XNU - 24.83%
Пара базы данных:
Открытый продукт - 11.30%
Коммерческий продукт - 43.23%
6️⃣ Неожиданный поворот для одного из опенсорсных проектов – оказалось, что он самый сильносвящзанный среди слабосвязанных! То есть в среднем по статистике в слабсвязанных системах стоимость изменения была на порядок ниже. Однако в случае табличного редактора разница оказалась не столь значительной! Ребята посмотрели отдельно стурктуру контрибьюторов открытого проекта и оказалось, что в ней присутствует сильная связанность! Так как основных мейнтейнеров в проекте оказалось мало и они тесно взаимодейстовали между собой!
🅰️ Итого: Короче, к какому выводу мы можем прийти? Закон Конвея – релаьно закон, у которого есть статистическое хорошее обоснование и эксперимент. То есть как у вас выстроена структура компании плюс-минус такая будет и структура проектов. Такие дела!
Тут я не все описал подробно. Про Propagation Cost хочется возможно написать отдельно, как эта штука устроена, и как она выводилась для отдельных файлов, а затем для всего проекта в целом.