왜 최고의 엔지니어들은 다른 회사 면접을 보고 있는가

https://codegood.co/writing/why-your-best-engineers-are-interviewing-elsewhere

Why Your Best Engineers Are Interviewing Elsewhere 의 원문 번역

2018년, 연간 반복 매출(ARR) 4천만 달러 규모의 SaaS 회사에서 한 시니어 엔지니어는 제안된 데이터베이스 아키텍처가 확장되지 않을 것이라고 주장하며 6개월을 보냈다. 프로덕트 조직은 빠른 출시를 원했다. 엔지니어링 리더십은 그의 말이 맞다는 데 동의했지만, 프로덕트 조직에 반대하지는 않았다. 결국 결정은 내려졌다. 지금은 출시하고, 나중에 리팩터링하자. 그는 그 주에 바로 이직 면접을 시작했다.

그가 면접을 시작한 이유는 기술적 결정 그 자체 때문이 아니었다. 그런 결정은 언제든 일어난다. 문제는 그의 판단이 중요하지 않았다는 사실이었다. 8개월 후, 시스템은 매일 성능 문제를 겪기 시작했다. 18개월 후, 회사는 시니어 엔지니어 5명을 잃었고, 왜 이런 일이 발생했는지 진단하기 위해 프랙셔널 CTO를 고용했다.

진단 결과는 명확했다. 임원 레벨에서는 엔지니어들이 불만을 가지고 있다는 사실을, 그들이 퇴사하기 전까지 아무도 알지 못했다. 퇴사 인터뷰에는 “더 나은 기회”, “경쟁력 있는 보상” 같은 표현이 적혀 있었다. CEO는 남아 있는 엔지니어들에게 15% 인상을 승인했다. 그럼에도 불구하고 더 많은 엔지니어가 떠났다. 진짜 문제는 보상이 아니었다. 문제는 정보가 조직의 위계 구조를 따라 위로 전달되지 않는다는 점이었고, 문제가 임원 레벨에 도달했을 때는 이미 수개월 전에 퇴사 결정을 내린 뒤였다는 점이었다.

그 다섯 명의 엔지니어를 대체하는 데 들어간 비용은 채용 수수료, 생산성 손실, 그리고 지식 유출을 합쳐 약 140만 달러였다. 이직률 문제는 그 비용의 일부만으로도 해결할 수 있었지만, 전제 조건은 임원들이 그 문제가 존재한다는 사실을 알고 있었어야 한다는 것이었다. 그러나 그들은 알지 못했다. 주니어 엔지니어는 시니어에게 말했고, 시니어는 매니저에게 말했으며, 매니저는 그 정보가 굳이 위로 올릴 만큼 중요하지 않다고 판단했다. 결국 임원들은 가장 마지막에 알게 되었다.


계층 구조는 나쁜 소식을 걸러낸다

조직은 복잡성을 관리하기 위해 계층 구조를 만든다. 하지만 의도치 않은 결과로, 정보는 각 계층을 지날 때마다 필터링된다. 주니어 엔지니어가 시니어 엔지니어에게 기술적 결정이 문제 있어 보인다고 말한다. 시니어 엔지니어는 이를 엔지니어링 매니저에게 전달한다. 매니저는 이것이 자신을 나쁘게 보이게 하는지, 혹은 굳이 위로 보고할 가치가 있는지 판단한다. VP of Engineering은 축약된 버전을 듣거나, 아예 아무것도 듣지 못한다. CTO는 “우리가 처리 중입니다”라는 말을 듣고, CEO는 “모든 것이 계획대로 진행 중입니다”라는 말을 듣는다.

각 계층을 거칠수록 세부 사항과 긴급성은 제거된다. 결국 임원 레벨에 도달했을 때는 이미 위기 상황이거나, 아니면 완전히 사라진 정보가 된다. 이러한 필터링은 악의에서 비롯된 것이 아니다. 중간 관리자는 “자기 레벨에서 문제를 처리하는 것”이 자신의 역할이라고 믿는다. 그들은 에스컬레이션을 실패로 인식한다. 그래서 문제를 보고하기보다 해결책만 제시한다. 이것은 겉으로 보기에는 전문성처럼 보이지만, 실제로는 정보 억압으로 기능한다.

120명의 엔지니어가 있는 한 소프트웨어 회사 사례는 이를 잘 보여준다. 프론트엔드 팀은 3월에 새로운 대시보드의 성능 문제를 발견했다. 4월에는 코드 리뷰에서 이 문제가 공개적으로 논의되었다. 5월에는 엔지니어링 매니저가 이를 인지하고 해결책을 검토하기 시작했다. 6월에는 VP of Engineering이 “대시보드 성능 최적화를 진행 중”이라는 형태로 이 소식을 들었다. 7월에는 CTO가 “일부 성능 관련 작업이 진행 중”이라는 사실을 알게 되었다. 8월이 되자, 회사의 최대 고객이 대시보드를 사용할 수 없다고 항의했다. 임원진은 이를 갑작스러운 위기로 받아들였고, 긴급 대응이 필요하다고 판단했다. 그러나 엔지니어들은 이미 5개월 전부터 이 문제를 알고 있었다.

그 결과, 자원 배분 결정을 내리는 사람들은 항상 수개월 뒤처진 정보, 그리고 체계적으로 나쁜 소식이 제거된 정보를 기반으로 의사결정을 하게 된다. 엔지니어들은 8월에 데이터베이스가 확장되지 않을 것임을 알고 있고, 매니저들은 10월에 엔지니어들이 좌절하고 있다는 사실을 알고 있으며, VP들은 12월에 사기 문제를 인지한다. CTO는 2월이 되어서야 엔지니어들이 퇴사하고 있다는 사실을 알게 된다. 각 그룹은 모두 자신들이 문제를 적절히 처리하고 있다고 생각한다. 그러나 아무도, 그들이 문제를 해결 불가능하게 만드는 정보 지연을 만들고 있다는 사실을 깨닫지 못한다.


지휘 체계라는 편리한 허구

