Tại sao việc thêm nhiều người vào một dự án muộn sẽ khiến nó muộn hơn?


25

Đây là một câu ngạn ngữ khá phổ biến rằng việc thêm nhiều lập trình viên vào một dự án muộn sẽ làm cho vấn đề tồi tệ hơn. Tại sao lại thế này?


14
Thuật ngữ này là Luật Brooks ( en.wikipedia.org/wiki/Brooks's_law ).
Macneil

7
Lời khuyên: hãy đọc "Tháng huyền thoại" của Brooks. Điều này sẽ cho thấy câu ngạn ngữ đó đến từ đâu, đó là một cuốn sách rất dễ đọc và mọi người trong lĩnh vực này cũng nên đọc nó.
David Thornley

Trang Wikipedia được viết rất tốt.
Henry

Để biết bằng chứng về việc năng suất giảm theo quy mô nhóm như thế nào (ngoài 7 thành viên trong nhóm bạn nhận được lợi nhuận giảm dần), hãy xem qsm.com/ Process_impronterest_01.html
Joeri Sebrechts

Câu trả lời:


33

Giới thiệu trên cao

Mỗi nhà phát triển mới phải được giới thiệu về cơ sở mã và quy trình phát triển, không chỉ mất thời gian của người mới mà còn cần sự trợ giúp từ [một] nhà phát triển cấp cao (hướng dẫn họ qua quy trình xây dựng, giải thích quy trình thử nghiệm, giúp họ với những cạm bẫy trong cơ sở mã, đánh giá mã chi tiết hơn nhiều, v.v.) .

Do đó, càng nhiều nhà phát triển mới mà bạn thêm vào dự án thì càng phải dành nhiều thời gian để đưa họ đến một điểm mà họ thực sự có thể đóng góp cho dự án.


Vậy nếu bạn tối ưu hóa 'Giới thiệu' thì tác động sẽ giảm bớt?
Henry

9
@Henry: vấn đề là bạn thường không thể tối ưu hóa khía cạnh đó đến một mức độ mà nó không phải là nút cổ chai. Một lập trình viên mới lúc đầu biết chính xác 0 về dự án, mã và quy trình của bạn. Đó là cùng một chi phí luôn luôn cần thiết khi thêm một thành viên nhóm mới. Nhưng khi một dự án đã bị trễ, nhóm thường không có thời gian để giới thiệu thích hợp và nếu thời gian đó bị thiếu trong quá trình phát triển thực tế. Do đó, đây thường là một tình huống thua cuộc cho đội và người mới mất nhiều thời gian hơn cho đến khi anh ta có thể đóng góp ý nghĩa cho dự án.
Baelnorn

Về chi phí giới thiệu, không thể quay video một lần rồi phát cho nhiều người, để nó có thể đào tạo một số lượng lớn lập trình viên mới cùng một lúc? (Ví dụ: các cuộc họp hoặc hội nghị dành cho nhà phát triển.)
rwong

7
@rwong: Đó không phải là một ý tưởng tồi, nhưng điều này thường không thực tế. Bạn không thể chỉ trình bày thông tin, bạn phải chắc chắn rằng những người mới hiểu nó. Ngoài ra, nếu chúng thực sự mới (học sinh gần đây), thường có quá nhiều thông tin để trình bày cho tất cả chúng cùng một lúc. Chúng tôi đã phát hiện ra rằng wiki hoạt động tốt, vì tất cả thông tin đều nằm ở một vị trí và mọi người có thể đăng câu hỏi nếu có những bit họ không hiểu.
TMN

Một khả năng là phân công một người mới rất có năng lực và để họ làm những nhiệm vụ cụ thể mà không làm phiền những người khác. Họ sẽ lúng túng và làm việc chậm chạp, và một số người quản lý và / hoặc nhóm không thể đứng nhìn thấy điều này. Tuy nhiên, nhà phát triển mới có thể là một điểm cộng khi được quản lý theo cách đó.
David Thornley

32

Ngoài các câu trả lời khác: Một yếu tố khác cần xem xét là giao tiếp.

Trường hợp xấu nhất đối với số lượng kênh liên lạc trong một nhóm (không phổ biến), là một biểu đồ hoàn chỉnh . Như bạn có thể tưởng tượng, thêm vào chỉ 1 nhà phát triển có thể tăng các kênh liên lạc lên rất nhiều. Với các phương thức truyền thông được sắp xếp hợp lý hơn, tác động sẽ ít hơn ... nhưng nó vẫn tăng lên.


Tôi đã viết giống nhau cùng một lúc! nhưng tôi không biết nó mới có tên (một biểu đồ hoàn chỉnh) và lời giải thích của bạn tốt hơn, vì vậy tôi sẽ bỏ phiếu.
Miguel Veloso

+1. Đồng ý, đây là vấn đề lớn nhất khi thêm nhiều thành viên trong nhóm.
Martin Wickman

+1 cho vấn đề dài hạn hơn với việc thêm người vào dự án.
indyK1ng

23

Vấn đề được trích dẫn trong cuốn sách ban đầu ban hành luật này, Tháng huyền thoại , là giao tiếp. Anh ấy bắt đầu bằng cách nói:

Đàn ông và tháng là hàng hóa có thể hoán đổi cho nhau chỉ khi một nhiệm vụ có thể được phân chia giữa nhiều công nhân mà không có giao tiếp giữa họ. Điều này đúng với việc gặt lúa mì hoặc hái bông; nó thậm chí không đúng với lập trình hệ thống.

Ông không đề cập đến đào tạo như là một phần của vấn đề:

Gánh nặng thêm của truyền thông được tạo thành từ hai phần: đào tạo và giao tiếp. Mỗi công nhân phải được đào tạo về công nghệ, mục tiêu của nỗ lực, chiến lược tổng thể và kế hoạch làm việc. Đào tạo này không thể được phân vùng, vì vậy phần này của công việc thay đổi tuyến tính với số lượng công nhân.

... nhưng lưu ý rằng giao tiếp là yếu tố lớn hơn :

Vì việc xây dựng phần mềm vốn dĩ là một nỗ lực của hệ thống - một bài tập trong các mối quan hệ tương tác phức tạp - nỗ lực giao tiếp là rất lớn và nó nhanh chóng chi phối việc giảm thời gian nhiệm vụ cá nhân do phân vùng mang lại. Thêm nhiều người đàn ông kéo dài, không rút ngắn, lịch trình.

Cũng đáng lưu ý rằng Fred Brooks (tác giả) có nền tảng để biết anh ấy đang nói về điều gì. Hầu hết cuốn sách dựa trên kinh nghiệm của anh ấy khi quản lý dự án OS / 360 của IBM. Mặc dù nhiều thập kỷ của các đệ rao giảng tất cả các cách thức của "cải thiện" phương pháp quản lý, và một số thậm chí đến với tên mát mẻ (eXtreme, Agile, Scrum, vv) khi bạn nhận được xuống để nó, ít chất 1 dường như đã thay đổi kể từ đó.

1 Đối với định nghĩa về "bản chất", xem cùng tác giả của "Không Silver Bullet: Essence và tai nạn trong Công Nghệ Phần Mềm", bao gồm trong 20 ngày Anniversary Edition của The Mythical Man-Month .


12

Nó không chỉ đơn thuần là câu ngạn ngữ; nó có thể kiểm chứng được. Hãy xem Tháng huyền thoại của Brooks .


1
Đó là một câu ngạn ngữ. Nó có thể hoặc không thể kiểm chứng được, nhưng điều đó không ngăn được nó là một câu ngạn ngữ.
Peter Boughton

3
Tôi không có cuốn sách này (rõ ràng). Điều này được hỗ trợ bởi các số cứng hay là giai thoại?
Henry

2
@Henry: Đã một thời gian kể từ khi tôi đọc nó nhưng IIRC, cả hai đều có mặt với số lượng đủ để đưa ra quan điểm một cách thuyết phục.
Steven Evers

@Peter: Đã chỉnh sửa câu trả lời của tôi.
Giăng

@PeterBoughton Đó là một câu ngạn ngữ. Ngoài ra, nó không chỉ đơn thuần là một câu ngạn ngữ.
SantiBailors

6

Dưới đây là một số suy nghĩ về vấn đề này ...

  • Cần sử dụng các tài nguyên hiện tại để đưa các tài nguyên mới tăng tốc theo những gì đang diễn ra với dự án.
  • Tài nguyên mới có thể không quen thuộc với cơ sở mã, do đó cần thêm thời gian để làm quen với mã.

bây giờ, việc thêm tài nguyên mới để kiểm tra có thể không phải là ý tưởng tồi ... nó có thể tăng tốc quá trình kiểm tra (nếu các trường hợp kiểm thử của bạn được viết tốt) và có sử dụng các công cụ kiểm tra cũng sẽ giúp ích.


1
+1 để thêm tài nguyên để thử nghiệm, không phát triển.
Baelnorn

4

Bởi vì lập trình không phải là dây chuyền sản xuất cơ bản. Bắt kịp tốc độ trên một dự án phần mềm cần có thời gian. Người mới cần đặt nhiều câu hỏi dẫn đến năng suất tiêu cực (tức là người mới học, người cũ dạy họ -> không có công việc thực tế nào được thực hiện).

Để đơn giản hóa nó, hãy tưởng tượng một dự án một người tương đối đơn giản, dự kiến ​​sẽ diễn ra trong 1 tuần: vào thứ năm, bạn nhận ra rằng nó sẽ không được hoàn thành đúng hạn, thay vào đó sẽ mất một lập trình viên hơn 6-7 ngày trong số 5. ​​Nếu bạn thêm một lập trình viên khác vào thời điểm đó, họ sẽ cần phải làm việc với lập trình viên1 trong ít nhất vài giờ hoặc một ngày hoặc lâu hơn, hỏi nhiều câu hỏi để tăng tốc, v.v. Bạn có thể sẽ không nhận được bất kỳ năng suất dương nào trong phần còn lại của tuần. Lập trình viên mới cũng có khả năng giới thiệu thêm một số lỗi (vì họ sẽ không biết mã hiện có cũng như lập trình viên1), do đó sẽ thổi bay chu kỳ thực hiện và thử nghiệm thêm một hoặc hai ngày nữa. Dự án sẽ dễ dàng kéo dài hai tuần làm việc đầy đủ thay vì ban đầu!


Vâng, ví dụ của bạn là một chút bị hạn chế bởi thời hạn ngắn không thực tế để lại cho dự án. Thay đổi nó thành một tháng và bạn sẽ thấy rằng nó không cần thiết đúng. Cá nhân tôi nghĩ rằng trích dẫn đã bị lạm dụng. Đó là sự thật khi xem xét lập trình viên bình thường, trung bình / kém. Nếu bạn có lập trình viên giỏi, và thời hạn không phải là điều không thực tế như 1 ngày hoặc 1 tuần, thì trích dẫn là sai: nó có thể được thực hiện (giúp dự án).
n1ckp

@ n1ck Đó là một sự khái quát hóa - như "quá nhiều đầu bếp" - điểm mấu chốt là chỉ cần ném nhân lực vào dự án sẽ không nhất thiết khiến nó được giải quyết nhanh hơn. 1 người thành 2? Có lẽ sẽ. 2 đến 4? Quá nhiều biến số - nó phụ thuộc vào quy mô và cấu trúc của dự án. 4 -> 8? Chắc chắn nhận được biên (ít nhất là về lợi nhuận trên chi phí).
Murph

@Murph: bạn dường như đang suy nghĩ hầu hết những điều tương tự như tôi nhưng bạn đã quên một biến rất quan trọng trong phương trình của bạn: mức độ kỹ năng của nhân lực được thêm vào. Đó là trong bình luận cuối cùng của tôi vì vậy tôi thấy lạ là bạn đã bỏ lỡ nó. Thêm nhân lực mù quáng tất nhiên không phải là giải pháp. Thêm nhân lực rất chuyên môn (bạn không cần nhiều) tất nhiên có thể giúp đỡ và đó là điều còn thiếu trong trích dẫn tháng tháng huyền thoại. Đó là quan điểm của tôi. Nếu không, tôi đã biết về ý nghĩa của trích dẫn.
n1ckp

Ok, ví dụ có thể tốt hơn nhưng việc khái quát hóa vẫn còn hiệu lực?
Murph

1
Tôi đã trải qua thời gian này đủ để biết rằng đó là một trong những điều mà MIGHT hoạt động trong các trường hợp rất chuyên biệt, nhưng 99% thời gian sẽ không xảy ra. Không có vấn đề như thế nào tốt trong lý thuyết tại thời điểm đó. Điều đó nói rằng, yeah, nó không phải là một màu đen và trắng tuyệt đối. Giống như nói, làm thế nào các mối quan hệ mở không hoạt động. Lý thuyết là tốt đẹp, và hấp dẫn;) .... nhưng bản chất của con thú là trong hầu hết các trường hợp, nó kết thúc thất bại. Sắp xếp một điều "ngoại lệ chứng minh quy tắc".
Bàn Bobby

