Mythical Man Month의 영향을 완화하는 방법은 무엇입니까?


16

Brooks의 법칙 : 늦은 소프트웨어 프로젝트에 인력을 추가하면 나중에 만들 수 있습니다.

그의 저서 No Silver Bullet – 소프트웨어 공학의 본질과 사고에서 Frederick Brooks는 Mythical Man Month 의 개념을 정의합니다 .

Brooks의 가정은 복잡한 프로그래밍 프로젝트 를 작업자 간의 의사 소통 없이 수행 할 수있는 개별 작업으로 완벽하게 분할 할 수 없으며 작업과 작업을 수행하는 작업자간에 복잡한 상호 관계를 설정하지 않고서 는 불가능 합니다 .

1982 년 이래로 우리는 확실히이 문제를 해결하고 더 많은 경험을 쌓았습니다. 더 많은 문제를 일으키지 않고 프로젝트에 리소스를 추가하기 위해 직장에서 성공적으로 적용한 몇 가지 솔루션은 무엇입니까?


5
이 질문은 Software Engg에 더 잘 맞기 때문에 주제를 벗어난 주제로 마무리하려고합니다. SE ( softwareengineering.stackexchange.com ) 또한 엄격하게 Devops에 국한되지 않습니다
— Dawny33

2
이것은 엄격하게 DevOps 관련 질문입니다. 소프트웨어 전달 프로세스와 직접 관련이 있습니다. DevOps의 의미를 실제로 이해하고 있습니까?
— Jiri Klouda

3
당신은 DevOps를 계속 말하지만, 그것이 당신이 생각하는 것을 의미한다고 생각하지 않습니다.
— Jiri Klouda

3
@ Dawny33 : DevOps의 기본 책 중 하나 인 Phoenix Project를 읽으십시오. AWS, Docker, Jenkins 또는 기타 도구에 대한 언급은 없습니다. 전체 책은 프로세스, 조직 계층 및 구조, 팀 작업 방식에 관한 것입니다. DevOps는 일본 및 이후 미국에서 제조를 개선 한 과학적 아이디어를 소프트웨어 개발 프로세스로 가져 오는 방법입니다. Edward W. Deming과 Eliyahu M. Goldratt의 작업을 기반으로 한 아이디어. DevOps로 보는 것은 표면, 도구, 결과 일뿐입니다. 불필요한 부분.
— Jiri Klouda

5
@ Dawny33이 질문은 소프트웨어 엔지니어링에 적합하지 않습니다. 이 일반적인 주제가 있지만 질문은 너무 광범위합니다. 문제를 해결하려는 것이 아니라 의견을 구하는 것입니다. 어떤 유형의 질문에 동의하는지 모르는 경우 다른 커뮤니티를 제안하지 마십시오. 이 질문이 소프트웨어 엔지니어링에 게시 될 경우 투표가 중단되고 마감되며 매우 빨리 삭제 될 수 있습니다. 사용자 경험이 좋지 않습니다.
— Thomas Owens

답변:


18

MMM은 무엇입니까

먼저 Brook의 법칙의 맥락을 설명하고 싶습니다. 그가 1975 년에 다시 만들었다는 가정은 무엇입니까?

한 달은 한 달에 한 사람이 수행 한 작업을 나타내는 가상의 작업 단위입니다. Brooks의 법에 따르면 수개월 동안 유용한 작업을 측정하는 것은 불가능합니다.

출처 : https://en.wikipedia.org/wiki/The_Mythical_Man-Month

과거에는 복잡한 프로그래밍 프로젝트가 큰 모놀리스 시스템을 의미했습니다. 또한 Brooks는 개발자 간의 의사 소통없이 그리고 작업과 작업을 수행하는 사람들 사이에 복잡한 상호 관계를 설정하지 않고 작업 할 수있는 개별 작업으로 완벽하게 분할 할 수 없다고 주장합니다.

이것은 응집력이 높은 소프트웨어 모놀리스에서 매우 사실입니다. 얼마나 많은 디커플링이 수행 되더라도 여전히 큰 모노리스는 새로운 프로그래머가 모노리스에 대해 배우는 데 필요한 시간을 요구합니다. 또한 통신 오버 헤드가 증가하여 사용 가능한 시간이 계속 증가합니다.

그러나 실제로 이런 식이어야합니까? 우리는 모놀리스를 작성하고 개발자 수는 n(n − 1) / 2어디에서 의사 소통 채널을 유지해야 n합니까?

우리는 수천 명의 개발자가 대규모 프로젝트를 수행하고있는 회사가 있다는 것을 알고 있습니다. 따라서 1975 년 이후 변경된 것이 있어야합니다.


MMM 완화 가능성

