- 대형 기술기업의 짧은 근속 기간과 잦은 조직 개편으로 인해, 많은 엔지니어가 자신이 익숙하지 않은 코드베이스에서 작업을 함
- 코드 변경의 상당 부분이 입사 6개월 이내의 ‘초보자’ 수준 엔지니어에 의해 이루어지는 현실
- 일부 숙련된 ‘올드핸드’ 엔지니어가 품질을 보완하지만, 이들은 과중한 업무와 비공식적 책임으로 인해 한계 존재
- 기업은 전문성보다 인력 이동성과 가시성(legibility) 을 우선시하며, 이는 의도된 품질 저하의 대가
- 결과적으로, 엔지니어 개인의 역량과 무관하게 낯선 시스템에서 빠른 납기 중심으로 일하는 구조적 문제가 나쁜 코드의 근본 원인
대기업에서 나쁜 코드가 생기는 구조
- 대형 기술기업은 높은 연봉으로 유능한 엔지니어를 채용하지만, 근속 기간이 1~2년에 불과한 경우가 많음
- 주식 보상(share grant)이 4년 만에 완전 귀속되어 이후 급여가 절반으로 줄어드는 구조
- 일부 연간 리프레시(refresh)가 있지만, 보장되지 않아 엔지니어가 이직을 선택하게 됨
- 내부 이동까지 포함하면, 한 코드베이스에 3년 이상 머무는 경우는 드묾
- 조직 개편(re-org)이 매년, 혹은 그보다 자주 발생
- 반면 코드베이스는 10년 이상 유지되는 경우가 많아, 대부분의 엔지니어가 새로운 시스템을 ‘익혀가는 중’
- 결과적으로 코드 변경의 상당 부분이 입사 6개월 이내의 초보자에 의해 이루어짐
‘올드핸드’의 역할과 한계
- 일부 엔지니어는 특정 시스템에 오래 머물러 깊은 전문성을 갖게 됨
- 이들은 코드 리뷰를 통해 문제를 조기에 발견할 수 있음
- 그러나 이 구조는 비공식적이며 제도화되지 않음
- 기업은 장기 전문성 유지에 관심이 적고, 숙련자를 다른 팀으로 이동시키는 경우가 많음
- 숙련자는 항상 과중한 업무에 시달림
- 모든 변경을 직접 검토할 시간 부족
- 자신의 업무 성과가 줄면 오히려 불이익을 받을 위험 존재
평균적인 생산적 엔지니어의 현실
- 대기업의 평균적인 생산적 엔지니어는 다음과 같은 특징을 가짐
- 채용 기준을 통과할 만큼 유능하지만, 새로운 코드베이스나 언어에 익숙하지 않음
- 동시에 여러 프로젝트의 중첩된 마감 기한을 맞추며 일함
- 결과적으로, 품질보다 일정 중심의 환경에서 최선을 다하는 구조
- 예: 초보 엔지니어가 낯선 코드의 버그를 임시방편으로 수정하고, 숙련자가 간단히 검토 후 배포
- 이후 수년이 지나 해당 코드가 다시 발견되며 “왜 이런 코드가 작성됐나”라는 의문이 생김
기업이 이 구조를 유지하는 이유
- 대기업은 생산성보다 내부 가시성(legibility) 을 중시
- 누가 어떤 일을 하는지, 언제든 재배치 가능한 구조를 선호
- 이는 전문성과 코드 품질을 희생하는 의도적 선택
- 숙련도 손실을 감수하고, 문제 발생 시 빠르게 인력을 재배치할 수 있는 유연성을 확보
- 특히 AI 등 새로운 분야로의 빠른 전환(pivot) 이 중요해진 상황에서 이 전략은 기업에 유리하게 작동
- 그러나 이런 환경에서는 낯선 시스템에서 급하게 작업하는 엔지니어가 많아질 수밖에 없음
엔지니어 개인의 한계와 ‘순수/비순수’ 엔지니어링
-
개별 엔지니어는 이 구조를 바꿀 힘이 없음
- 2025년 현재, 권력의 중심이 엔지니어에서 경영진으로 이동
- 개인이 할 수 있는 최선은 특정 영역의 ‘올드핸드’가 되어 최소한의 품질을 지키는 것
- 그러나 과도한 개입은 오히려 성과 부족으로 평가(PIP) 를 받을 위험 존재
- 글은 ‘순수(pure)’와 ‘비순수(impure)’ 엔지니어링의 차이를 제시
- 순수 엔지니어링: 독립적 기술 프로젝트(예: 프로그래밍 언어 개발) 중심
- 비순수 엔지니어링: 낯선 시스템에서 일정 중심으로 일하는 현실적 환경
- 대기업 엔지니어는 대부분 비순수 엔지니어링에 속하며, 이 경우 나쁜 코드는 불가피한 부산물
- 시스템이 충분히 작동하면 프로젝트는 성공으로 간주됨
결론: 구조적 원인으로서의 ‘낯선 코드베이스’
- 대기업은 엔지니어를 자유롭게 이동시킬 권한을 가지며, 이는 전문성 손실을 감수한 기업의 선택
- 나쁜 코드의 책임은 개인이 아니라 조직 구조와 인력 운용 방식에 있음
- 모든 엔지니어의 역량을 두 배로 높여도, 낯선 코드베이스에서의 실수는 여전히 발생
- 근본 원인은 “대부분의 엔지니어가 익숙하지 않은 코드에서 대부분의 일을 수행해야 하는 구조”임
- 나쁜 코드 사례를 지적하는 것은 개선에 도움이 되지만, 비난의 대상은 엔지니어가 아니라 시스템임