ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • The Mythical Man-Month
    개발 일지 2025. 11. 25. 17:03

    소프트웨어 프로젝트들은 항상 늦어진다.

     

    첫 번째 이유는 사람은 낙관적이기 때문이다. 그래서 일정을 설정하는데 오류를 범한다. 이러한 낙관론은 테스팅 단계에서 가장 크게 실패한다. 따라서 소프트웨어 일정을 잡을 때는

    1/3: 디자인

    1/6:코딩

    1/2:테스팅

    이런 식으로 코딩하는 시간은 1/6만 할애한다.

     

    다음 이유는 프로젝트 매니저가 일정을 설정할 때 사람 명수에 따라 프로젝트 진행속도가 올라간다는 잘못된 가정을 하기 때문이다. 사람이 추가되면 사람을 교육하는데 드는 시간이 선형적으로 증가한다. 거기에 커뮤니케이션 비용은 지수적으로 증가하여 결국 사람을 추가하다 보면 프로젝트가 더 늦어지게 된다.

     

    프로젝트가 늦어진 걸 아는 타이밍은 항상 데드라인이 얼마 남지 않은 마지막 기간이다. 이때 어떻게 대쳐 해야 할까. 요리사가 오믈렛이 2분 안에 된다고 했다. 하지만 시간이 부족하다면 손님에게는 두 가지 선택지가 있다. 기다리거나 덜 읽은 오믈렛을 먹거나. 프로그램의 고객에게도 마찬가지이다. 보통 프로젝트의 일정을 책임지는 사람들은 프로그래밍을 모른다. 이들의 요구에 맞추게 된다면 결국 오믈렛을 센 불에 익혀야 하고 한쪽은 타고 한쪽은 덜 익은 상태의 최악의 오믈렛을 서빙해야 하게 된다.

     

    Regenerative Schedule Disaster

    보통의 경우 프로젝트가 늦어졌을 때 다음과 같은 선택지들이 있다.

    1. 마감 기한을 늘리지 않고 남은 기한을 고려해서 인원을 늘린다

    2. 마감 기한을 늘리지 않고 앞에 있었던 딜레이가 남은 일에도 적용된다 가정하고 그를 고려하여 더 인원을 늘린다.

    3. 기한을 늘린다. 충분히 기한을 늘려서 더 늦어지는 일이 없게 한다.

    4. 프로젝트 범위를 조정한다.

    앞의 두 경우는 반드시 실패한다. 새로 들어온 사람들은 교육을 받아야 하고 교육을 하는 사람의 man-month가 낭비된다. 그리고 다시 일을 쪼개야 하기 때문에 여기서 또 낭비가 발생한다. 그래서 결국에는 또 딜레이가 발생한다.

     

    Brooks's Law

    Adding manpower to a late software project makes it later

     

    프로젝트가 늦어져서 사람을 늘릴때는 해당 사람이 얼마나 숙련되어 있는지 그리고 일을 얼마나 더 쪼갤 수 있는지를 고려해야 한다. 이를 고려하면 더 적은 사람을 추가하고 기한을 늘리는 식으로 스케줄을 다시 잡을 수 있을 것이다. 절대로 더 많은 사람과 더 적은 기한으로 마감기한을 설정할 수 없다.

    '개발 일지' 카테고리의 다른 글

    The Second-System Effect  (0) 2025.12.08
    Aristocracy, Democracy, and System Design  (0) 2025.12.01
    The Surgical Team  (0) 2025.11.27
    리팩토링은 코드를 이해하는 좋은 과정  (0) 2025.11.22
    The Tar Pit  (0) 2025.11.22

    댓글

Designed by Tistory.