많은 조직은 임원이 여러 단계를 건너뛰어 직접 엔지니어와 대화하는 것을 부적절하다고 여긴다. 그 이유는 늘 비슷하다. 중간 관리자의 권위를 약화시킨다, 지휘 체계를 무너뜨린다, 불신을 만든다, 마이크로매니지먼트다. 이런 우려는 조직의 건강을 위한다는 명분으로 제시된다. 그러나 실제로는 중간 관리자를 책임으로부터 보호하는 조직의 항체 반응에 가깝다.

주니어 엔지니어와 직접 대화하는 CTO는 실제로 무슨 일이 벌어지고 있는지 듣게 된다. 필터링된 보고에 의존하는 CTO는 관리자가 듣고 싶어 하는 이야기만 듣게 된다. 스킵 레벨 대화에 대한 금기는 후자의 상황을 보장한다. 중간 관리자는 정보 흐름을 통제할 수 있기 때문에 이런 구조를 선호한다. 그들은 자신이 해결한 문제는 보고하고, 자신을 나쁘게 보이게 하는 문제는 억제할 수 있다. 조직은 이 선택의 대가로, 작은 문제를 위기로 키우는 정보 지연을 치르게 된다.

중간 관리자는 정보 흐름을 통제할 수 있기 때문에 이러한 구조를 선호한다. 그들은 자신이 해결한 문제는 보여주고, 자신을 나쁘게 보이게 만드는 문제는 숨길 수 있다. 조직은 이 선택의 대가로, 정보 지연이라는 비용을 치르게 되고, 그 결과 작은 문제가 위기로 커진다.

스킵 레벨 대화에 반대하는 경제적 논리는 임원의 시간은 비싸기 때문에 전술적 세부 사항이 아니라 전략적 문제에 집중해야 한다는 것이다. 그러나 이 논리는 전략적 의사결정이 체계적으로 잘못된 정보에 기반하고 있을 때는 성립하지 않는다. 매주 몇 시간이라도 모든 레벨의 엔지니어와 대화하는 CTO는 실제로 무엇이 망가져 있는지, 무엇이 생산성을 가로막고 있는지, 어떤 엔지니어가 이미 마음속으로 회사를 떠났는지를 알게 된다. 이 정보는 직접적인 전략적 가치를 가진다. 자원을 어디에 배분해야 하는지, 어떤 매니저가 효과적인지, 어떤 기술적 선택이 실패하고 있는지를 드러내기 때문이다. 세네 단계의 필터를 거친 보고서에 의존하는 대안은 시간당 비용은 싸 보이지만, 잘못된 의사결정 하나당 비용은 훨씬 비싸다.

필요한 시간 투자는 크지 않다. 매주 몇 시간을 할애해 레벨을 넘나드는 직접 대화를 꾸준히 유지하는 것만으로도 현실에 대한 기준점을 얻을 수 있다. 조직이 커질수록 개인별 대화 빈도는 줄어들지만, 전체 커버리지는 유지된다. CTO는 매달 한 번이 아니라 분기마다 한 번씩 각 엔지니어와 대화할 수도 있다. 이렇게 하면 임원의 일정 부담 없이도 현실과의 연결을 유지할 수 있다. 이 대화를 통해 엔지니어들은 자신의 매니저에게는 절대 말하지 않을 이야기들을 털어놓는다. 정식 채널을 통해서는 3~6개월 뒤에나 알게 될 문제를 훨씬 일찍 듣게 된다. 조기 경보는 개입 비용을 크게 낮춘다.

한 결제 회사는 분기 안에 시니어 엔지니어 세 명을 잃은 뒤 이 사실을 깨달았다. 새로 합류한 CTO는 매주 오피스 아워를 열었고, 어떤 엔지니어든 30분을 예약할 수 있도록 했다. 안건도 필요 없었고, 매니저의 승인도 필요 없었다. 첫 달에 드러난 사실은 다음과 같았다. 배포 시스템이 너무 불안정해서 엔지니어들이 주말 호출을 두려워하며 금요일 배포를 피하고 있었다. 모니터링 시스템은 오탐 경보를 너무 많이 발생시켜, 엔지니어들이 경보 자체를 무시하게 된 상태였다. API 문서는 너무 오래되어 신규 엔지니어들이 문서 대신 시행착오로 시스템을 배우고 있었다. 이 중 어떤 것도 정식 채널을 통해 임원 레벨까지 전달된 적은 없었다. 각 매니저는 자신이 처리하고 있다고 생각했기 때문이다. CTO는 해당 분기 내에 이 세 가지 문제를 모두 해결할 수 있도록 예산을 배정했다. 6개월 후, 자발적 이직률은 거의 0에 가까워졌다.


연봉이 아니라 자율성

엔지니어들은 퇴사 인터뷰에서 실제 이유를 체계적으로 잘못 말한다. 보상은 측정 가능하고 사회적으로 무난한 이유이기 때문에 언급된다. 실제 이유는 설명하기 어렵고, 때로는 불편하다. 그러나 반복적으로 나타나는 패턴은 세 가지다.

자율성의 상실

엔지니어들은 실패할 것을 알고 있는 시스템을 만들라는 지시를 받는다. 기술적 판단은 반복적으로 비기술적 이유로 뒤집힌다. 그들은 문제가 생길 것임을 예측하고, 우려를 제기하지만, 결국 “그냥 구현하라”는 지시를 받는다. 예측한 실패가 실제로 발생하면, 그들은 막지 못한 책임을 떠안는다. 이는 자존심이나 통제 욕구의 문제가 아니다. 전문가로서 판단을 요청받고도, 그 판단이 무시되는 상황에 대한 문제다.

