Що таке МММ
Спершу я хочу пояснити контекст Закону Брука. Яке припущення змусило його створити ще в 1975 році?
Чоловік-місяць - це гіпотетична одиниця роботи, що представляє роботу, виконану однією людиною за один місяць; Закон Брукса говорить, що неможливо виміряти корисну роботу за людину-місяці.
джерело: https://en.wikipedia.org/wiki/The_Mythical_Man-Month
Тоді складні програми програмування означали б великі монолітні системи. І Брукс стверджує, що вони не можуть бути ідеально розділені на дискретні завдання, над якими можна працювати без спілкування між розробниками та без встановлення набору складних взаємозв'язків між завданнями та людьми, які їх виконують.
Це дуже вірно у високо згуртованих програмних монолітах. Скільки б не було зроблено розв’язки, все ж великий моноліт вимагає часу, щоб нові програмісти дізналися про моноліт. І збільшені витрати на спілкування, що потребуватиме постійно зростаючої кількості доступного часу.
Але чи справді це має бути таким? Чи потрібно писати моноліти і тримати канали зв'язку n(n − 1) / 2
там, де n
кількість розробників?
Ми знаємо, що є компанії, де тисячі розробників працюють над великими проектами ... і це працює. Тож має бути щось, що змінилося з 1975 року.
Можливість пом'якшити MMM
У 2015 році PuppetLabs та IT Revolution опублікували результати звіту про стан DevOps за 2015 рік . У цьому звіті вони акцентували увагу на різниці між високопродуктивними організаціями та неефективними.
Високопродуктивні організації демонструють деякі несподівані властивості. Наприклад, вони мають найкращі проектні терміни, що відбулися в процесі розробки. Найкраща експлуатаційна стабільність та надійність в експлуатації. А також найкращий досвід безпеки та дотримання вимог.
Однією з дивовижних речей, висвітлених у звіті, є показник розміщення за день. Але не тільки розгортання на день, вони також вимірювали розгортання / день / розробник, і який ефект додає більше розробників у високопродуктивних організаціях порівняно з неефективними.
Це графік цього звіту -
Хоча низькопродуктивні організації узгоджуються з припущеннями Міфічного чоловіка місяця. Високопродуктивні організації можуть масштабувати кількість розгортань / день / розробку лінійно за кількістю розробників.
Відмінна презентація на DevOpsDays London 2016 Джона Кіма розповідає про ці висновки.
Як це зробити
По-перше, як стати високоефективною організацією? Є кілька книг, які розповідають про це, недостатньо місця в цій відповіді, тому я просто посилаюся на них.
Для програмних та ІТ-організацій одним з найважливіших факторів для досягнення високоефективної організації є: орієнтація на якість та швидкість .
Наприклад, Уорд Каннінгем пояснює технічний борг, оскільки всі речі, які ми дозволяли залишати нефіксованими. Це приймається керівництвом, оскільки це завжди приходить з обіцянкою, що це буде виправлено, коли буде час.
Ніколи не вистачає часу, а технічна заборгованість просто стає все гіршою і гіршою.
Які ці речі викликають зростання технічної заборгованості?
- спадковий код
- ручна конфігурація середовищ
- ручне тестування
- ручне розгортання
Спадковий код Як визначено в « Ефективній роботі зі застарілим кодом » Майкла Пірса, це будь-який код, який не має автоматизованого тестування.
Будь-які скорочення використовуються для отримання коду до виробництва; операції обтяжені збереженням цього боргу назавжди. Тоді процес розгортання стає все довшим і довшим.
Джин розповідає історію у своїй презентації про компанію, яка має шість тижнів розгортання. Залучивши десятки тисяч надзвичайно схильних до помилок кропітких кроків, зв’язуючи 400 людей, і вони роблять це чотири рази щороку.
Одним із принципів DevOps є те, що надійність виходить із частішого розгортання.
Приклад
Ці дві презентації показують все, що Amazon зробив для скорочення часу, необхідного для розгортання коду для виробництва.
За словами Джина, єдине, що змінюється з часом у цих високоефективних організаціях, - це кількість розробників. Отже, з прикладу Amazon можна сказати, що за чотири роки вони збільшили розміщення в десять разів, просто додавши більше людей.
Це означає, що за певних умов, при правильній архітектурі, правильній технічній практиці, правильних культурних нормах, продуктивності розробників можуть масштабуватися у міру збільшення кількості розробників. І DevOps, безумовно, в середині всього цього.