4

Fred Brooks đã viết toàn bộ cuốn sách "Tháng huyền thoại" trả lời câu hỏi này.

Đây là phiên bản nhanh-bẩn-bẩn:

1) Có giới hạn về số tiền bạn có thể chia một dự án thành các phần riêng biệt để gán cho nhiều lập trình viên hơn.

2) Tách một dự án ra cho nhiều người hơn sẽ tăng lượng giao tiếp cần thiết để phối hợp tất cả các phần của ứng dụng. Giao tiếp nhiều hơn = Công việc nhiều hơn.

3) Đối với mỗi người bạn thêm vào dự án, bạn thêm nhiều kênh truyền thông phải được điều hướng đến nhóm. Con số này tăng lên về mặt hình học và tăng số lượng giao tiếp phải xảy ra. Giao tiếp nhiều hơn = Công việc nhiều hơn.

4) Có "J-Curve" khi bạn thêm từng thành viên trong nhóm. Đó là, các nguồn lực sản xuất hiện tại phải dành thời gian để giúp những người mới tăng tốc mà họ có thể đã dành để làm việc trong dự án. Cuối cùng, bạn có thể tăng công suất, nhưng nó tạm thời làm chậm dự án. Càng về sau, dự án càng phải học, do đó hiệu quả càng rõ rệt.


