늦은 프로젝트에 더 많은 사람들을 추가하면 나중에 만드는 이유는 무엇입니까?


25

늦은 프로젝트에 더 많은 프로그래머를 추가하면 문제가 더 악화 될 수 있다는 것은 상당히 흔한 일입니다. 왜 이런거야?


14
이를위한 용어는 Brooks 's Law ( en.wikipedia.org/wiki/Brooks's_law )입니다.
Macneil

7
조언 : Brooks의 "The Mythical Man-Month"를 읽으십시오. 이것은 그 속담이 어디에서 왔는지 보여주고, 매우 읽기 쉬운 책이며, 현장의 모든 사람들이 그것을 읽어야합니다.
David Thornley

그 위키 백과 페이지는 매우 잘 쓰여져 있습니다.
Henry

팀 규모에 따라 생산성이 어떻게 저하되는지에 대한 증거 (7 명 이상의 팀원이 줄어드는 결과)는 qsm.com/process_improvement_01.html
Joeri Sebrechts

답변:


33

오버 헤드 소개

각각의 새로운 개발자는 새로운 사람의 시간뿐만 아니라 [a] 선임 개발자의 도움이 필요한 코드베이스 및 개발 프로세스를 소개해야합니다 (빌드 프로세스를 통해 안내, 테스트 프로세스 설명, 도움 코드베이스에 함정, 훨씬 더 자세한 코드 리뷰 등) .

따라서 프로젝트에 새로운 개발자를 더 많이 추가할수록 실제로 프로젝트에 기여할 수있는 시점에 더 많은 시간을 소비해야합니다.


따라서 '소개'를 최적화하면 영향이 줄어 듭니까?
Henry

9
@ 헨리 : 문제는 일반적으로 병목 현상이 아닌 정도까지 해당 측면을 최적화 할 수 없다는 것입니다. 처음에 새로운 프로그래머는 프로젝트, 코드 및 프로세스에 대해 정확히 0을 알고 있습니다. 새 팀 구성원을 추가 할 때 항상 필요한 것과 동일한 오버 헤드입니다. 그러나 프로젝트가 이미 늦게 진행되고있을 때 팀은 적절한 소개를 할 시간이없는 경우가 많으며, 그럴 경우 실제 개발에 시간이 빠져 있습니다. 따라서 일반적으로 팀에게는 손실이 많은 상황이며 새 사람이 프로젝트에 의미있게 기여할 때까지 훨씬 오래 걸립니다.
Baelnorn

소개하는 비용과 관련하여 한 번에 비디오를 녹화 한 다음 많은 사용자에게 브로드 캐스트하여 많은 수의 새로운 프로그래머를 한 번에 교육 할 수 없습니까? (예 : 개발자 회의 또는 컨퍼런스)
rwong

7
@ rwong : 나쁜 생각은 아니지만 일반적으로 실용적이지 않습니다. 당신은 정보를 제시 할 수 없으며, 새로운 사람들이 정보를 이해하도록해야합니다. 게다가, 그들이 정말로 새롭 다면 (최근 학년), 보통 그들에게 한 번에 제시 할 정보가 너무 많습니다. 우리는 모든 정보가 한곳에 있으므로 위키가 잘 작동한다는 것을 알았습니다. 사람들은 이해하지 못하는 부분이 있으면 질문을 게시 할 수 있습니다.
TMN

한 가지 가능성은 매우 유능한 새 사람을 지정하고 다른 사람을 방해하지 않고 특정 작업을 수행하도록하는 것입니다. 그들은 심하게 under 치며 느리게 작동하며 일부 관리자 및 / 또는 팀은 이것을 보지 못합니다. 그러나 새로운 개발자는 그렇게 관리하면 순 플러스가 될 수 있습니다.
David Thornley

32

다른 답변 외에도 고려해야 할 또 다른 요소는 커뮤니케이션입니다.

드문 일이 아닌 팀의 통신 채널 양에 대한 최악의 경우는 완전한 그래프 입니다. 상상할 수 있듯이 개발자 를 한 명만 추가 하면 커뮤니케이션 채널을 크게 늘릴 수 있습니다. 보다 효율적인 의사 소통 방법을 사용하면 영향이 줄어 듭니다. 그러나 여전히 더해집니다.


