Чому додавання більшої кількості людей до пізнього проекту робить це пізніше?


25

Це досить поширена приказка, що додавання більшої кількості програмістів до пізнього проекту погіршить питання. Чому це?


14
Термін для цього - Закон Брукса ( en.wikipedia.org/wiki/Brooks's_law ).
Macneil

7
Порада: прочитайте Брукс "Міфічний чоловік-місяць". Це покаже, звідки походить ця приказка, це дуже читабельна книга, і всі бажаючі в будь-якому разі повинні її читати.
Девід Торнлі

На цій сторінці Вікіпедії дуже добре написано.
Генрі

Щоб дізнатись, як продуктивність зменшується з розміром команди (за винятком 7 членів команди, ви отримуєте зменшені прибутки), див. Qsm.com/process_improvement_01.html
Joeri Sebrechts

Відповіді:


33

Вступ накладні

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

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


Тож якщо ви оптимізуєте "Вступ", тоді вплив зменшиться?
Генрі

9
@ Генрі: проблема полягає в тому, що ти зазвичай не можеш оптимізувати цей аспект до такої міри, коли це не вузьке місце. Новий програміст спочатку точно знає 0 про ваш проект, код та ваші процеси. Це та сама накладні витрати, яка завжди потрібна при додаванні нового члена команди. Але коли проект вже запізнюється, у команди часто немає часу на належне введення, і якщо він це зробить, часу не вистачає на фактичну розробку. Тому, як правило, ситуація в програші для команди, і для нової людини потрібно набагато більше часу, поки він не зможе зробити свій внесок у проект.
Baelnorn

Що стосується вартості вступу, чи не можна його один раз зняти на відео, а потім транслювати для багатьох, щоб він змог навчати велику кількість нових програмістів одночасно? (Приклади: зустрічі розробників або конференції.)
rwong

7
@rwong: Це не погана ідея, але це зазвичай не практично. Ви не можете просто представити інформацію, ви повинні переконатися, що нові хлопці її зрозуміють. Плюс, якщо вони справді нові (останні міста), зазвичай є занадто багато інформації, щоб представити їх всім відразу. Ми виявили, що вікі працює добре, оскільки вся інформація знаходиться в одному місці, і люди можуть ставити запитання, якщо є біти, які вони не розуміють.
TMN

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

32

Окрім інших відповідей: Ще одним фактором, який слід враховувати, є спілкування.

Найгірший випадок щодо кількості каналів зв'язку в команді (що не рідкість) - це повний графік . Як ви можете уявити, додавання всього в 1 розробника може значно збільшити канали зв'язку. При більш обтічних методах комунікації вплив менше ..., але він все ще додається.


Я писав так само приблизно в один і той же час! але я не новий, він мав назву (повний графік), і ваше пояснення краще, тому я голосую.
Мігель Велосо

+1. Погоджено, це найбільша проблема при додаванні більшої кількості членів команди.
Мартін Вікман

+1 для більш довгострокової проблеми із залученням людей до проекту.
indyK1ng

23

Проблема, про яку йдеться в книзі, яка спочатку оприлюднила цей закон, «Міфічний чоловік-місяць» , - це спілкування. Він починає, кажучи:

Чоловіки і місяці є взаємозамінними товарами лише тоді, коли завдання можна розділити між багатьма працівниками, що не мають комунікації між ними. Це стосується збирання пшениці або збирання бавовни; це навіть не приблизно стосується системного програмування.

В якості проблеми він згадує навчання:

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

... але зазначає, що взаємодія є набагато більшим фактором:

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

Варто також зазначити, що у Фреда Брукса (автора) є основи, щоб знати, про що він говорить. Більшість книг базується на його досвіді управління проектом IBM OS / 360. Незважаючи на десятиліття прихильників, які проповідують усілякі "вдосконалені" методи управління, а деякі навіть придумують круті імена (eXtreme, Agile, Scrum тощо), коли ви переходите до цього, мало що з суті 1, здається, змінилося з тих пір.

1 Для визначення поняття "сутність" див. "Немає срібної кулі: сутність та нещасний випадок в інженерії програмного забезпечення" того самого автора, що увійшов до 20 - річного видання "Міфічного чоловіка-місяця" .


12

Це не просто прислів'я; це можна перевірити. Ознайомтеся з міфологічним місяцем людини Брукса .


1
Це прислів’я. Це може бути або не підлягає перевірці, але це не перешкоджає йому бути прислівником.
Пітер Бауфтон

3
Я (очевидно) не маю цієї книги. Це підкріплено важкими цифрами чи це анекдотично?
Генрі

2
@ Генрі: Минув час, але я читав його, але IIRC, обидва присутні в достатній кількості, щоб зробити висновок остаточним.
Стівен Еверс

@Peter: Редагував мою відповідь.
Джон

@PeterBoughton Це прислів’я. Крім того, це не просто приказка.
SantiBailors

6

Ось кілька думок з цього питання ...

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

Тепер додавання нових ресурсів для тестування може не бути поганою ідеєю ... це може пришвидшити процес тестування (якщо ваші тестові справи добре написані), і так, також використання інструментів тестування також допоможе.


1
+1 за додавання ресурсів до тестування, а не для розробки.
Baelnorn

4

Тому що програмування не є основною роботою на виробничій лінії. Швидкість роботи над програмним проектом потребує часу. Новим людям потрібно задавати багато питань, що призводить до негативної продуктивності (тобто, нова людина вчиться, стара людина навчає їх -> ніякої фактичної роботи не робиться).

Щоб спростити це, уявіть собі відносно простий проект для чоловіків, який планується тривати протягом 1 тижня: у четвер ви розумієте, що це не буде виконано вчасно, а для цього потрібен один програміст, як 6-7 днів з 5. Якщо в цей момент ви додасте іншого програміста, їм потрібно буде працювати з програмістом1 принаймні кілька годин або щодня або близько того, задавати багато питань, щоб швидко набирати швидкість тощо. Ви, мабуть, не отримаєте будь-яка чиста позитивна продуктивність протягом останнього тижня. Новий програміст, ймовірно, введе і деякі зайві помилки (оскільки вони не будуть знати існуючого коду, а також програміст1), так що це вибухне цикл впровадження та тестування ще через день або два. Проект легко триватиме цілих два робочих тижні замість оригіналу!


Що ж, ваш приклад трохи згідний нереально коротким терміном, який залишився до проекту. Змініть його на один місяць, і ви побачите, що це не обов'язково правда. Особисто я вважаю, що цитата була зловживана. Це вірно, якщо розглядати програмового апарату, середнього / поганого програміста. Якщо у вас хороший програміст, а термін не є нереальним, як 1 день чи 1 тиждень, то цитата помилкова: це можна зробити (допоможіть проекту).
n1ckp

@ n1ck Його узагальнення - як "занадто багато кухарів" - ключовим моментом є те, що просто кидання робочої сили на проект не обов'язково призведе до його швидшого вирішення. 1 людина до 2? Напевно, буде. 2 до 4? Занадто багато змінних - це залежить від розміру та структури проекту. 4 -> 8? Однозначно виходить граничним (як мінімум з точки зору рентабельності).
Мерф

@Murph: ти, здається, думаєш здебільшого про ті самі речі, що і я, але ти забув одну дуже важливу змінну у своєму рівнянні: рівень майстерності доданої робочої сили. Це було в моєму останньому коментарі, тому мені здається дивним, що ти його пропустив. Сліпо додавання робочої сили - це, звичайно, не рішення. Додавання дуже спеціалізованої робочої сили (вам не потрібно багато), звичайно, може допомогти, і саме цього не вистачало в міфічній цитаті "Чоловік-місяць". Це був мій пункт. Інакше я вже знаю про те, що означає цитата.
n1ckp

Гаразд, приклад міг бути кращим, але узагальнення все ще діє?
Мерф

1
Я достатньо разів переживав це, щоб знати, що це одна з тих речей, які МОЖУТЬ працювати в дуже спеціалізованих випадках, але 99% часу це не робитиме. Як би добре це не виглядало теоретично в той час. Це сказало, так, це не чорно-білий абсолют. Це скоріше сказати, як відкриті стосунки не працюють. Теорія приємна і спокуслива;) .... але природа звіра така, що в більшості випадків вона закінчується невдалою. Різновид "винятки доводять правило".
Столи Бобі