한 핀테크 회사는 기존 솔루션을 사용하지 않고 자체 인증 시스템을 구축하기로 결정했다. 시니어 엔지니어들은 차별화 요소가 아닌 기능에 불필요한 위험을 떠안는 결정이라고 주장했다. 프로덕트 매니지먼트는 특정 사용자 흐름을 지원하기 위해 커스텀 구현이 필요하다고 주장했다. 엔지니어링 리더십은 시니어들의 의견에 동의했지만 반대하지 않았다. 커스텀 인증 시스템은 출시 첫 달에 세 가지 보안 취약점을 드러냈고, 긴급 패치가 필요했으며, 원래 수익 창출 기능에 쓰였어야 할 6개월의 엔지니어링 시간을 소모했다. 이 결정에 반대했던 시니어 엔지니어는 결정이 확정된 그 주에 이직 면접을 시작했다. 그는 실패를 기다리지 않았다. 이미 어떤 일이 벌어질지 알고 있었기 때문이다.

경제적 비용은 낭비된 구현 시간, 지속적인 유지보수 부담, 그리고 엔지니어의 이탈로 이어진다. 회사는 연 1만 2천 달러에 구매할 수 있었던 기능을 만들기 위해 18만 달러를 사용했다. 회사를 떠난 엔지니어는 제품 로드맵상 연간 반복 매출 40만 달러를 창출할 수 있는 기능을 만들 인재였다. 그의 판단을 무시한 결정은 첫해에만 약 58만 달러의 비용을 발생시켰다. 엔지니어 교체 비용은 포함되지 않은 수치다.


감당 불가능해지는 기술 부채

팀은 중요한 인프라 작업의 필요성을 인지한다. 데이터베이스 복제, 배포 자동화, 모니터링 개선 같은 작업이다. 그러나 이런 작업은 분기마다 기능 개발 뒤로 밀린다. 엔지니어들은 시스템이 부하를 견디지 못하는 모습을 지켜보며, 언제 어떻게 망가질지 정확히 알고 있다. 실제로 장애가 발생하면, 왜 미리 막지 않았느냐는 질문을 받는다. 그들은 세 번째로 인프라 작업이 밀린 시점 이후로는 더 이상 주장하지 않는다. 그리고 예측한 위기가 오기 전에 회사를 떠난다. 자신이 막으려 했지만 막지 못하게 된 실패의 책임을 지고 싶지 않기 때문이다.

한 이커머스 회사는 데이터베이스 인프라 작업을 18개월 동안 미뤘다. 엔지니어들은 읽기 전용 복제본을 추가하고 쿼리 성능을 개선하기 위한 예산을 요청했다. 매 분기마다 기능 개발이 우선되었다. 트래픽은 연간 40%씩 증가했지만, 인프라는 그대로였다. 19개월째에 데이터베이스는 전체 플랫폼의 병목이 되었다. 피크 시간대 응답 시간은 200밀리초에서 4초로 늘어났다. 전환율 하락으로 매출이 감소했다. 회사는 긴급 인프라 업그레이드에 24만 달러를 썼고, 성능 저하 기간 동안 약 120만 달러의 매출 손실을 입었다. 인프라 작업을 요청했던 세 명의 시니어 엔지니어 중 두 명은 이미 회사를 떠난 뒤였다. 그들은 장애 발생 시점을 정확히 예측했고, 그 자리에 남아 있기를 원하지 않았다.


똑똑한 사람들이 어리석은 일을 하도록 강요받는다

연봉 18만 달러를 받는 시니어 엔지니어가 폐기되어야 할 시스템을 유지보수한다. 의미 없는 작업이 중요한 문제보다 우선된다. 누구도 믿지 않는 숫자를 만드는 추정 회의, 아무것도 바꾸지 않는 아키텍처 리뷰, 아무도 읽지 않는 문서 작성 같은 프로세스 연극이 시간을 소모한다. 이는 고급 인재에게 절반의 비용으로도 가능한 일을 시키는 경제적 낭비이며, 동시에 그 인재를 소진시키는 행위다. 결국 그들은 자신의 역량을 활용할 수 있는 곳을 찾아 떠난다.

한 SaaS 회사에는 6년 전에 구축된 리포팅 시스템이 있었다. 이 시스템은 연간 8만 달러의 매출을 발생시키는 12명의 고객만을 지원하고 있었다. 기술 부채로 인해 지속적인 유지보수가 필요했다. 연봉 19만 달러를 받는 시니어 엔지니어 한 명이 전체 시간의 약 60%를 이 시스템에 쓰고 있었다. 회사는 연간 8만 달러의 매출을 유지하기 위해 11만 4천 달러를 쓰고 있었던 셈이다. 그녀가 이 시스템을 폐기하고 12명의 고객을 신규 플랫폼으로 이전하자고 제안했을 때, 회사는 이 고객들이 “전략적 관계”이기 때문에 계속 지원해야 한다고 답했다. 그녀는 3개월 후 회사를 떠났다. 후임자를 채용하고 온보딩하는 데 22만 달러가 들었다. 회사는 약 4만 달러만 들이면 12명의 고객을 모두 이전시키고, 그녀를 핵심 제품 개발에 투입할 수 있었다.

임원들이 놓치는 초기 신호들

퇴사하기 수개월 전부터 경고 신호는 이미 존재하지만, 조직 내 서로 다른 레벨에서 서로 다른 시점에 나타난다. 임원들이 보게 되는 것은 보통 개입이 더 이상 불가능한 마지막 단계뿐이다.

주니어 및 미드 레벨 엔지니어가 가장 먼저 보는 것

(시니어 엔지니어가 떠나기 6~12개월 전)

시니어 엔지니어들은 기술적 결정에 더 이상 맞서지 않는다. 아키텍처 리뷰는 형식적인 절차가 된다. “그거 예전에 제안했는데, 리더십에서 안 된다고 했어요”라는 말이 흔해진다. 기술 부채 백로그는 커지지만, 이를 해결하기 위한 자원 배정은 없다.

주니어 엔지니어들은 이를 가장 먼저 알아차린다. 실제로 결정을 구현하는 사람들은 주니어들이기 때문이다. 그들은 시니어들이 더 이상 싸우지 않고 조용히 물러나는 모습을 본다.