4

Một yếu tố khác mà tôi chưa thấy đề cập đến là một số nhiệm vụ cần phải được thực hiện theo một thứ tự cụ thể. Bạn không thể thực hiện nhiệm vụ 4 cho đến khi nhiệm vụ 3 được thực hiện vì nó phụ thuộc vào 3. Việc thuê ai đó làm nhiệm vụ 4 không đồng thời giúp ai đó thực hiện nhiệm vụ 3. Thường thì khi kết thúc dự án , những nhiệm vụ cần những thứ khác hoàn thành trước là những nhiệm vụ còn lại.

Chúng cũng thường là một số nhiệm vụ phức tạp nhất cần thực hiện, những nhiệm vụ đòi hỏi sự hiểu biết tốt nhất về toàn bộ thiết kế để tránh phá vỡ những gì đã hoàn thành. Họ cũng thường yêu cầu kiến ​​thức lĩnh vực kinh doanh rộng lớn nhất. Tôi có thể sau khi làm việc trong dự án trong nhiều tháng có thể thực hiện nhiệm vụ trong một tuần hoặc ít hơn. Một người mới sẽ mất hơn một tuần để tăng tốc (và kéo tôi ra khỏi nhiệm vụ của mình để có thời gian tốt để trả lời câu hỏi) và có khả năng ngay cả khi cực kỳ lành nghề sẽ mất nhiều thời gian hơn để thực hiện nhiệm vụ. Không phải vì anh ta hoặc cô ta không đủ năng lực mà vì không quen thuộc với cấu trúc thực tế của dự án hoặc cơ sở dữ liệu phụ trợ.