나는 거의 같은 시간에 같은 것을 쓰고 있었다! 그러나 나는 새로운 이름을 얻지 못했지만 (완료 그래프) 설명이 더 좋으므로 투표가 진행됩니다.
Miguel Veloso

+1. 더 많은 팀 구성원을 추가 할 때 가장 큰 문제입니다.
Martin Wickman

사람들을 프로젝트에 추가하는 데있어 장기적인 문제인 경우 +1
indyK1ng

23

이 책에서 원래 언급 된이 법인 신화 적 인간-월 (Newthical Man-Month )은 의사 소통이다. 그는 다음과 같이 말하면서 시작합니다.

남성과 월은 의사 소통이없는 많은 근로자들 사이에 업무를 분할 할 수있는 경우에만 교환 가능한 상품 입니다. 이것은 밀을 거두거나면을 따는 경우에 해당됩니다. 시스템 프로그래밍의 경우에도 마찬가지입니다.

그는 문제의 일부로 훈련을 언급합니다.

의사 소통의 추가 부담은 두 부분으로 구성됩니다. 훈련과 상호 의사 소통. 각 작업자는 기술, 노력의 목표, 전반적인 전략 및 작업 계획에 대한 교육을 받아야합니다. 이 교육은 분할 할 수 없으므로 작업의이 부분은 작업자 수에 따라 다릅니다.

... 그러나 상호 통신은 훨씬 더 큰 요소입니다.

소프트웨어 구성은 본질적으로 복잡한 상호 관계에서 수행되는 시스템 노력이기 때문에 통신 노력이 훌륭하며 분할로 인해 발생하는 개별 작업 시간의 단축을 빠르게 지배합니다. 더 많은 남성을 추가하면 일정이 단축되는 것이 아니라 단축됩니다.

Fred Brooks (저자)는 자신이 무엇을 말하는지 알고있는 배경을 가지고 있다는 점도 주목할 가치가 있습니다. 이 책의 대부분은 IBM의 OS / 360 프로젝트 관리 경험을 기반으로합니다. 모든 방식의 "개선 된"관리 방법을 설교하는 수십 년간의 지지자들이 있지만, 일부는 멋진 이름 (eXtreme, Agile, Scrum 등)을 내놓을 때에도 본질 1이 거의 변하지 않은 것 같습니다.

1 "본질"의 정의는 20th Anniversary Edition of The Mythical Man-Month에 포함 된 동일한 저자의 "No Silver Bullet : No Essence and Accident in Software Engineering"을 참조하십시오 .


12

그것은 단지 속담이 아닙니다. 검증 할 수 있습니다. Brooks의 The Mythical Man-Month를 확인하십시오 .


1
속담입니다. 검증 할 수도 있고 아닐 수도 있지만, 그것이 속담 인 것을 막지는 않습니다.
Peter Boughton

3
나는이 책을 가지고 있지 않다. 이것은 어려운 숫자로 뒷받침됩니까, 아니면 일화입니까?
Henry

2
@ 헨리 : IIRC를 읽은 지 오래되었습니다. 둘 다 포인트를 결정하기에 충분한 양으로 존재합니다.
Steven Evers

@ 피터 : 내 답변을 편집했습니다.
John

@PeterBoughton 그것은 속담이다. 또한 그것은 단순한 속담이 아닙니다.
SantiBailors

6

이 문제에 대한 몇 가지 생각은 다음과 같습니다.

  • 현재 자원을 사용하여 새로운 자원을 활용하여 프로젝트 진행 상황을 가속화해야합니다.
  • 새로운 리소스는 코드베이스에 익숙하지 않을 수 있으므로 코드에 적응하는 데 더 많은 시간이 필요했습니다.

이제 테스트를 위해 새로운 리소스를 추가하는 것은 나쁜 생각이 아닐 수 있습니다. 테스트 사례가 제대로 작성된 경우 테스트 프로세스 속도가 향상 될 수 있으며 테스트 도구를 사용하면 도움이됩니다.


1
개발이 아닌 테스트에 리소스를 추가 한 경우 +1
Baelnorn