4

Фред Брукс написав цілу книгу "Міфічний чоловік-місяць", відповідаючи на це питання.

Ось швидка n-брудна версія:

1) Існує обмеження на те, скільки ви можете розбити проект на різні частини, щоб призначити більше програмістів.

2) Розділення проекту на більшу кількість людей збільшує кількість комунікацій, необхідних для координації всіх частин програми. Більше спілкування = Більше роботи.

3) Для кожної людини, яку ви додаєте до проекту, ви додаєте більше одного каналу зв'язку, який повинен переходити до команди. Це число зростає геометрично і збільшує кількість спілкування, яке має відбутися. Більше спілкування = Більше роботи.

4) Існує "J-крива", коли ви додаєте кожного члена команди. Тобто, наявні виробничі ресурси повинні витратити час на те, щоб нові люди швидко розвивалися, щоб вони могли витратити роботу над проектом. Зрештою, ви можете збільшити потужність, але це тимчасово сповільнює проект. Чим пізніше в проекті, тим більше потрібно дізнатися, тим сильніше виражений ефект.


4

Ще один фактор, про який я не бачив, - це те, що деякі завдання потрібно виконувати в певному порядку. Ви не можете виконувати завдання 4, поки завдання 3 не буде виконано, оскільки це залежить від 3. Це не приносить користі наймати когось, щоб він виконував завдання 4 одночасно, хтось виконував завдання 3. Часто в кінці проекту , ті завдання, які спочатку потребують інших речей, - це інші завдання.

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


