Які способи пом’якшити наслідки Міфічного місяця людини?


16

Закон Брукса: додавання робочої сили до пізнього програмного проекту робить це пізніше.

У своїй книзі " No Silver Bullet - Сутність та аварії інженерії програмного забезпечення" Фредерік Брукс визначає концепцію Міфічного місяця людини :

Припущення Брукса полягає в тому, що складні програми програмування не можуть бути ідеально розподілені на дискретні завдання, над якими можна працювати без спілкування між робітниками та без встановлення набору складних взаємозв'язків між завданнями та робітниками, які їх виконують .

Починаючи з 1982 року, ми, безумовно, рухалися вперед і накопичили ще трохи досвіду щодо пом'якшення цієї проблеми. Назвіть кілька рішень, які ви успішно застосували у своїй роботі, щоб додати ресурси до проекту, не створюючи більше проблем.


5
Я голосую за те, щоб закрити це питання поза темою, оскільки воно краще вписується в Software Engg. SE ( softwareengineering.stackexchange.com ), а також спричиняє, що це не суворо специфічно для
Devops

2
Це строго специфічне питання DevOps. Це стосується безпосередньо процесу доставки програмного забезпечення. Ви впевнені, що насправді розумієте, що означає DevOps?
Ірі Клоуда

3
Ви продовжуєте говорити DevOps, я не думаю, що це означає, що ви думаєте, що це означає.
Ірі Клоуда

3
@ Dawny33: Будь ласка, прочитайте одну з фундаментальних книг DevOps - The Phoenix Project. Ви не знайдете жодної згадки про AWS, Docker, Jenkins чи будь-які інші інструменти. Уся книга про процес, організаційну ієрархію та структуру, спосіб роботи в командах. DevOps - це спосіб залучити наукові ідеї, що покращили виробництво в Японії та пізніше США до процесу розробки програмного забезпечення. Ідеї, засновані на роботах Едварда Демінга та Еліяху М. Голдратта. Те, що ви бачите як DevOps - це лише поверхня, інструменти та результати. Зайві його частини.
Іржі Клуда

5
@ Dawny33 Це питання не підходить для інженерії програм. Хоча ця загальна тема є, питання є занадто широким. Він шукає думки, а не намагається вирішити проблему. Будь ласка, не пропонуйте іншим громадам, якщо ви не розумієте, які типи питань вони приймають. Якби це питання було розміщено на програмі інженерії програмного забезпечення, воно було б закрите, закрите і, ймовірно, видалене дуже швидко. Це призводить до поганого користувальницького досвіду.
Томас Оуенс

Відповіді:


18

Що таке МММ

Спершу я хочу пояснити контекст Закону Брука. Яке припущення змусило його створити ще в 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, безумовно, в середині всього цього.


4

Що я зробив (і це лише суб'єктивно):

Коли менеджер, який роздумує над встановленим терміном, бажає додати людей до моєї команди, щоб скоротити необхідний час і, здається, під МММ, я спочатку обговорюю з ним чи нею питання, чому це може бути погано. Моя улюблена аналогія цьому - нагадати їм, що якщо одна жінка може народити дитину за дев'ять місяців, дев'ять жінок не матимуть одну дитину за один місяць, але у дев'яти місяців вони матимуть дев'ять дітей. Час не скорочується, просто паралельна обробка краще.

Коли рішення приймається нашою командою, ми зазвичай намагаємось або розділити деякі завдання, і коли це неможливо, ми зазвичай покладаємось на парне програмування , коли один програміст відповідає за введення тексту, а інший диктує код (і періодично перемикається) ).

Сама написання коду проходить повільніше, але під час тестування є менша кількість друку / підшивки та помилок через неминучий огляд, зроблений під час написання. Я вважаю, що загальна якість коду теж трохи краща, але я не маю показників, які б підтримували цю заяву.


1
Мені подобається ідея програмування пари. Це насправді щось, що могло б допомогти. Я можу пояснити, чому пізніше, грунтуючись на теорії, над якою працюю.
Jiri Klouda

будь ласка, чекайте!
Петро Муришкін

4

Якщо говорити виключно з точки зору ІС, збільшення кількості розробників, які працюють над проектом, зазвичай означає, що більше людей працює в одній галузі.

Традиційні системи ІС мають проблему масштабування в цьому відношенні: ймовірність зривів / регресій / блокувань збільшує сповільнення швидкості інтеграції та запрошення менших команд вийти з ладу та перейти на дочірні відділення (тобто подальше уповільнення). Див. Як можна безперервно інтегрувати інтеграцію для дуже великих проектів / команд? . Це грає прямо вздовж концепції Міфічного чоловіка щомісяця.

Я пропоную рішення, відповідаючи на це запитання, високомасштабною системою ІС дозволить перейти до справжнього CI - інтеграції на базі однієї гілки / магістралі для більшої кількості команд (навіть з величезними розмірами).

З усіма на одній сторінці, використовуючи ті ж автоматизовані інструменти / процеси та переважну більшість перевірок якості, що автоматизуються всередині самої системи CI, стає набагато простіше перемикати ролі та фокус між членами команди. Весь процес розвитку стає більш плавним, передбачуваним, більш розслабленим.

Таким чином, простіше привести нових людей на борт у таких умовах, зробити їх продуктивними, просто вивантаживши менш складні завдання від більш досвідчених членів команди, які можуть взяти на себе складніші.

Я вважаю, що все це є заспокійливим ефектом концепції Міфічного чоловіка.


У високоефективних організаціях додавання більшої кількості розробників зазвичай означає створення більш незалежних команд, які пишуть роз'єднане програмне забезпечення. Це дозволяє більшої кількості людей досягти більшого та швидшого. Надання їм усіх спілкуватися через єдину гілку інтеграції є антидіаграмою, і, швидше за все, це значно сповільнить справи.
Євгеній

Having them all communicate via a single integration branch is an anti-pattern- чому? Якщо вони роз'єднані в тому сенсі, що їм більше не потрібно буде інтегрувати свою роботу, вони торкнуться гілки безперебійним / безконфліктним способом. Якщо їх роботу все-таки потрібно інтегрувати, то продовження додаткових галузей просто затримає та ускладнить інтеграцію, відхилившись від методології ІС та втративши всі її переваги.
Дан Корнілеску

Я думаю, що ми не погоджуємось щодо значення "галузь". Добре мати одне велике сховище, з однією гілкою (git, або svn), і страждати накладні витрати всіх, хто працює над тим самим. Добре також мати декілька сховищ, де кожне сховище має гілку, яка відстежує цю конкретну роз'єднану послугу. Це залежить від інструменту, суми накладних витрат, які він додає до коду фіксації та оформлення замовлення.
Євгеній

Ах, вибачте, так - я настільки звик до цього і продовжую забувати інших. Під галуззю я маю на увазі високе, загальне представлення гілки СКМ, не важливо, які особливості фактичних базових систем СКМ, якщо вони управляються разом монолітним способом . 1 велике репо з mainгілкою або 10 бічних репостів (git-модулі?), Кожне з mainвідділенням, має бути майже еквівалентним перспективі CI.
Дан Корнілеску

Тоді моє твердження з першого коментаря справджується. Незалежність неможливо здійснити у вавилонській вежі, коли у вас моноліт, накладні витрати дуже великі для всіх - тому кожен обтяжений. Набагато краще представляти нерозділені проекти як роз'єднані невеликі системи СКУ для управління. Якщо ви пам'ятаєте досить далеко, деякі компанії використовували ClearCase та інші VCS для управління ВСЕМ кодом компанії - накладні витрати були жахливими.
Євгеній
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.