한 물류 회사의 주니어 엔지니어는 6개월에 걸쳐 이런 변화를 관찰했다. 이전에는 코드 리뷰마다 상세한 피드백을 남기던 시니어 아키텍트가 어느 순간부터 모든 변경 사항을 “LGTM(문제없어 보입니다)”이라는 한 줄로 승인하기 시작했다. 아키텍처 논의에서도 대안을 제시하지 않고, 프로덕트가 원하는 방향에 그냥 동의했다. 주니어가 개인적으로 이유를 묻자, 그 시니어는 이렇게 말했다. “내 의견이 결과를 바꾸지 않는다는 걸 배웠어. 그래서 시간 낭비를 하지 않기로 했지.” 그 주니어는 그 시니어가 아직 면접을 시작하기도 전에, 이미 떠날 것임을 알아차렸다. 3개월 후, 사직서가 제출되었다. 매니지먼트는 완전히 놀랐다.


시니어 엔지니어가 겪는 것

(퇴사 4~8개월 전)

패턴 인식이 시작된다. “이건 실패할 것이다. 그리고 리더십은 듣지 않을 것이다.” 도덕적 상처가 생긴다. 잘못된 것을 알고 있으면서도 만들도록 강요받는다. 신뢰를 잃는다. “여기서는 내 전문성이 중요하지 않다.”

그들은 회의에서 더 이상 논쟁하지 않고, 기술적 결정에 형식적으로 동의하며, 코드 리뷰 코멘트는 상세한 설명에서 최소한의 형식적인 문장으로 바뀐다. 임원 입장에서는 이것이 성숙해 보인다. 덜 싸우고, 더 정렬된 것처럼 보이기 때문이다. 그러나 이것은 성숙이 아니라 체념이다.

이러한 행동 변화는 함께 일하는 사람들에게는 명확하게 보이지만, 마찰을 줄이기 때문에 문제로 인식되지 않는 경우가 많다. 이전에는 비현실적인 일정에 반대하고 기술적 접근을 질문하던 시니어 엔지니어가 갑자기 순응적으로 변한다. 프로덕트 매니저는 만족하고, 엔지니어링 매니저는 그가 팀 플레이어가 되었다고 해석한다. 실제로는 그 엔지니어가 이미 마음속으로 회사를 떠났고, 면접을 위해 에너지를 아끼고 있는 상태다. 그는 더 이상 논쟁이 의미 없다고 판단하고, 출구를 찾는 동안 지시만 수행한다.


매니저가 보는 것

(퇴사 2~4개월 전)

1:1 미팅에서의 변화다. 팀 논의에서 참여도가 낮아진다. 엔지니어는 링크드인 프로필을 업데이트하고, 업계 행사에 더 자주 참석하며, 이전보다 훨씬 꼼꼼하게 문서를 작성하고, 자신의 시스템을 주니어들에게 적극적으로 인수인계하기 시작한다.

매니저는 이를 에스컬레이션하지 않는 경우가 많다. 높은 이직률은 자신의 관리 역량이 부족하다는 신호로 보이기 때문이다. 그들은 조용히 해결되기를 바란다. 그러나 이 시점에는 이미 해당 엔지니어가 오퍼를 받은 상태인 경우가 많다.

한 미디어 회사의 엔지니어링 매니저는 시니어 엔지니어 한 명이 모든 것을 문서화하기 시작한 것을 발견했다. 아키텍처 결정, 배포 절차, 시스템의 특이점까지 모두 정리하고 있었다. 매니저는 이를 긍정적인 변화로 보았다. 마침내 부족했던 암묵지가 문서화되고 있다고 생각했기 때문이다. 그가 놓친 것은 동기였다. 엔지니어들은 보통 회사를 떠날 때, 자신이 남길 지식 공백에 대한 죄책감 때문에 문서를 남긴다. 그 문서화는 이미 시작된 심리적 이탈 과정의 일부다. 매니저는 퇴사 인터뷰에서야 이 사실을 깨달았다.


임원이 보는 것

(퇴사 0~1개월 전)

“시니어 엔지니어가 퇴사 통보를 했습니다.”

완전한 충격이다. 그러나 그 정보는 처음부터 존재했다. 단지 조직의 정보 아키텍처가 나쁜 소식을 임원에게 도달하지 못하게 막고 있었을 뿐이다.


한 명의 퇴사가 다섯 명이 되는 이유

한 명의 퇴사는 데이터 포인트다. 세 명이 떠나면, 남아 있는 엔지니어들이 인식하는 패턴이 된다. 존경받는 동료가 떠난다면, “나도 알아봐야 하나?”라는 생각이 든다. 엔지니어들은 떠나는 동료가 자신들이 모르는 무언가를 알고 있다고 가정한다. 이 가정은 대개 맞다. 떠나는 엔지니어는 상황이 고쳐질 수 없다고 결론 내렸고, 이미 대안을 탐색했다.

외부 리크루터들도 이 패턴을 감지한다. 팀에서 링크드인 활동이 늘어나고, 같은 회사 출신 엔지니어들이 검색 결과에 반복적으로 등장한다. 리크루터의 접촉이 증가한다. 유지 문제는 곧 채용 문제가 된다. 이전에는 이직을 고려하지 않던 엔지니어들조차 전화를 받기 시작한다. 그중 일부는 매력적인 기회를 발견한다. 퇴사의 속도는 가속화된다.

한 클라우드 인프라 회사는 3주 안에 시니어 엔지니어 두 명을 잃었다. 이후 3개월 동안 다섯 명이 추가로 떠났다. 사후 분석 결과, 첫 두 번의 퇴사가 광범위한 의문을 촉발했다. 엔지니어들은 이렇게 물었다. “저 사람들이 왜 떠났지? 우리가 모르는 회사 재무 상태 문제가 있는 건 아닐까?” 실제 이유는 앞서 설명한 것과 같았다. 자율성의 상실과 기술 부채였다. 그러나 그들의 퇴사는 정보 불확실성을 만들었고, 리크루터들은 이를 적극적으로 활용했다. 이 연쇄 반응으로 발생한 교체 비용은 약 220만 달러였고, 세 개의 주요 제품 이니셔티브가 총 8개월 지연되었다.