+1. Це було головним питанням на моїй останній роботі. Керівництво було в мега "чоловік місяць" додаючи "манія для великого проекту без продумування речей. Одного разу наша команда продемонструвала те, що вона повільна - тому що наші речі потребували інтеграції з цим великим проектом. Але тоді нові наймачі на великому проекті не змогли досягти швидкості досить швидко, тому МИ зайшли занадто далеко вперед (щодо речей, які потребували їх завершення). Одного разу ми розробляли передні кінці для напівфабрикатів і пробних джгутів. Не хороший потік.
Столи Бобі

2

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


Якщо ви думаєте, що програмний проект схожий на немовля, ви не живете в реальному світі. У цитаті є деяка правда, але це ідеальний приклад виведення речі з контексту: -1
n1ckp

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

2
Ще одна аналогія, яку Брукс робить - це їжа в ресторані. На добре керованій кухні паралельно можна їсти багато їжі, але є обмеження щодо того, наскільки швидко вона може приготувати один прийом їжі, не піддаючи приготування їжі та не спалюючи її.
Девід Торнлі

@rerun: проблема вашої аналогії полягає в тому, що для вагітних жінок немає аналогії. Жінок у вашому випадку можна легше порівняти з компанією , а не з робочими. Ось чому, на мою думку, це так не вдається. Найближчим, про що я можу подумати, було б їжа, але це було б більше схоже на рядок кодів, так що ні, не робітники.
n1ckp

1
@ n1ck: Моє враження, що ти не згоден, бо не розумієш цього, якщо чесно. Брукс не говорив про заміну непотрібних людей компетентними людьми, оскільки він опинився в ситуації, коли всі ще працюючі вважалися компетентними.
Девід Торнлі

2

Я б також запропонував "Народні засоби" від DeMarco та Lister.

І "Дедлайн" від DeMarco представляє це та ряд інших програм управління проектами захворювань та помилок легким та дуже читабельним способом.

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

Ці книги досить дешеві, я б пропонував вам їх придбати (у Амазонії чи Книгарні) і прочитати. Короткі відповіді тут справді не можуть справедливо відповідати на поставлене питання.


2

Тому що ніхто не витрачає час на продуманий, спланований, випробуваний процес: наймання, навчання, розробку та нагляд за програмістами, не кажучи вже про те, щоб привернути їх до того, щоб досягти певного проекту.

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

З якою швидкістю ви зможете отримати абсолютно нову установку машини для розробки та готову до роботи?

Ви коли-небудь тестували свою проектну документацію та характеристики, показуючи їх розробнику для іншого проекту? Чи переглянули вони це і чи визначили, що при необхідності можуть почати працювати над проектом?

Наскільки актуальний будь-який графік проекту?

Економте для дощового дня, бо коли проект відстає, це більше нагадує ураган.


1

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

Щоразу, коли мене додають до проекту, я завжди дуже намагаюся не порушувати речі. Це означає, що спочатку я набагато повільніше виправляю речі.


0

Я хотів би зазначити щось повністю ігнороване іншими відповідями.

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

А тепер уявіть, що ви в цій команді. Очевидно, що в цьому нічого не винна. Планування (жодне з яких не було вашим) було надто оптимістичним. Усі неправильні рішення були прийняті без консультації з вами. Ви намагаєтеся зробити все найкраще, і раптом нагромаджується купа нових людей. Яке повідомлення передає це?

Люди наверху, очевидно, втратили віру в вас. Вони закликали великих хлопців компенсувати те, що ви зіпсували.

Чи будете ви все-таки мотивовані, щоб це досягти успіху? Або ... чи будете ви колись ще більш розчаровані, і хочете, швидше, побачите, як вся справа розбита?

Не поспішай :-).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.