4

프로그래밍은 기본 생산 라인 작업이 아니기 때문입니다. 소프트웨어 프로젝트의 속도를 높이려면 시간이 걸립니다. 새로운 사람들은 부정적인 생산성을 이끌어내는 많은 질문을해야합니다 (즉, 새로운 사람 학습, 노인들에게 교육-> 실제 작업이 수행되지 않음).

단순화하기 위해 1 주일로 예정되어있는 비교적 간단한 1 인 프로젝트를 상상해보십시오. 목요일에는 정시에 완료되지 않으며 한 프로그래머가 6-7 일과 같이 더 걸릴 것임을 알고 있습니다 이 시점에서 다른 프로그래머를 추가하는 경우 적어도 몇 시간 또는 하루 정도 programmer1과 함께 작업해야하며 속도 등을 맞추기 위해 많은 질문을해야합니다. 나머지주의 순 긍정적 인 생산성. 새로운 프로그래머는 프로그래머가 아닌 기존 코드를 알지 못하기 때문에 몇 가지 추가 버그가 발생할 가능성이 있으므로 구현 및 테스트주기를 하루나 이틀 더 날려 버릴 것입니다. 이 프로젝트는 원래 프로젝트 대신 2 주 동안 지속됩니다.


글쎄, 당신의 예는 프로젝트에 남겨진 비현실적인 짧은 마감일에 약간 기인합니다. 한 달로 변경하면 필요하지 않다는 것을 알 수 있습니다. 개인적으로 나는 그 인용이 남용되었다고 생각한다. 방앗간 평균, 빈약 한 프로그래머를 고려할 때 사실입니다. 좋은 프로그래머가 있고 마감일이 1 일 또는 1 주와 같이 비현실적이지 않다면 따옴표가 잘못되었습니다 : 프로젝트를 도울 수 있습니다.
n1ckp

@ n1ck "너무 많은 요리사"와 같은 일반화는 요점은 단순히 프로젝트에 인력을 투입한다고해서 반드시 더 빨리 해결되는 것은 아니라는 점입니다. 1 명에서 2 명? 아마 것입니다. 2 ~ 4? 너무 많은 변수-프로젝트의 크기와 구조에 따라 다릅니다. 4-> 8? (최소한의 수익률 측면에서) 한계가 확실하게 나타납니다.
Murph

@ 머프 : 당신은 저와 거의 같은 것을 생각하는 것처럼 보이지만 방정식에서 매우 중요한 변수 하나를 추가했습니다 : 추가 인력의 기술 수준. 내 마지막 의견에 있었으므로 당신이 그것을 놓친 것이 이상하다고 생각합니다. 맹목적으로 인력을 추가하는 것은 물론 해결책이 아닙니다. 매우 전문적인 인력을 추가하면 (많은 사람이 필요하지 않음) 물론 도움이 될 수 있으며 신화적인 사람 달 인용문에는 없었습니다. 그게 내 요점이었다. 그렇지 않으면 나는 인용문의 의미에 대해 알지 못합니다.
n1ckp

좋아, 예제는 더 나을 수 있지만 일반화는 여전히 유효합니까?
Murph

1
나는 이것이 매우 특수한 경우에는 효과가 있지만 99 %는 그렇지 않을 수도 있다는 것을 알기 위해 충분한 시간을 거쳤 습니다. 당시 이론상 얼마나 좋아 보이더라도. 그렇습니다. 흑백 절대가 아닙니다. 열린 관계가 작동하지 않는 방식과 비슷합니다. 이론은 훌륭하고 유혹적이다;) ....하지만 짐승의 본질은 대부분의 경우 실패하게된다. "예외가 규칙을 증명하는 것"의 종류.
바비 테이블

4

프레드 브룩스 (Fred Brooks)는이 질문에 대한 답변으로 "The Mythical Man-Month"책을 썼습니다.

다음은 quick-n-dirty 버전입니다.

1) 더 많은 프로그래머에게 할당하기 위해 프로젝트를 별개의 조각으로 나눌 수있는 양에는 제한이 있습니다.

2) 프로젝트를 더 많은 사람들로 분할하면 응용 프로그램의 모든 부분을 조정하는 데 필요한 통신량이 증가합니다. 더 많은 의사 소통 = 더 많은 일.