지식 유출은 측정하기 어렵지만 매우 비싸다

지식 유출의 비용은 정량화하기 어렵지만, 이후 분기 동안 반복되는 실수의 형태로 나타난다. 떠난 시니어 엔지니어는 어떤 코드 세 줄이 치명적으로 중요한지, 어떤 3천 줄은 지워도 되는지를 알고 있었다. 어떤 고객이 왜 특별한 요구 사항을 갖는지, 어떤 시스템이 “못생겼지만 안정적인지”, 아니면 “겉보기에는 괜찮지만 실제로는 망가져 있는지”를 알고 있었다. 이 지식은 함께 떠난다.

그 결과, 비싼 실수를 통해 그 지식이 다시 발견된다. 건드리지 말았어야 할 코드가 삭제되고, 고객 워크플로가 깨지며, 단순한 기술 부채로 여겼던 부분이 사실은 시스템을 지탱하는 구조였음이 드러난다.

한 결제 회사는 정산 시스템을 구축했던 시니어 엔지니어를 잃은 지 6개월 후 이 사실을 깨달았다. 그 엔지니어는 특정 결제 대행사의 API 특성 때문에 일부 트랜잭션 유형이 특별한 처리를 필요로 한다는 사실을 문서화하지 않았다. 이 특성은 공식 문서에도 없었고, 그는 3년 전 시행착오를 통해 알아낸 것이었다. 신규 엔지니어가 정산 로직을 수정한 뒤, 해당 결제사의 트랜잭션이 실패하기 시작했다. 회사는 문제를 해결하는 데 2주를 썼고, 결제 대행사와의 지원 티켓을 통해서야 그 특이점을 발견했다. 이 2주는 약 4만 5천 달러의 엔지니어링 비용이 들었고, 수동 정산이 필요한 실패 트랜잭션으로 인해 약 18만 달러의 손실이 발생했다.

가끔은 정말로 돈 문제이기도 하다

보상은 일부 퇴사에서 실제 요인이 되기도 한다. 이를 구분하는 신호는 타이밍이다. 엔지니어가 구직 활동을 시작하기 직전에 보상 문제를 직접 제기하고, 실제로 그 보상이 역할과 범위에 비해 시장보다 낮다면, 그것은 보상 문제다. 반대로 퇴사 논의 과정에서만 보상을 언급한다면, 대부분은 그렇지 않다. 그들은 이미 다른 이유로 떠나기로 결정했고, 그 결정에 정당성을 부여해 줄 제안을 찾았을 뿐이다.

정당한 보상 문제에는 공통적인 패턴이 있다. 해당 엔지니어는 자신의 실제 역할과 책임 범위에 비해 시장 대비 현저히 낮은 보상을 받고 있다. 자신보다 경력이 적은 엔지니어가 같은 급여로 채용되는 것을 지켜보고 있다. 책임이 확장되었음에도 보상이 조정되지 않았다. 무엇보다 중요한 점은, 그들이 구직 활동을 시작하기 전에 이 문제를 직접 제기한다는 것이다. “제가 시장 대비 저평가되어 있다고 생각합니다. 이 부분에 대해 논의할 수 있을까요?” 이것은 보상으로 해결 가능한 문제다.

보상을 핑계로 삼는 경우는 다르다. 엔지니어는 이미 몇 달 동안 면접을 보고 있었고, 30% 높은 연봉의 오퍼를 받았으며, 퇴사 논의에서 시장 보상을 언급한다. 회사가 맞춰주겠다고 제안하면, 그는 확답을 피한다. “생각해 보겠습니다만, 이미 다른 제안을 수락했습니다.” 이 경우 보상은 동기가 아니었다. 정당화 수단이었다. 엔지니어는 앞서 설명한 이유들로 이미 떠나기로 결심했지만, “돈 때문에 떠난다”는 설명이 가장 무난했을 뿐이다.

판별 방법은 간단하다. 20% 인상이 그들을 붙잡을 수 있는가? 그렇다면 보상 문제다. 그렇지 않다면 다른 문제이며, 그들은 외교적으로 표현하고 있는 것이다. 자율성 상실, 감당 불가능한 기술 부채, 의미 없는 업무로 인해 떠나는 대부분의 엔지니어는 돈만으로 붙잡을 수 없다. 그들은 이미 업무 환경이 망가졌다고 결론 내렸다. 보상은 “내 판단이 무시되고, 실패할 것을 아는 것을 만드는 데 지쳤다”는 말을 대신하는 사회적으로 수용 가능한 설명이 된다.

한 개발자 도구 회사는 퇴사 엔지니어들과의 심층 퇴사 인터뷰를 통해 이 차이를 배웠다. 보상을 이유로 든 여덟 명 중, 회사가 가장 붙잡고 싶었던 다섯 명에게 카운터 오퍼를 제시했다. 세 명은 새로운 역할보다 같거나 더 높은 조건을 제시받았음에도 이를 거절했다. 이후의 대화에서 드러난 사실은 보상이 진짜 문제는 아니었다는 점이다. 그들은 제품 로드맵이 계속 바뀌어 자신들의 일이 무의미해졌다고 느꼈기 때문에 떠난 것이었다. 퇴사 인터뷰에서는 그 이유를 설명하는 것보다 보상을 언급하는 편이 더 쉬웠다.


유지 보너스보다 예방이 낫다

초기 개입을 위해서는 임원들이 문제가 정신적 퇴사(mental resignation) 단계로 진행되기 전에 이를 인지해야 한다. 이를 위해서는 위계 구조의 필터를 우회하는 정보 채널을 만들어야 한다. 효과적인 방법은 몇 가지가 있다.

정기적인 스킵 레벨 대화

모든 레벨을 가로지르는 직접 대화를 위해 매주 몇 시간을 할애하는 것만으로도 현실에 대한 기준점을 얻을 수 있다. 시간 자체보다 일관성이 중요하다. 조직이 커질수록 개인별 대화 빈도는 줄어들지만, 전체 커버리지는 유지해야 한다. 이 대화를 통해 엔지니어들은 자신의 매니저에게는 절대 말하지 않을 것들을 이야기한다. 실제로 생산성을 막고 있는 것이 무엇인지, 어떤 기술적 결정이 문제를 만들고 있는지, 어디에서 사기가 떨어지고 있는지를 듣게 된다.