2015 년 PuppetLabs와 IT Revolution은 2015 년 DevOps 보고서 상태 결과를 발표했습니다 . 이 보고서에서는 성과가 높은 조직과 비 성능의 구별에 중점을 두었습니다.

고성능 조직은 예상치 못한 속성을 보여줍니다. 예를 들어, 개발시 프로젝트 기한이 가장 좋습니다. 최고의 운영 안정성 및 운영 안정성. 최고의 보안 및 규정 준수 추적 기록뿐만 아니라

보고서에서 강조된 놀라운 점 중 하나는 일일 배포 메트릭입니다. 그러나 하루에 한 번의 배포뿐만 아니라 배포 / 일 / 개발자를 측정했으며 고성능 조직과 비 성능 조직에 더 많은 개발자를 추가하는 데 따른 영향을 측정했습니다.

이 보고서의 그래프입니다-

개발자 당 일일 배포

성과가 저조한 조직은 신화 적 인간의 달 가정과 일치합니다. 고성능 조직은 개발자 수에 따라 배포 / 일 / 개발 수를 선형으로 확장 할 수 있습니다.

Gene Kim의 DevOpsDays London 2016 에서 훌륭한 발표 가 이러한 결과에 대해 이야기합니다.


그것을하는 방법

먼저, 고성능 조직이되는 방법은 무엇입니까? 이것에 대해 이야기하는 두 권의 책이 있습니다.이 답변에 충분한 공간이 없으므로 링크로 연결하겠습니다.

소프트웨어 및 IT 조직의 경우 고성능 조직이되기위한 중요한 요소 중 하나는 품질과 속도에 중점을 둡니다 .

예를 들어 Ward Cunningham은 기술 채무에 대해 우리가 고쳐 놓지 않은 모든 것을 설명합니다 . 이것은 시간이있을 때 수정 될 것이라는 약속이 항상 있기 때문에 경영진에 의해 수용됩니다.

시간이 충분하지 않고 기술 부채가 점점 악화되고 있습니다.

기술 부채가 증가하는 원인은 무엇입니까?

  • 레거시 코드
  • 환경의 수동 구성
  • 수동 테스트
  • 수동 배포

레거시 코드 Michael Feathers의 레거시 코드 로 효과적으로 작업에 정의 된대로 자동화 된 테스트가없는 코드가 있습니다.

코드를 프로덕션으로 가져 오는 데 언제든지 단축키가 사용됩니다. 운영은이 부채를 영원히 유지해야합니다. 그러면 배포 프로세스가 점점 길어집니다.

Gene은 6 주 동안 배포 한 회사에 대한 프레젠테이션에서 이야기를 전합니다. 400 명을 묶는 수만 건의 극도로 오류가 많은 지루한 단계가 포함되어 있으며 매년 4 번이 작업을 수행합니다.

DevOps의 장점 중 하나는 안정성이 소규모 배포를 더 자주 수행한다는 것입니다.


예

이 두 프레젠테이션은 Amazon이 코드를 프로덕션에 배포하는 데 걸리는 시간을 단축하기 위해 수행 한 모든 작업을 보여줍니다.

Gene에 따르면이 고성능 조직에서 시간이 지남에 따라 변경되는 유일한 것은 개발자 수입니다. 따라서 아마존 사례에서 4 년 만에 더 많은 사람을 추가함으로써 배포가 10 배 증가했다고 말할 수 있습니다.


이는 특정 조건 하에서 올바른 아키텍처, 올바른 기술 관행, 올바른 문화적 규범에 따라 개발자 수가 증가함에 따라 개발자 생산성 이 확장 될 수 있음을 의미합니다. 그리고 DevOps는 분명히이 모든 것의 중간에 있습니다.


4

내가 한 일은 (이것은 주관적입니다) 다음과 같습니다.

마감일을 생각하는 관리자가 필요한 시간을 줄이기 위해 팀에 사람들을 추가하고 MMM 아래에있는 것처럼 보일 때, 나는 왜 이것이 나쁜지에 대해 그와 이야기합니다. 내가 가장 좋아하는 비유는 한 여성이 9 개월 안에 아기를 낳을 수 있다면 9 명의 여성은 한 달에 1 명의 아기를 낳지 않지만 9 개월 동안 9 명의 아기를 낳을 것이라는 점을 상기시키는 것입니다. 시간이 단축되지 않고 병렬 처리가 더 좋습니다.

결정이 우리 팀에 강제 될 때, 우리는 일반적으로 하나 더 나누기에 일부 작업을 시도하고 이것이 가능하지 않을 때 우리는 일반적으로에 의존 페어 프로그래밍 한 프로그래머가 입력에 대한 책임, 그리고 다른 지시 코드 (그리고 주기적으로 전환 ).