3) 프로젝트에 추가 한 모든 사람에 대해 팀으로 이동해야하는 둘 이상의 통신 채널을 추가합니다. 이 숫자는 기하학적으로 증가하고 발생해야하는 통신량을 증가시킵니다. 더 많은 의사 소통 = 더 많은 일.

4) 각 팀원을 추가 할 때 "J-Curve"가 있습니다. 즉, 기존 생산 자원은 새로운 사람들이 프로젝트 작업에 소비 할 수있는 속도를 낼 수 있도록 시간을 소비해야합니다. 궁극적으로 용량을 늘릴 수 있지만 일시적으로 프로젝트 속도가 느려집니다. 프로젝트의 후반부에 더 많은 것을 배워야하므로 효과가 더욱 두드러집니다.


4

내가 언급하지 않은 또 다른 요소는 특정 작업을 특정 순서로 수행해야한다는 것입니다. 작업 3이 3에 종속되어 있기 때문에 작업 3이 완료 될 때까지 작업 4를 수행 할 수 없습니다. 누군가가 작업 3을 수행하는 동시에 작업 4를 수행하도록 누군가를 고용하는 것은 좋지 않습니다. 종종 프로젝트가 끝날 때 먼저 다른 작업을 완료해야하는 작업이 나머지 작업입니다.

또한 수행해야하는 가장 복잡한 작업 중 하나이며, 이미 완료된 작업을 중단하지 않으려면 전체 디자인을 최대한 이해해야합니다. 또한 일반적으로 가장 광범위한 비즈니스 영역 지식이 필요합니다. 몇 달 동안 프로젝트를 수행 한 후 일주일 이내에 작업을 수행 할 수 있습니다. 새로운 누군가는 일주일 이상을 빨리 (그리고 질문에 대답하기 위해 그 시간을 잘 활용하기 위해 내 임무에서 멀어지게) 보내고, 극도로 숙련 된 사람이라도 그 일을하는 데 더 오래 걸릴 것입니다. 유능하지는 않지만 프로젝트의 실제 구조 나 데이터베이스 백엔드에 익숙하지 않기 때문입니다.


+1. 이것은 마지막 직장에서 중요한 문제였습니다. 경영진은 사물을 생각하지 않고 주요 프로젝트에 대한 "맨 달 추가"열풍에 빠져있었습니다. 우리 팀은 주요 프로젝트와 통합해야했기 때문에 어느 시점에서 우리 팀은 느리게 훈련되었습니다. 그래서 그런데, 주요 프로젝트의 신규 채용은, 충분히 빠른 속도까지 얻을 수 없었다 우리가 (필요하다는 물건에 앞서 너무 멀리있어 자신의 백엔드 완료). 한 시점에서 우리는 반 구운 백엔드와 테스트 하니스를위한 프론트 엔드를 개발하고있었습니다. 흐름이 좋지 않습니다.
바비 테이블

2

항상 나를 위해 일하는 격언은 한 달에 9 명의 여성이 아기를 낳을 수 없다는 것입니다.


소프트웨어 프로젝트가 아기와 같다고 생각하면 현실 세계에 살고 있지 않습니다. 인용문에는 약간의 진실이 있지만 이것은 상황을 벗어나는 완벽한 예입니다. -1
n1ckp

1
분명히 그렇지 않습니다. 그러나 타임 라인을 판매하는 사람들은 소프트웨어 개발을 이해하지 못합니다. 비유는 정확히 알려지지 않은 개념을 알려진 실체와 관련시키기위한 것이다.
재실행

2
Brooks의 또 다른 비유는 식당에서 음식을 먹는 것입니다. 잘 운영되는 주방은 동시에 많은 식사를 할 수 있지만, 요리를하지 않거나 불에 타지 않고도 단식을 얼마나 빨리 할 수 ​​있는지에 대한 한계가 있습니다.
David Thornley

