- 대규모 기술 부채를 가진 회사에서 코드 복제와 구식 프레임워크로 인한 비효율이 발생함
- 프로젝트 진행 중 관리 신뢰 상실과 조직 내 변화 저항이 주요 장애로 작용함
- 기술 부채의 근본 원인은 요구 불명확, 비현실적 일정, 구식 기술 선호, 경영진의 단기 대응, 개인의 자존심 등 사람 요인임
- 기술적 성과뿐 아니라 인식 관리와 커뮤니케이션이 프로젝트 성공에 필수적임
- 엔지니어는 기술 능력 외에도 조직 내 협업과 인간관계 조율 능력을 갖춰야 함
기술 부채와 복제 코드 문제
- 예전에 근무했던 회사에서 수백만 줄의 코드와 단위 테스트 부재, 10년 이상 된 프레임워크 사용으로 심각한 기술 부채 존재
- Windows 전용 모듈을 Linux에서 실행하기 위해 코드 수십만 줄을 복사·붙여넣기로 처리
- 이로 인해 두 개의 코드베이스가 생겨, 기능 추가와 버그 수정이 각각 따로 필요해짐
- 이러한 상황은 유지보수 불가능한 구조를 초래하며, 장기적으로 코드 간 괴리가 커짐
사람 문제로 인한 기술 부채
-
기술 부채 프로젝트는 경영진 설득이 어렵고, 결과적으로 기능 변화가 거의 없기 때문에 가시적 성과 부족
- 프로젝트가 지연되며 경영진의 신뢰 상실
- 문제의 본질은 기술이 아니라 사람의 태도와 조직 문화
- 많은 개발자가 변화에 저항하며, 과거 방식에 안주
- 코드 구조는 작성자의 성격과 변화 수용도를 반영
- 기술 부채는 명확하지 않은 요구, 비현실적 약속, 구식 기술 선택, 경영진의 중단 결정, 개인적 자존심 등에서 발생
- 변화 회피 성향이 강한 팀일수록 코드에도 변화 거부적 특성이 반영됨
- 여러 개발자는 수년째 하던 방식 그대로 작업하고 있었고, 심지어 “새로운 것 배우고 싶지 않다”는 말까지 나왔음
- 이런 환경에서는 정리 속도보다 부채 축적 속도가 빠르기 때문에, 부채를 줄이기 전에 부채가 더 쌓이지 않도록 막는 것이 우선임
- 응급실의 triage(우선 분류) 비유처럼, 먼저 “출혈을 멈추는” 단계가 필요함
이상적인 세계와 현실의 간극
- 엔지니어링 문제를 정치나 조직 맥락과 분리해 해결할 수 있는 이상적 환경은 거의 없음
- 대부분의 프로젝트에는 비기술적 이해관계자가 존재
- “우리가 하고 있으니 믿어달라”는 태도는 통하지 않음
-
성과 인식 관리가 실제 성과만큼 중요
- 비기술자는 기술 부채 정리의 필요성을 직관적으로 이해하지 못하므로, 정량적·사업적 가치로 설명해야 함
- 리더십이 엔지니어링 배경이 없는 경우, 가시적 수치와 효과 제시가 필요
- 결국 팀이 생산적으로 보이는 것 자체도 실제 생산성만큼 중요함
시니어 엔지니어에게 필요한 역량
- 시니어 이상 직급에서는 부서 간 협업과 인간관계 조율 능력이 필수
- 컴퓨터공학 교육에서는 성격·자존심·관계 관리같은 ‘사람 다루기’를 가르치지 않음
- 뛰어난 기술력을 가진 엔지니어라도 대규모·조직적 변화가 필요한 문제할 수 있음
- 개인 생산성은 높지만, 조직적 영향력은 제한적
-
‘Heads up coder’ 역할이 중요함
- 깊은 기술 역량을 유지하면서도 프로젝트 리스크를 조기에 인지하고 팀을 조정할 수 있는 인물
- 단일 코어처럼 혼자 빠르게 일하는 대신, 팀 전체를 효율적으로 이끄는 역할
- 순수 기술형 엔지니어와 달리, 조직의 맥락과 리스크를 함께 읽어내며 움직일 수 있음
정리
- 기술 문제의 근원에는 항상 사람이 있음
- 대부분의 기술 문제는 사람, 문화, 커뮤니케이션의 문제로 귀결
- 기술 부채는 코드의 문제가 아니라 조직의 행동 패턴과 문화가 만든 결과
- 기술 부채 해결에는 조직적 변화 수용과 리더십의 이해가 선행되어야 함
- 그리고 기술적 탁월함만으로 해결되지 않는 문제들이 경력 후반의 더 큰 무대에서 기다리고 있음
- 진정한 시니어 엔지니어는 기술과 인간 이해를 함께 다루는 균형형 리더임