Что такое МММ
Сначала я хочу объяснить контекст для закона Брука. Какое предположение заставило его создать его еще в 1975 году?
Человеко-месяц - это гипотетическая единица работы, представляющая работу, выполненную одним человеком за один месяц; Закон Брукса гласит, что невозможно измерить полезную работу в человеко-месяцах.
источник: https://en.wikipedia.org/wiki/The_Mythical_Man-Month
Когда-то сложные программные проекты означали бы большие монолитные системы. И Брукс утверждает, что они не могут быть полностью разделены на отдельные задачи, над которыми можно работать без связи между разработчиками и без установления комплекса сложных взаимосвязей между задачами и людьми, выполняющими их.
Это очень верно в отношении высокосвязных программных монолитов. Независимо от того, сколько разделений сделано, большой монолит требует времени, необходимого новым программистам для изучения монолита. И увеличенные накладные расходы на связь, которые будут занимать все большее количество доступного времени.
Но так ли это должно быть на самом деле? Нужно ли нам писать монолиты и сохранять каналы связи n(n − 1) / 2
там, где n
число разработчиков?
Мы знаем, что есть компании, в которых тысячи разработчиков работают над большими проектами ... и это работает. Так что должно быть что-то, что изменилось с 1975 года.
Возможность смягчения МММ
В 2015 году PuppetLabs и IT Revolution опубликовали результаты отчета о состоянии DevOps за 2015 год . В этом отчете они сосредоточились на различии между высокопроизводительными организациями и неэффективными.
Высокопроизводительные организации показывают некоторые неожиданные свойства. Например, они имеют лучшие сроки исполнения проекта в разработке. Лучшая эксплуатационная стабильность и надежность в эксплуатации. А также лучшая репутация в сфере безопасности и соответствия.
Одна из удивительных вещей, выделенных в отчете, - это показатель развертываний в день. Но не только развертывания в день, они также измеряли развертывание / день / разработчика и каков эффект от добавления большего числа разработчиков в высокопроизводительных организациях по сравнению с низкоэффективными.
Это график из этого отчета -
В то время как малоэффективные организации согласуются с предположениями о Мифическом Месяце Человека. Высокопроизводительные организации могут масштабировать число развертываний / день / dev линейно с количеством разработчиков.
Об этой находке рассказывает отличная презентация Джина Кима на DevOpsDays London 2016 .
Как это сделать
Во-первых, как стать высокопроизводительной организацией? Об этом говорится в нескольких книгах, в этом ответе недостаточно места, поэтому я просто сделаю ссылку на них.
Для организаций, занимающихся программным обеспечением и ИТ, одним из важнейших факторов становления высокопроизводительной организации является: ориентация на качество и скорость .
Например, Уорд Каннингем объясняет технический долг как все то, что нам разрешено оставить нефиксированным. Это принято руководством, потому что оно всегда обещает, что будет исправлено, когда будет время.
Времени всегда не хватает, а технический долг становится все хуже и хуже.
Что это за вещи, которые вызывают технический долг?
- устаревший код
- ручная настройка сред
- ручное тестирование
- ручное развертывание
Устаревший код Как определено в книге «Эффективная работа с унаследованным кодом » Майкла Фезерса, это любой код, который не имеет автоматического тестирования.
Любые ярлыки времени используются для запуска кода; операции обременены обслуживанием этого долга навсегда. Тогда процесс развертывания становится все длиннее и длиннее.
Джин рассказывает историю в своей презентации о компании, которая работает в течение шести недель. Вовлечение десятков тысяч чрезвычайно утомительных шагов, склонных к ошибкам, связывание 400 человек, и они будут делать это четыре раза в год.
Один из принципов DevOps заключается в том, что надежность достигается за счет более частого развертывания небольших приложений.
пример
Эти две презентации показывают все, что Amazon сделала для сокращения времени, необходимого для развертывания кода в рабочей среде.
По словам Джина, в этих высокопроизводительных организациях со временем меняется только количество разработчиков. Итак, из примера с Amazon можно сказать, что за четыре года они увеличили свои развертывания в десять раз, просто добавив больше людей.
Это означает , что при определенных условиях, с правом архитектуры, правильные технические методы, правильные культурные нормы, производительность труда разработчиков может масштабировать как число разработчиков увеличивается. И DevOps определенно находится в центре всего этого.