+1. Đây là một vấn đề lớn trong công việc cuối cùng của tôi. Ban quản lý đã rất háo hức "tháng nhân lực" cho một dự án lớn mà không suy nghĩ kỹ. Tại một thời điểm, nhóm của chúng tôi đã bị khoan vì chậm - bởi vì công cụ của chúng tôi cần tích hợp với dự án lớn đó. Nhưng sau đó, những người thuê mới trong dự án lớn không thể tăng tốc đủ nhanh, vì vậy CHÚNG TÔI đã đi quá xa (về những thứ cần hoàn thành phần phụ trợ của họ ). Tại một thời điểm, chúng tôi đã phát triển các mặt trước cho các phụ trợ nửa nướng và khai thác thử nghiệm. Không phải là một dòng chảy tốt.
Bàn Bobby

2

Câu ngạn ngữ luôn có hiệu quả với tôi là bạn không thể có chín người phụ nữ để sinh con trong một tháng.


Nếu bạn nghĩ rằng một dự án phần mềm giống như một đứa trẻ, bạn không sống trong thế giới thực. Có một số sự thật trong trích dẫn nhưng đây là ví dụ hoàn hảo về việc đưa mọi thứ ra khỏi bối cảnh: -1
n1ckp

1
Rõ ràng là không. Nhưng những người mà bạn bán dòng thời gian cũng không hiểu phát triển phần mềm. Sự tương tự chính xác cho mục đích đó liên quan đến một khái niệm chưa biết đến một thực thể biết.
chạy lại

2
Một tương tự khác Brooks làm là thực phẩm trong một nhà hàng. Một nhà bếp hoạt động tốt có thể tạo ra nhiều bữa ăn song song, nhưng có giới hạn về việc nó có thể làm một bữa ăn nhanh như thế nào mà không cần nấu chín hoặc đốt cháy.
David Thornley

