이 많은 질문들과 마찬가지로, 그 대답은 다음과 같습니다.
그것은 달려있다
모든 프로그래머가 모든 코드 줄을 알아야한다는 입장을 취하는 것이 잘못 인도되었다고 믿을만한 근거가 있습니다.
코드 조각에 대해 깊이 이해 한 사람이 전혀 모르는 사람 (내 경험에 대한 큰 믿음의 도약이 아님)보다 5 배 빠르게 변경을한다고 가정하면 약 한 달이 걸립니다. 상당히 크기가 큰 모듈에 대한 이해도를 높이기 위해 코딩 경험을 쌓았을 때 (합리적이지 않은 경우도 있음) 다음과 같이 (완전히 가짜 및 가상의) 숫자를 실행할 수 있습니다.
- 프로그래머 A : 깊이 이해
- 프로그래머 B : 없음
프로그래머 A가 하루에 1 단위의 작업을 수행한다고 가정 해 봅시다. 5 근무일의 4 주 동안 20 단위의 작업을 수행 할 수 있습니다.
따라서 프로그래머 B는 하루에 0.2 단위의 작업으로 시작하여 20 일째 (프로그래머 A만큼 좋은 21 일)에 0.96 단위의 작업으로 끝나는 동일한 시간에 11.6 단위의 작업을 수행합니다. 20 일 그 달 동안 프로그래머 B는 프로그래머 A와 비교하여 58 %의 효율성을 달성했습니다. 그러나 이제 해당 모듈과 첫 번째 모듈을 알고있는 다른 프로그래머가 있습니다.
물론, 적당한 규모의 프로젝트에 50 개의 모듈이 있습니까? 따라서 이들 모두에 익숙해지는 데 약 4 년이 걸리며, 이는 학습 프로그래머가 평균적으로 프로그래머 A와 비교하여 58 %의 효율로 일한다는 것을 의미합니다.
따라서 동일한 프로그래머, 동일한 프로젝트 (A는 모두 알고 있고 B는 그 중 어느 것도 알고 있지 않습니다)라는이 시나리오를 고려하십시오. 연중 250 일 (근무일 기준)이 있다고 가정합니다. 워크로드가 50 개 모듈에 무작위로 분산되어 있다고 가정합니다. 두 프로그래머를 균등하게 분할하면 A와 B 둘 다 각 모듈에서 5 일 (근무일 기준)을 얻습니다. A는 각 모듈에서 5 단위의 작업을 수행 할 수 있지만 B는 내 작은 Excel 시뮬레이션에 따르면 각 모듈에서 1.4 단위의 작업 만 수행합니다. 총 (A + B)는 모듈 당 6.4 작업 단위입니다. B가 작업하는 모듈에 대한 기술없이 대부분의 시간을 소비하기 때문입니다.
이 상황에서 B가 더 작은 모듈의 하위 세트에 초점을 두는 것이 가장 좋습니다. B가 25 개의 모듈에만 중점을 둔 경우 각 모듈에 대해 총 3.8 개의 작업 단위로 10 일이 소요됩니다. 프로그래머 A는 B가 작동하지 않는 25 개의 모듈에서 각각 7 일, B와 같은 모듈에서 각각 3 일을 소비 할 수있었습니다. 총 생산성은 모듈 당 6.8-7 대 (평균 6.9)로 훨씬 높았습니다. A와 B가 작업을 균등하게 분산시킬 때 수행 한 모듈 당 6.4 단위보다
B가 작동하는 모듈의 범위를 좁 히면 효율성이 향상됩니다 (최대 1 점).
훈련
또한 모듈에 대해 많이 알지 못하는 사람은 더 많은 경험을 가진 사람보다 더 많은 사람을 방해 할 것이라고 주장합니다 . 따라서 위의 숫자는 B가 이해하지 못하는 코드에 더 많은 시간을 소비할수록 질문을 통해 A가 더 많은 시간을 소비하고 때로는 A가 B의 문제를 해결하거나 해결하는 데 도움이되는 시간을 고려하지 않습니다. 누군가를 훈련시키는 것은 시간이 걸리는 활동입니다.
최적의 솔루션
그래서 최적의 솔루션은 다음과 같은 질문에 기초해야한다고 생각합니다.
- 당신의 팀은 얼마나 큽니까? 모든 사람이 모든 부분에 대해 교차 훈련을받는 것이 합리적입니까, 아니면 10 명으로 구성된 팀이있는 경우 각 모듈을 최소한 3 명에게 알려줄 수 있습니까? (프로그래머 10 명과 모듈 50 개로 각각의 프로그래머는 15 배의 모듈을 알아야 3 배 범위를 얻을 수 있습니다.)
- 직원의 이직률은 어떻습니까? 평균 3 년마다 직원을 인계하고 시스템의 모든 구석을 실제로 아는 데 시간이 더 걸리는 경우 교육 비용을 상환 할만큼 오래 걸리지 않습니다.
- 실제로 문제를 진단하려면 전문가가 필요합니까? 많은 사람들이 "그 사람이 휴가를 가면 어떻게되는지"라는 변명을 사용하지만, 경험이없는 시스템에서 문제를 진단하기 위해 여러 번 부름을 받았습니다. 경험이 많은 사람이 더 빨리 찾을 수 있다는 것이 사실 일 수도 있지만, 일주일이나 2 주일 없이는 살 수 없다는 의미는 아닙니다. 미션 크리티컬 한 소프트웨어 시스템은 거의 없으므로 5 시간 대신 1 시간 내에 문제를 진단해야합니다. 그렇지 않으면 세상이 끝날 것입니다. 이러한 위험을 평가해야합니다.
그것이 "의존"이라고 생각하는 이유입니다. 유연성이 없기 때문에 두 프로그래머간에 20 개의 모듈을 중간 (각각 10 개)으로 나누고 싶지는 않지만 유연성이 없기 때문에 많은 모듈을 잃기 때문에 50 명의 모듈에서 10 명의 프로그래머를 교차 훈련하고 싶지 않습니다. 효율성이 뛰어나고 중복성이 많이 필요하지 않습니다.