내가 자문했던 한 CTO는 엔지니어 100명 규모의 조직에서 매주 4시간을 스킵 레벨 대화에 할애했다. 2주 로테이션, 30분 단위 미팅으로 한 달에 약 30명의 엔지니어를 만났고, 7개월에 걸쳐 조직 전체를 커버했다. 엔지니어들은 이 시간이 열려 있다는 것을 알고 있었고, 필요할 때 직접 예약할 수 있었다. 이는 양방향 정보 흐름을 만들었다. CTO는 현실을 들었고, 엔지니어는 자신이 들리고 있다고 느꼈다. 유지율은 눈에 띄게 개선되었다. 자발적 이직률은 연 18%에서 7%로 감소했다. CTO는 이 변화를 조기 문제 인지 덕분이라고 설명했다. “이제는 문제가 작고 고칠 수 있을 때 듣습니다. 예전에는 사직서를 받을 때 들었죠.”


외부 진단 관점

엔지니어들은 자신의 커리어에 영향력을 행사하지 않는 사람에게 더 솔직해진다. 프랙셔널 CTO나 외부 어드바이저가 레벨을 가로질러 인터뷰를 진행하면, 사람들이 실제로 생각하는 바를 듣게 된다. 이는 내부 임원이 같은 질문을 못 해서가 아니다. 임시적이고, 위협적이지 않으며, 경영진의 평판을 보호할 이해관계가 없는 사람에게 주는 답변은 다르기 때문이다.

한 SaaS 회사는 6개월 동안 시니어 엔지니어 네 명을 잃은 뒤 프랙셔널 CTO를 영입했다. 프랙셔널 CTO는 2주 동안 전 레벨의 엔지니어를 인터뷰했다. 결론은 이랬다. 엔지니어들은 아키텍처 리뷰 프로세스를 연극으로 느끼고 있었다. 여러 이해관계자의 피드백을 반영해 제안이 승인된 후에도, 몇 주 뒤 프로덕트 결정으로 뒤집혔다. 엔지니어들은 이 프로세스가 의사결정을 위한 것이 아니라 책임을 분산하기 위한 것이라고 결론 내렸다. 그들은 아무것도 바꾸지 않는 리뷰를 위해 수 시간을 썼다. 회사는 아키텍처 리뷰 프로세스를 없애고, 기술 구현에 대해 엔지니어링에 거부권을 부여했다. 이 조치의 가치는 공식적으로 인정된 문제와 실제 문제를 구분해냈다는 점에 있었다.


최소한 한 가지는 실제로 바꿔라

문제를 듣는 것만으로는 충분하지 않다. 엔지니어들은 문제 제기가 결과로 이어진다는 것을 봐야 한다. 배포 시스템이 취약하다는 이야기를 들었고, 그 배포 시스템이 분기 내에 개선된다면, 엔지니어는 자신의 의견이 중요하다는 것을 학습한다. 같은 문제를 반복해서 제기했는데 아무것도 바뀌지 않는다면, 정반대의 학습이 일어난다.

한 헬스케어 기술 회사의 개발자는 스킵 레벨 대화에서 테스트 스위트가 실행되는 데 45분이 걸려 개발 속도를 심각하게 떨어뜨린다고 CTO에게 말했다. CTO는 왜 이 문제가 해결되지 않았는지 물었고, 개발자는 여러 차례 제기되었지만 항상 우선순위에서 밀렸다고 답했다. CTO는 그 주에 바로 예산을 배정해 해당 개발자가 2주 동안 테스트 스위트를 최적화하도록 했다. 실행 시간은 8분으로 줄어들었다. 그 개발자는 이 경험을 동료 세 명에게 이야기했고, 그 동료들은 다른 문제를 제기하기 위해 스킵 레벨 미팅을 예약했다. 투자 비용은 엔지니어링 시간으로 1만 2천 달러였다. 전달된 메시지는 분명했다. “당신의 의견은 행동으로 이어진다.” 이 신호의 가치는 1만 2천 달러보다 훨씬 크다.


140만 달러의 오진

유지 전략을 잘못 세웠을 때의 비용은 측정 가능하다. 시니어 엔지니어 한 명을 대체하는 데 드는 직접 비용은 20만~28만 달러다. 여기에는 보통 연봉의 20~25%에 해당하는 채용 수수료, 사이닝 보너스, 이전 비용이 포함된다. 공석 기간 동안의 생산성 손실은 4만~7만 5천 달러로, 연 15만 달러의 생산성 기준에서 3~6개월 채용 기간을 가정한 수치다. 온보딩 과정에서의 생산성 저하는 3만 5천~4만 달러로, 신규 입사자가 6개월 동안 50% 효율로 일한다고 가정한다. 지식 손실은 정량화하기 어렵지만, 이후 분기 동안의 실수, 느린 의사결정, 중복 작업의 형태로 나타난다. 보수적으로 잡아도 시니어 엔지니어 한 명당 총비용은 27만 5천~39만 5천 달러다. 다섯 명이면 140만~200만 달러다.

유지를 제대로 했을 때의 비용은 더 작지만, 조직 변화를 요구한다. 실제 문제를 해결하려면 로드맵 우선순위를 바꾸고, 프로세스를 제거하거나, 아키텍처 결정에 대해 엔지니어에게 거부권을 줘야 한다. 이는 기능 개발을 미루는 기회비용과 중간 관리자를 거슬러야 하는 정치적 비용을 수반한다. 그러나 이러한 비용은 교체 비용보다 훨씬 작다.