@rerun: vấn đề với sự tương tự của bạn là không có sự tương tự của người lao động đối với một phụ nữ mang thai. Phụ nữ trong trường hợp của bạn có thể dễ dàng hơn so với công ty , không phải công nhân. Đó là lý do tại sao nó thất bại rất nhiều theo ý kiến ​​của tôi. Gần nhất tôi có thể nghĩ sẽ là thực phẩm nhưng đó sẽ giống như dòng mã, vì vậy không, không phải công nhân.
n1ckp

1
@ n1ck: Ấn tượng của tôi là bạn không đồng ý vì bạn không hiểu điều đó, thành thật mà nói. Brooks đã không nói về việc thay thế những người vô dụng bằng những người có thẩm quyền, bởi vì anh ta ở trong tình huống mà mọi người vẫn làm việc được coi là có thẩm quyền.
David Thornley

2

Tôi cũng đề xuất "Peopleware" của DeMarco và Lister.

Và "Hạn chót" của DeMarco trình bày điều này, và một số bệnh và quản lý dự án phần mềm khác theo cách nhẹ nhàng và rất dễ đọc.

Nó cũng đi sâu vào sự năng động của những người làm công việc dự án / nhóm và đi sâu vào một số chi tiết về việc NHƯ THẾ NÀO như giao tiếp và giới thiệu làm mất thời gian làm việc có sẵn của một nhóm.

Những cuốn sách này khá rẻ, tôi khuyên bạn nên lấy chúng (Amazon hoặc Nhà lưu trữ sách có chúng) và đọc. Các câu trả lời ngắn ở đây không thể thực sự công bằng cho câu hỏi được hỏi.


2

Bởi vì không ai dành thời gian để suy nghĩ kỹ, lên kế hoạch, thử nghiệm quy trình cho: tuyển dụng, đào tạo, phát triển và giám sát các lập trình viên chứ đừng nói đến việc thúc đẩy họ tăng tốc cho một dự án cụ thể.

Nếu bạn đang quản lý một nhóm các nhà phát triển, bạn nên có một số liên hệ ngay bây giờ của những người bạn muốn thuê nếu bạn có một cơ hội. Tham gia các nhóm phát triển.

Làm thế nào nhanh chóng bạn có thể có được một thiết lập máy phát triển hoàn toàn mới và sẵn sàng để đi?

Bạn đã bao giờ kiểm tra tài liệu dự án và thông số kỹ thuật của bạn bằng cách hiển thị chúng cho nhà phát triển trên một dự án khác chưa? Họ đã xem xét nó và xác định rằng họ có thể bắt đầu làm việc với dự án nếu cần thiết?

Làm thế nào để cập nhật là bất kỳ lịch trình dự án?

Tiết kiệm cho một ngày mưa bởi vì khi một dự án rơi phía sau nó giống như một cơn bão.


1

Ngoài vấn đề giao tiếp (mà tôi nghĩ rằng tất cả các câu trả lời khác đang nói đến), một người cũng có thể thêm vào một dự án để tạo ra lỗi, vì họ chưa biết rõ về mã.

Bất cứ khi nào tôi được thêm vào một dự án, tôi luôn cố gắng hết sức để không phá vỡ mọi thứ. Điều này có nghĩa là tôi chậm hơn nhiều trong việc sửa chữa mọi thứ lúc đầu.


0

Tôi muốn chỉ ra một cái gì đó hoàn toàn bị bỏ qua cho đến nay bởi các câu trả lời khác.

Vào thời điểm mọi người được thêm vào một dự án muộn, điển hình là rất nhiều lỗi đã xảy ra trong toàn tổ chức. Quản lý và khách hàng không hài lòng. Mọi người đã bị áp lực để có được với nó. Mọi thứ khá căng thẳng.

Bây giờ hãy tưởng tượng bạn đang ở trong đội đó. Rõ ràng không ai trong số này là lỗi của bạn. Lập kế hoạch (không ai trong số đó là của bạn) đã quá lạc quan. Tất cả các quyết định sai đã được thực hiện mà không hỏi ý kiến ​​bạn. Bạn đang cố gắng làm cho nó tốt nhất và đột nhiên một nhóm người mới đang bị cuốn vào. Thông điệp này truyền tải điều gì?

Những người trên lầu rõ ràng đã mất niềm tin vào bạn. Họ kêu gọi các chàng trai lớn bù đắp cho những gì bạn đã làm hỏng.

Bạn vẫn sẽ có động lực để làm cho điều này thành công? Hoặc ... bạn sẽ nản lòng hơn bao giờ hết và liệu bạn có muốn nhìn thấy toàn bộ sự việc không?

Hãy dành thời gian của bạn :-).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.