@ rerun : 당신의 비유의 문제는 임산부에 대한 근로자 비유가 없다는 것입니다. 귀하의 경우 여성 은 근로자가 아닌 회사 보다 더 쉽게 비교할 수 있습니다 . 그것이 내 의견으로는 그렇게 실패하는 이유입니다. 내가 생각할 수있는 가장 가까운 것은 음식 일 것입니다. 그러나 그것은 더 많은 코드 줄과 같을 것입니다.
n1ckp

1
@ n1ck : 내 인상은 당신이 그것을 이해하지 못하기 때문에 당신이 동의하지 않는다는 것입니다. Brooks는 여전히 쓸모없는 사람들을 유능한 사람들로 대체하는 것에 대해 이야기하지 않았습니다. 그는 여전히 고용 된 모든 사람들이 유능한 것으로 간주되기 때문입니다.
David Thornley

2

DeMarco와 Lister의 "Peopleware"도 제안합니다.

그리고 DeMarco의 "The Deadline"은이를 비롯하여 여러 다른 소프트웨어 프로젝트 관리 질병 및 오류를 밝고 읽기 쉬운 방식으로 제시합니다.

또한 프로젝트 / 팀 작업을 수행하는 사람들의 역학을 탐구하고 의사 소통 및 소개와 같은 것들이 팀의 사용 가능한 작업 시간을 고갈시키는 방법에 대해 자세히 설명합니다.

이 책들은 아주 싸기 때문에 (Amazon 또는 The Book Depository에서 가져 와서) 읽어보십시오. 여기에 짧은 대답은 실제로 질문에 대한 정의를 할 수 없습니다.


2

프로그래머를 고용, 훈련, 개발 및 감독하는 것만으로도 특정 프로젝트를 신속하게 진행할 수있을뿐 아니라, 다음과 같은 계획을 수립하고 테스트를 수행하는 데 시간이 걸리지 않습니다.

개발자 팀을 관리하는 경우, 오프닝이있는 경우 지금 채용하려는 사람들과 여러 담당자가 있어야합니다. 개발자 그룹에 참여하십시오.

새로운 개발 시스템을 얼마나 빨리 준비하고 준비 할 수 있습니까?

다른 프로젝트의 개발자에게 프로젝트 문서 및 사양을 보여줌으로써 테스트 한 적이 있습니까? 그들은 그것을 보았고 필요한 경우 프로젝트 작업을 시작할 수 있다고 결정 했습니까?

프로젝트 일정은 얼마나 최신입니까?

프로젝트가 뒤 떨어지면 허리케인과 비슷하기 때문에 비오는 날을 절약하십시오.


1

커뮤니케이션 문제 (다른 모든 답변에 대해 이야기하고 있다고 생각합니다) 외에도 프로젝트에 추가 된 사람이 코드를 아직 잘 모르기 때문에 버그를 만들 수 있습니다.

프로젝트에 추가 될 때마다 항상 문제를 해결하지 않으려 고 노력합니다. 이것은 처음에 물건을 고치는 데 훨씬 느리다는 것을 의미합니다.


0

나는 다른 답변에 의해 지금까지 완전히 무시 된 것을 지적하고 싶습니다.

사람들이 늦은 프로젝트에 추가 될 때까지 조직 전체에 많은 문제가 발생했습니다. 경영진과 고객은 행복하지 않습니다. 사람들은 그것에 착수하라는 압력을 받았습니다. 상황이 꽤 긴장됩니다.

이제 당신이 그 팀에 있다고 상상해보십시오. 분명히 이것은 당신의 잘못이 아닙니다. 계획 (아무도 당신의 것이 아님)은 너무 낙관적이었습니다. 모든 잘못된 결정은 귀하와상의하지 않고 내려졌습니다. 당신은 그것을 최대한 활용하려고 노력하고 있으며 갑자기 많은 새로운 사람들이 참여하고 있습니다. 이것은 어떤 메시지를 전달합니까?

위층 사람들은 분명히 당신에 대한 믿음을 잃었습니다. 그들은 당신이 엉망인 것을 보충하기 위해 큰 소년들에게 전화했습니다.

당신은 여전히 ​​이것을 성공시키기 위해 동기를 부여받을 것입니까? 아니면 ... 당신은 더 좌절하고 결국 모든 것이 추락 볼 수 있습니까?

당신의 시간이 걸릴 :-).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.