장벽은 비용이 아니다. 무언가가 망가져 있고, 그 원인에 관리가 일부 기여했음을 인정하는 것이다. 조직은 내부 변화를 요구하지 않는 설명을 선호한다. “엔지니어는 비싸고 경쟁이 치열하다”는 설명은 “우리의 의사결정 구조가 기술적 전문성을 체계적으로 무시하고, 정보 구조가 문제를 위기로 키운다”는 설명보다 훨씬 편하다.

한 시리즈 B 회사는 18개월 동안 엔지니어 7명을 잃었다. CEO는 이를 시장 문제로 봤다. 경쟁사가 더 많은 연봉을 주고 있었고, 맞추기 어려웠다는 것이다. 그러나 사후 분석 결과는 달랐다. 일곱 명 중 다섯 명은 떠나기 전 6개월 동안 기술적 결정, 프로세스 부담, 프로젝트 우선순위에 대한 구체적인 문제를 제기했다. 그 어떤 것도 임원 레벨에 전달되지 않았다. 매니저와의 1:1에서 “모니터링 중”으로 기록되었을 뿐, 에스컬레이션되지 않았다. 임원은 보상이 문제라고 믿었고, 엔지니어는 자신의 의견이 중요하지 않다고 결론 내렸다. 양쪽 모두 체계적으로 잘못된 정보를 기반으로 행동하고 있었다.


정보는 교체보다 싸다

회사를 떠나는 엔지니어들은 임원들이 모르는 무언가를 알고 있다. 어떤 기술적 결정이 실패하고 있는지, 어떤 프로세스가 시간을 낭비하는지, 어떤 관리 방식이 몰입을 무너뜨리는지를 알고 있다. 이 정보는 조직 내부에 존재하지만, 계층 구조가 이를 필터링하고, 중간 관리자는 나쁜 소식을 억제할 유인을 갖고 있기 때문에 정상적인 경로로는 임원에게 도달하지 않는다.

문제는 임원들이 그 엔지니어들이 떠나기 전에 무엇이 망가졌는지를 배울 것인지, 아니면 그 엔지니어들이 있었더라면 막을 수 있었던 문제를 통해 배울 것인지다. 이 문제를 제대로 해결하는 조직은 정보 흐름을 전략적 우선순위로 취급한다. 필터를 우회하는 스킵 레벨 채널을 만들고, 현실을 직접 듣는 데 쓰는 임원의 시간이, 왜곡된 정보를 기반으로 전략을 세우는 것보다 ROI가 높다는 사실을 이해한다. 유지가 교체보다 싸다는 것도 이해한다. 단, 문제를 고칠 수 있을 만큼 충분히 일찍 보일 때만 그렇다.

반대로 이 문제를 잘못 다루는 조직은 정보의 정확성보다 관리자의 편안함을 최적화한다. 스킵 레벨을 부적절하다고 여기고, 나쁜 소식이 제거된 보고서에 의존하며, 사직서가 도착했을 때 유지 문제를 알게 된다. 그들은 수천 달러로 막을 수 있었던 이탈을 수백만 달러를 들여 대체하고, 왜 최고의 인재들이 계속 떠나는지 끝내 이해하지 못한다.

계산은 단순하다. 매주 몇 시간을 엔지니어와 직접 대화하는 데 쓰는 비용은 연간 약 5만 달러 수준이다. 이로 시니어 엔지니어 한 명의 퇴사를 막을 수 있다면, 투자 대비 다섯 배 이상의 수익이다. 실제로는 여러 명의 이탈을 막고, 조직 전반의 자원 배분을 개선하는 정보까지 제공한다. 그 대안은 시간당 비용은 싸지만, 결과는 치명적으로 비싸다.

2018년에 회사를 떠났던 그 시니어 엔지니어는 지금도 업계에 있다. 그는 현재 CTO가 정기적으로 스킵 레벨 대화를 진행하고, 기술 아키텍처에 대해 엔지니어링 조직이 거부권을 갖는 회사에서 일하고 있다. 그는 더 이상 면접을 보고 있지 않다. 그의 동료들도 마찬가지다. 그 회사의 자발적 이직률은 12%로, 같은 단계 회사들의 업계 평균의 절반 이하 수준이다. 그 회사의 임원들은 문제가 되돌릴 수 없게 되기 전에 무엇이 망가졌는지를 알고 있다. 그들은 단순한 메커니즘을 통해 이를 가능하게 했다. 묻고, 사람들이 말할 수 있도록 조직 구조를 만들었기 때문이다.

1. IT 기술·조직 관점 번역

2018년의 한 사례

2018년, 연 매출(ARR) 4,000만 달러 규모의 SaaS 회사에서 한 시니어 엔지니어는 제안된 데이터베이스 아키텍처가 확장성 문제를 일으킬 것이라며 6개월 동안 반대했다. 프로덕트 조직은 “빠르게 출시하는 것”을 원했다. 엔지니어링 리더십은 그의 기술적 판단에 동의했지만, 프로덕트 조직에 맞서지는 않았다. 결론은 늘 흔한 결정이었다.

“지금은 출시하고, 나중에 리팩터링하자.”

그 엔지니어는 그 주에 바로 이직 면접을 시작했다. 이유는 기술적 결정 때문이 아니었다. 그런 결정은 늘 있기 때문이다. 문제는 그의 판단이 중요하지 않았다는 사실이었다.

8개월 후 시스템은 매일 성능 이슈를 겪기 시작했다. 18개월 후 회사는 시니어 엔지니어 5명을 잃었고, 문제 원인을 파악하기 위해 프랙셔널 CTO(외부 CTO)를 고용했다.


진단 결과

진단은 단순했다.

“임원진은 엔지니어들이 불만을 가지고 있다는 사실을 퇴사하기 전까지 전혀 알지 못했다.”

퇴사 인터뷰에는 늘 그렇듯 “더 나은 기회”, “경쟁력 있는 보상” 이라는 말이 적혀 있었다. CEO는 남아 있는 엔지니어들에게 15% 연봉 인상을 승인했다. 그러나 그 후에도 엔지니어들은 계속 떠났다.