코드 작성 자체는 느리지 만, 작성하는 동안 불가피한 검토로 인해 테스트 할 때 오타 / 린트 및 버그가 줄어 듭니다. 전반적인 코드 품질도 조금 더 좋다고 생각하지만 그 주장을 뒷받침 할 지표는 없습니다.


1
나는 쌍 프로그래밍 아이디어를 좋아한다. 실제로 도움이 될 수 있습니다. 나는 왜 내가 연구하고있는 이론에 근거하여 나중에 설명 할 수있을 것이다.
— Jiri Klouda

기다려주세요!
— Peter

4

CI 관점에서 독점적으로 말하면, 프로젝트에서 작업하는 개발자의 수가 증가하면 일반적으로 같은 지점에서 일하는 사람들이 더 많아집니다.

기존 CI 시스템은 이와 관련하여 확장 성 문제가 있습니다. 대규모 프로젝트 / 팀의 지속적인 통합 확장 방법을 참조하십시오 . . 이것은 신화적인 남자 달 개념을 따라 진행됩니다.

이 질문에 대한 대답에서 제안하는 솔루션은 확장 성이 뛰어난 CI 시스템을 사용하여 규모가 큰 전체 팀을위한 단일 지점 / 트렁크 기반 통합의 진정한 CI로 마이그레이션 할 수 있습니다.

동일한 페이지의 모든 사람이 동일한 자동화 된 도구 / 프로세스와 CI 시스템 자체 내에서 자동화 된 대부분의 QA 검증을 사용하면 역할을 전환하고 팀 구성원간에 집중하는 것이 훨씬 쉬워집니다. 전체 개발 과정이 더 매끄럽고 예측 가능하며 완화되었습니다.

이러한 환경에서 새로운 사람들을 끌어 들이고,보다 숙련 된 팀 구성원들로부터 덜 어려운 작업을 덜어내어 더 어려운 작업을 수행 할 수있게하면 생산성을 높일 수 있습니다.

나는이 모든 것을 신화적인 달의 개념 효과를 진정시키는 것으로 볼 수 있다고 생각합니다.


고성능 조직에서 더 많은 개발자를 추가한다는 것은 일반적으로 분리 된 소프트웨어를 작성하는 더 독립적 인 팀을 만드는 것을 의미합니다. 이를 통해 더 많은 사람들이 더 빨리 달성 할 수 있습니다. 그것들이 모두 단일 통합 브랜치를 통해 통신하게하는 것은 반 패턴이며 대부분의 경우 속도가 느려질 것입니다.
— Evgeny

Having them all communicate via a single integration branch is an anti-pattern- 왜? 그들이 더 이상 자신의 작업을 통합 할 필요가 없다는 의미에서 분리 된 경우, 겹치지 않거나 충돌하지 않는 방식으로 지점에 닿게됩니다. 그들의 작업이 여전히 통합되어야하는 경우, 추가 브랜치를 진행하면 CI 방법론에서 벗어나 모든 이점을 잃음으로써 통합이 지연되고 복잡해집니다.
— Dan Cornilescu

나는 우리가 "분기"의 의미에 동의하지 않는다고 생각합니다. 단일 브랜치 (git 또는 svn)를 가진 하나의 큰 저장소를 갖는 것이 좋습니다. 동일한 지점에서 작업하는 모든 사람의 오버 헤드가 발생합니다. 각 리포지토리에 해당 분리 된 서비스를 추적하는 분기가있는 리포지토리가 여러 개있는 것도 좋습니다. 도구, 커밋 및 체크 아웃 코드에 추가되는 오버 헤드의 양에 따라 다릅니다.
— Evgeny

아, 죄송합니다. 예-너무 익숙해서 다른 사람들은 그렇지 않다는 것을 계속 잊어 버리고 있습니다. 브랜치에서는 SCM 브랜치의 높은 수준의 일반적인 표현을 언급하고 있지만, 모 놀리 식 방식으로 함께 관리되는 한 실제 기본 SCM 시스템의 특성은 실제로 중요하지 않습니다. . main분기 가있는 1 개의 큰 저장소 또는 분기 가있는 10 개의 병렬 저장소 (git 모듈?) main는 CI 예상과 거의 동일해야합니다.
— Dan Cornilescu

그런 다음 첫 번째 의견의 진술은 사실입니다. 바벨탑에서는 독립을 할 수 없습니다. 모놀리스가 있으면 모든 사람에게 오버 헤드가 매우 높아서 모든 사람에게 부담이됩니다. 분리 된 프로젝트를 관리 할 분리 된 소형 VCS 시스템으로 나타내는 것이 훨씬 좋습니다. 충분히 기억한다면 일부 회사는 ClearCase와 다른 VCS를 사용하여 모든 회사 코드를 관리하고있었습니다. 오버 헤드는 끔찍했습니다.
— Evgeny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.