"보통(Normal)" 엔지니어는 훌륭한 팀의 핵심임
(spectrum.ieee.org)- 소프트웨어 업계에서는 동료보다 10배 더 생산적이라는 즉 "10x 엔지니어"에 대한 신화가 존재함
- 그러나 이러한 개념은 근거가 빈약하고, 편견을 강화하거나 비현실적인 기준을 설정할 위험이 있음
생산성을 측정하는 것은 복잡하고 불완전함
-
생산성을 어떻게 측정할 것인가?
- 엔지니어가 다루는 분야는 다양함: 마이크로프로세서, IoT, 데이터베이스, 웹 서비스, UX 등
- 사용하는 언어와 프레임워크도 다양함: Golang, Python, COBOL, Lisp 등
- 인접한 기술, 시장, 제품에 대한 전문 지식이 필요함: 보안, 데이터 시각화, 마케팅, 재무 등
- 개발 단계와 제품의 규모도 다름: 화성 탐사 로버인지, 단순한 소프트웨어인지에 따라 다름
-
기술은 변함
- 과거에 뛰어났던 엔지니어도 시간이 지나면서 특정 기술에서 뒤처질 수 있음
- 특정 분야에서 "10배 엔지니어"였더라도, 다른 분야에서는 평균 수준일 수 있음
소프트웨어는 엔지니어가 아니라 팀이 소유함
- 소프트웨어의 품질은 개인의 성과가 아니라 팀의 성과에 의해 결정됨
- 개인이 아무리 빠르게 코드를 작성해도 팀의 프로세스가 느리면 결과적으로 속도는 같아짐
- 코드 작성보다 테스트, 리뷰, 배포, 유지보수에 더 많은 시간이 소요됨
- 특정 엔지니어가 소프트웨어의 소유권을 가지면 그 엔지니어가 사라질 경우 큰 위험이 발생함
- 팀 중심의 소프트웨어 개발 구조가 장기적으로 더 안정적임
최고의 엔지니어링 조직은 "보통" 엔지니어가 뛰어난 성과를 낼 수 있는 곳임
- 최고의 엔지니어링 조직은 꼭 뛰어난 엔지니어들만으로 이루어진 곳이 아님
- 평범한 엔지니어가 일상적으로 좋은 성과를 내고, 지속적으로 제품과 비즈니스를 발전시킬 수 있는 환경이 중요함
- 팀이 시스템을 이해하고, 코드 배포, 사용자 응답, 문제 해결을 일상적으로 수행할 수 있어야 함
- 최고의 엔지니어 조직은 보통의 엔지니어가 성장하고 성과를 낼 수 있는 환경임
"보통" 엔지니어의 중요성
- 소프트웨어 업계는 "똑똑한 사람"을 중시하는 경향이 강함
- 넷플릭스는 "상위 10%"의 인재를, 코인베이스는 "상위 0.1%"의 인재를 선호한다고 밝힘
- 그러나 대부분의 사람은 평범함 → 평범한 사람이 성과를 낼 수 있는 시스템이 필요함
- 소프트웨어 엔지니어는 타고나는 것이 아니라 훈련과 경험으로 성장함
"보통 사람"을 위한 소시오테크니컬 시스템 구축
- 시스템은 "보통 사람"이 쉽게 사용할 수 있도록 설계되어야 함
-
보통의 인간 특성을 고려해야 함:
- 확인 편향, 최근 편향, 후광 효과 등 인지 편향 존재
- 피로감, 감정 상태가 성과에 영향 미침
- 알람이 새벽 3시에 울리면 오후 3시보다 오류 발생 가능성이 높아짐
- 시스템이 직관적이고 사용하기 쉬우면 엔지니어의 에너지가 제품 개선에 집중될 수 있음
뛰어난 엔지니어 조직은 세계적 수준의 엔지니어를 양성함
- 뛰어난 엔지니어링 조직은 뛰어난 인재를 보유한 곳이 아니라, 평범한 엔지니어가 성장할 수 있는 곳임
- 좋은 조직에서는 평균 수준의 엔지니어도 지속적으로 성과를 내고 성장할 수 있음
- 최고의 엔지니어는 이러한 환경에서 자연스럽게 배출됨
"최고의 사람"보다 "적합한 사람"을 고용해야 함
- "최고의 인재"보다 "우리 팀에 적합한 인재"를 찾는 것이 중요함
- 시스템이 개인의 성과보다 팀의 성과를 촉진해야 함
- 개별 성과보다 팀워크와 협업이 중요한 환경이 필요함
- 포용적이고 공정한 문화는 성과를 높이고, 다양한 배경의 엔지니어가 성장할 수 있는 기회를 제공함
결론
- "10배 엔지니어"는 현실적으로 존재할 수 있으나, 이를 팀의 성과와 연결시키는 것은 어렵고 위험함
- 뛰어난 엔지니어 조직은 소수의 천재가 아니라, 평범한 엔지니어가 성과를 낼 수 있는 구조를 갖춘 곳임
- 시스템이 개인의 성과보다 팀의 성과를 강화해야 함
- 포용적인 문화와 시스템을 통해 평범한 엔지니어가 성장하고 성과를 낼 수 있는 환경이 핵심임
스티브 잡스 등의 사람들이 말했던 10배, 100배의 SW 엔지니어는 아래 뜻과 같다고 생각해요.
건설 노동, 배달, 운전같은 업무는 제일 잘하는 숙련자가 보통의 사람보다 2배이상 효율내기가 어렵습니다. 그러나 SW, 금융같은 경우 잘하는 사람은 평범한 사람 100명이 절대 못낼 작업물을 내기도 하죠.
인재양성 교육이 중요하긴 하지만, 인재 선발도 중요해요. 교육과 선발간에는 큰 차이가 있는거 같습니다. 둘이 섞어서 혼동하면 안돼요.
Hacker News 의견
-
소프트웨어 엔지니어링이 특별하다는 생각은 독이 되는 경향이 있음
- 금융 분야와 비슷하게 개인의 가치를 과대평가하는 경향이 있음
- 일을 잘하고 퇴근하는 것이 중요하며, 과도한 근무 시간은 시스템의 취약성을 나타냄
- 꾸준하고 신중한 노력이 중요함
-
"정상적인" 엔지니어는 없으며, 다양한 수준의 개발자가 존재함
- 뛰어난 팀을 만들기 위해서는 능력 있는 엔지니어가 필요함
- 그러나 그런 엔지니어를 찾는 것이 어려움
-
소프트웨어는 팀이 아닌 개인이 개발함
- 복잡한 프로젝트는 보통 한 명의 뛰어난 사람이 주도함
- 팀을 구성하는 것은 끊임없는 도전임
-
노동 계급의 비인간화와 분류에 반대함
- 훌륭한 팀의 핵심은 훌륭한 리더십임
- 팀이 있어야 리더가 존재할 수 있음
-
IEEE가 클릭베이트 같은 내용을 다루는 것에 실망함
- 생산성을 측정하는 방법에 대한 오해가 있음
- "정상적인" 소프트웨어 엔지니어라는 개념에 의문을 가짐
-
10배 엔지니어는 창의적이며 사용자 경험과 코드 유지보수에 신경 씀
- 1배 개발자는 결과만 중시하여 갈등을 초래함
-
10배 엔지니어라는 개념은 과장되었지만, 많은 일을 하는 몇몇 사람들이 있음
- 보상이 비례하지 않음에도 불구하고 일에 몰두하는 이유를 이해하기 어려움
-
엔지니어링 작업은 다른 직업과 다른 특성을 가짐
- 성과는 엔지니어-제품 쌍의 속성임
- 성과를 정량화하기 어려움
-
다른 사람들과 비교해 무력감을 느낄 때가 있음
- 문제를 해결할 때 자신감을 회복함
- 생산성은 명확한 목표를 가질 때 높아짐
- 속도는 마법이 아니며, 특정 방식으로 달성됨
-
많은 엔지니어가 돈을 위해 일하며, 열정이 없으면 뛰어난 엔지니어가 되기 어려움
- 개별적인 기술은 연습과 재능에 의해 영향을 받음
- 경험이 지능보다 더 유용할 수 있음