문제는 보상이 아니었다. 정보가 조직의 위계 구조를 따라 위로 전달되지 않았다는 것이 진짜 문제였다. 문제가 임원 레벨에 도달했을 때는 이미 수개월 전에 퇴사 결심이 끝난 상태였다.


계층 구조는 나쁜 소식을 걸러낸다

조직은 복잡성을 관리하기 위해 계층을 만든다. 하지만 그 부작용은 정보가 각 단계에서 필터링된다는 것이다.

  • 주니어 엔지니어: “이 기술적 결정, 위험한 것 같아요”

  • 시니어 엔지니어 → 매니저에게 전달

  • 매니저:

    • 이 문제가 자신을 나쁘게 보이게 하는지,

    • 아니면 굳이 올릴 가치가 있는지 판단

  • VP of Engineering: 축약된 버전만 듣거나 아예 못 들음

  • CTO: “우리가 처리 중입니다”

  • CEO: “모든 게 계획대로입니다”

각 계층을 거칠수록 디테일과 긴급성은 사라진다. 임원에게 도달했을 때는 이미 위기이거나, 완전히 사라진 정보다.

중간관리자는 악의를 가진 것이 아니다. 그들은 “자기 레벨에서 문제를 해결하는 것”이 역할이라고 믿는다. 하지만 그 결과는 정보 억압(information suppression)이다.


실제 예시: 120명 엔지니어 조직

  • 3월: 프론트엔드 팀이 신규 대시보드 성능 문제 인지

  • 4월: 코드 리뷰에서 공개적으로 논의

  • 5월: 엔지니어링 매니저 인지

  • 6월: VP of Engineering → “성능 최적화 작업 중”

  • 7월: CTO → “일부 성능 작업 진행 중”

  • 8월: 최대 고객이 “대시보드를 쓸 수 없다”고 항의

임원진은 이를 갑작스러운 위기로 인식했다. 하지만 엔지니어들은 5개월 전부터 알고 있었다.


결과

리소스를 결정하는 사람들은 항상 몇 달 뒤처진 정보, 그리고 나쁜 소식이 제거된 정보를 기반으로 판단한다.

  • 엔지니어: “이 DB는 8월에 터진다”

  • 매니저: “엔지니어들이 10월부터 불만”

  • VP: “12월쯤 사기(morale) 이슈”

  • CTO: “2월에 엔지니어 퇴사 발생”

모두 각자 문제를 잘 처리하고 있다고 믿었다. 하지만 그들은 문제를 해결 불가능하게 만드는 정보 지연(latency)을 만들고 있었다.


체계적인 명령 체계라는 편리한 허구

많은 조직은 skip-level 대화(임원이 중간 단계를 건너 직접 엔지니어와 대화)를 부적절하다고 여긴다.

이유는 늘 비슷하다.

  • 중간관리자 권한 약화

  • 지휘 체계 붕괴

  • 불신 조성

  • 마이크로매니지먼트

겉으로는 조직 건강을 위한다지만, 실제로는 중간관리자를 보호하는 조직의 면역 반응이다.

CTO가 주니어 엔지니어와 직접 이야기하면 현실을 듣게 된다. 보고서에만 의존하면 관리자가 들려주고 싶은 이야기만 듣게 된다.


엔지니어가 떠나는 진짜 이유: 연봉이 아니다

퇴사 인터뷰는 원인을 잘못 진단한다. 보상은 측정 가능하고 말하기 쉬운 이유일 뿐이다.

반복적으로 등장하는 실제 원인은 세 가지다.

1) 자율성(Agency)의 상실

  • 실패할 걸 아는 시스템을 만들라고 강요받음

  • 기술적 판단이 비기술적 이유로 반복적으로 무시됨

  • 결과가 실패하면 책임은 엔지니어 몫

이는 자존심 문제가 아니다. 전문가로서의 판단이 무의미해졌다는 신호다.

2) 감당 불가능한 기술 부채

  • DB 복제, 배포 자동화, 모니터링 개선 필요

  • 매 분기마다 “기능 개발이 우선”이라며 밀림

  • 결국 예측된 시점에 장애 발생

  • “왜 미리 막지 않았냐”는 질문을 받음

엔지니어는 자신이 예측한 실패의 책임을 지고 싶지 않아서 떠난다.

3) 똑똑한 사람이 멍청한 일을 하게 되는 상황

  • 연봉 1억~2억 엔지니어가 폐기해야 할 시스템 유지

  • 의미 없는 프로세스 쇼(Process Theatre)

  • 누구도 믿지 않는 산출물을 만드는 회의들

이는 경제적 낭비이자 인재 소진이다.


2. IT 조직 관점 핵심 정리

① 문제의 본질

  • 기술 문제가 아니라 정보 구조 문제

  • 계층형 조직은 나쁜 소식을 위로 전달하지 않는다

  • 임원은 “문제가 있다”는 사실을 퇴사 통보로 처음 안다


② 엔지니어 이탈의 조기 신호

단계
시점
신호

주니어

6~12개월 전

시니어가 더 이상 기술적으로 싸우지 않음

시니어

4~8개월 전

회의에서 동의만 함, 코드 리뷰 피상적

매니저

2~4개월 전

문서화 급증, 지식 이전

임원

0~1개월 전

“퇴사합니다”


③ 효과적인 대응 전략

  • 정기적인 skip-level 미팅

  • 외부 시각(프랙셔널 CTO, 어드바이저)

  • 최소 1개의 문제라도 실제로 해결

“문제를 듣는 것”이 아니라 “문제를 말하면 바뀐다”는 신호가 중요


④ 경제적 결론

  • 시니어 엔지니어 1명 교체 비용: 약 3~4억 원

  • CTO가 매주 몇 시간 엔지니어와 직접 대화하는 비용: 연 수천만 원

  • ROI는 비교 불가


3. 한 문장 요약

최고의 엔지니어는 연봉 때문에 떠나는 것이 아니라, 자신의 기술적 판단이 조직에서 의미 없다고 느끼는 순간 떠난다. 그리고 그 신호는 항상 퇴사 훨씬 이전에 조직 내부에 존재한다.

4. Reference

Last updated