- 소프트웨어 업계에서는 동료보다 10배 더 생산적이라는 즉 "10x 엔지니어"에 대한 신화가 존재함
- 그러나 이러한 개념은 근거가 빈약하고, 편견을 강화하거나 비현실적인 기준을 설정할 위험이 있음
생산성을 측정하는 것은 복잡하고 불완전함
- 생산성을 어떻게 측정할 것인가?
- 엔지니어가 다루는 분야는 다양함: 마이크로프로세서, IoT, 데이터베이스, 웹 서비스, UX 등
- 사용하는 언어와 프레임워크도 다양함: Golang, Python, COBOL, Lisp 등
- 인접한 기술, 시장, 제품에 대한 전문 지식이 필요함: 보안, 데이터 시각화, 마케팅, 재무 등
- 개발 단계와 제품의 규모도 다름: 화성 탐사 로버인지, 단순한 소프트웨어인지에 따라 다름
- 기술은 변함
- 과거에 뛰어났던 엔지니어도 시간이 지나면서 특정 기술에서 뒤처질 수 있음
- 특정 분야에서 "10배 엔지니어"였더라도, 다른 분야에서는 평균 수준일 수 있음
소프트웨어는 엔지니어가 아니라 팀이 소유함
- 소프트웨어의 품질은 개인의 성과가 아니라 팀의 성과에 의해 결정됨
- 개인이 아무리 빠르게 코드를 작성해도 팀의 프로세스가 느리면 결과적으로 속도는 같아짐
- 코드 작성보다 테스트, 리뷰, 배포, 유지보수에 더 많은 시간이 소요됨
- 특정 엔지니어가 소프트웨어의 소유권을 가지면 그 엔지니어가 사라질 경우 큰 위험이 발생함
- 팀 중심의 소프트웨어 개발 구조가 장기적으로 더 안정적임
최고의 엔지니어링 조직은 "보통" 엔지니어가 뛰어난 성과를 낼 수 있는 곳임
- 최고의 엔지니어링 조직은 꼭 뛰어난 엔지니어들만으로 이루어진 곳이 아님
- 평범한 엔지니어가 일상적으로 좋은 성과를 내고, 지속적으로 제품과 비즈니스를 발전시킬 수 있는 환경이 중요함
- 팀이 시스템을 이해하고, 코드 배포, 사용자 응답, 문제 해결을 일상적으로 수행할 수 있어야 함
- 최고의 엔지니어 조직은 보통의 엔지니어가 성장하고 성과를 낼 수 있는 환경임
"보통" 엔지니어의 중요성
- 소프트웨어 업계는 "똑똑한 사람"을 중시하는 경향이 강함
- 넷플릭스는 "상위 10%"의 인재를, 코인베이스는 "상위 0.1%"의 인재를 선호한다고 밝힘
- 그러나 대부분의 사람은 평범함 → 평범한 사람이 성과를 낼 수 있는 시스템이 필요함
- 소프트웨어 엔지니어는 타고나는 것이 아니라 훈련과 경험으로 성장함
"보통 사람"을 위한 소시오테크니컬 시스템 구축
- 시스템은 "보통 사람"이 쉽게 사용할 수 있도록 설계되어야 함
- 보통의 인간 특성을 고려해야 함:
- 확인 편향, 최근 편향, 후광 효과 등 인지 편향 존재
- 피로감, 감정 상태가 성과에 영향 미침
- 알람이 새벽 3시에 울리면 오후 3시보다 오류 발생 가능성이 높아짐
- 시스템이 직관적이고 사용하기 쉬우면 엔지니어의 에너지가 제품 개선에 집중될 수 있음
뛰어난 엔지니어 조직은 세계적 수준의 엔지니어를 양성함
- 뛰어난 엔지니어링 조직은 뛰어난 인재를 보유한 곳이 아니라, 평범한 엔지니어가 성장할 수 있는 곳임
- 좋은 조직에서는 평균 수준의 엔지니어도 지속적으로 성과를 내고 성장할 수 있음
- 최고의 엔지니어는 이러한 환경에서 자연스럽게 배출됨
"최고의 사람"보다 "적합한 사람"을 고용해야 함
- "최고의 인재"보다 "우리 팀에 적합한 인재"를 찾는 것이 중요함
- 시스템이 개인의 성과보다 팀의 성과를 촉진해야 함
- 개별 성과보다 팀워크와 협업이 중요한 환경이 필요함
- 포용적이고 공정한 문화는 성과를 높이고, 다양한 배경의 엔지니어가 성장할 수 있는 기회를 제공함
결론
- "10배 엔지니어"는 현실적으로 존재할 수 있으나, 이를 팀의 성과와 연결시키는 것은 어렵고 위험함
- 뛰어난 엔지니어 조직은 소수의 천재가 아니라, 평범한 엔지니어가 성과를 낼 수 있는 구조를 갖춘 곳임
- 시스템이 개인의 성과보다 팀의 성과를 강화해야 함
- 포용적인 문화와 시스템을 통해 평범한 엔지니어가 성장하고 성과를 낼 수 있는 환경이 핵심임