GN⁺: 버스 넘버 – 동료들이 작성하지 말라고 요청한 GitHub 플러그인
(scannedinavian.com)버스 팩터란?
- 버스 팩터는 프로젝트에서 몇 명의 팀원이 갑자기 사라져야 프로젝트가 지연되는지를 나타내는 지표임.
- 2015년, 회사에서 유일하게 수익을 창출하는 코드베이스의 기여자가 해고되었을 때, 이를 계산하는 GitHub 플러그인을 작성하기로 결심함.
플러그인 개발 과정
- 트럭 팩터 연구 논문을 참고하여 플러그인을 개발하기 시작함.
- 동료들은 이 플러그인이 관리자가 쉽게 해고할 사람을 계산하는 도구로 사용될 수 있다고 우려함.
결과 재현 시도
- 연구 논문에서 제공하는 GitHub 저장소를 사용하여 결과를 재현하려고 시도함.
- 데이터는 JSON 형식으로 제공되며, 시각화는 CSV를 통해 가능함.
- README의 지침이 제대로 작동하지 않아 문제를 해결하는 데 시간이 걸림.
GNU Parallel 사용
- GNU Parallel을 사용하여 여러 GitHub 저장소를 동시에 클론함.
- 8개의 프로세스만 사용하도록 설정했지만, 모든 코어가 최대치로 사용됨.
Ruby Gems와 NixOS
- Linguist 플러그인을 설치하는 데 어려움을 겪음.
- NixOS에서 Ruby Gems를 설치하는 방법을 찾고 있음.
결과 재계산
- 원본 저장소를 포크하고, Java 소스를 컴파일하여 결과를 재계산함.
- Linux 커널 저장소의 예시 결과: 트럭 팩터 12, 커버리지 49.98%.
문제점 및 추가 연구
- 계산 과정에서 리뷰 프로세스를 고려하지 않음.
- Linux 커널의 트럭 팩터가 10년 전과 크게 다른 이유를 조사할 필요가 있음.
- 더 나은 계산 방법을 찾기 위해 논문의 인용문을 검토할 계획임.
결론 - 버스 팩터의 중요성
- 2015년 논문에서는 Linux 커널의 트럭 팩터를 90으로 평가했으나, 현재는 12로 계산됨.
- 이는 개선이 아님을 의미함.
- 추가적인 시각화와 세부 사항은 mclare의 블로그에서 확인 가능함.
Hacker News 의견
-
CodeScene의 기능 중 하나는 코드 변경이 빈번한 영역에서 지식의 분포가 낮은 부분을 식별하여 위험이 높은 영역을 찾는 것임
- 누군가 퇴사할 경우, 그 사람이 알고 있는 코드만 쉽게 확인할 수 있어 인수인계 계획이 용이함
- 악의적으로 사용될 수 있다고 생각하지 않으며, 가시성을 제공하는 도구임
-
Amazon은 코드 시스템에 대한 보고서를 통해 팀의 활동과 위험 요소를 쉽게 파악할 수 있는 기능을 제공함
- '버스 팩터'는 팀의 특정 구성원이 부재 시 팀이 얼마나 영향을 받을지를 나타내는 지표임
- 개발자들이 특정 시스템에 대한 지식이 직업 안정성을 보장한다고 생각할 수 있지만, 이는 기술적 위험으로 볼 수 있음
-
GNU Parallel이 모든 코어를 사용하는 이유는 각 git clone이 여러 index-pack 스레드를 생성하기 때문임
- pack.threads를 1로 설정하면 도움이 될 수 있음
-
'버스 팩터'는 팀의 자율성과 투명성을 나타내며, 이상적인 상태에서는 모든 팀원이 모든 것을 이해할 수 있어야 함
- 0 버스 팩터는 팀원이 서로의 역할을 대체할 수 있음을 의미하며, 이는 소프트웨어의 단순성을 반영함
- 이메일, 커밋, PR, 코드 라인 수 등으로 사람을 평가하는 것은 잘못된 방식임
-
경력 상승에 따라 개발자는 코드 작성보다는 리뷰에 더 집중해야 한다는 오해가 있음
- 훌륭한 개발자를 평범한 관리자로 바꾸고 싶지 않음
-
시스템의 저자는 파일에 중요한 기여를 한 사용자로 정의되며, 저자가 전체 파일의 50% 미만을 커버할 경우 시스템은 심각한 지연을 겪을 수 있음
-
스타트업의 해고 문제는 '누구를 해고할 것인가'가 아니라 '다음 버전을 빠르게 개발할 팀은 누구인가'에 대한 질문임
-
일부 기업 소프트웨어에서는 이메일 송수신량을 측정하는 대시보드가 존재할 수 있음
- 동료들이 반대하는 일을 취미로 진행하는 것은 좋지 않은 행동으로 보일 수 있음
-
CPAN은 오랫동안 버스 팩터를 추적해왔으며, 예를 들어 Moose의 버스 팩터는 5임
-
'복권 팩터'라는 용어를 사용하여, 누군가 복권에 당첨되어 떠나도 프로젝트가 계속될 수 있는지를 나타냄