🛣️

프론트엔드 엔지니어 커리어 로드맵: 주니어를 위한 3가지 전문성 트랙

태그
프론트엔드커리어가이드전문성
최종 편집
Feb 11, 2024 12:09 AM
발행일
December 28, 2022
🆕
블로그를 stdy.blog로 이전했습니다. 새 블로그에 어떤 글들이 올라올지 궁금하시면 Upcoming Posts를 참고해주세요. 🙂

💬
올해 들어 프론트엔드 엔지니어 채용, 팀 빌딩, 커리어 설계 등을 주제로 크고작은 스타트업의 CEO나 CTO 분들과 대화할 기회가 몇 번 있었다. 그 때 CTO를 비롯한 시니어 엔지니어들이 대부분 백엔드 출신인 조직에서는, 시니어 프론트엔드 엔지니어에 대한 상像이 불명확하여 주니어/미들급 엔지니어 개발자들을 성장시키고 리텐션을 유지하기가 쉽지 않다는 이야기를 많이 들었다.

처음에는 엔지니어링 래더를 토대로 내 의견을 말씀드렸지만, 아무래도 엔지니어링 래더는 좀 추상적이고 역량 기준이 분야에 무관하게 쓰여있다 보니 이것만으로는 주니어 프론트엔드 엔지니어들에게 큰 도움이 되지 않을 것 같았다. 또한 “프론트엔드 커리어 로드맵” 같은 키워드로 검색했을 때 나오는 내용은 대부분 기술적인 공부에만 치중되어 있어 현실과는 살짝 동떨어진 면이 있다고 느꼈다. 그런 글에서 자주 인용되는 게 이런 기술 로드맵인데, 물론 여기에 훌륭한 키워드가 잘 정리되어 있긴 하나 ‘이렇게 기술을 공부하는 것만으로 좋은 시니어 프론트엔드 엔지니어가 될 수 있는가?’에 대해서는 회의적이었기 때문이다.

시간이 지나며 생각이 조금씩 정리되었고, 성심성의껏 답변하고 토론하다 보니 “주니어 프론트엔드 엔지니어가 역량 성장 목표와 커리어 로드맵을 어떻게 가져가야 할까?”에 대한 그림이 점차 구체화되어 이렇게 글로 정리해봤다.

다만 나도 개발 경력이 그리 길지 않고, 지금까지 거쳐온 회사도 100명 이하의 스타트업 뿐이었기에 굉장히 주관적인 시각임을 염두에 두고 글을 읽어주시길 바란다. 반박 또는 토론할 만한 부분이 있다면 언제든지 편하게 댓글 달아주시길.

요약

프론트엔드 개발의 역사가 짧아, 많은 조직에서 좋은 시니어 프론트엔드 엔지니어를 원하지만 찾기는 어렵다. 여러 중소규모 스타트업 CTO들이 비슷한 고민을 하게 된다.

  • 프론트엔드에 요구하는 기술 수준이 그다지 높지 않아 엔지니어의 역량 발전 동기가 적음
  • 프론트엔드 엔지니어 출신으로 좋은 커리어를 쌓은 롤모델이 주변에 별로 없어서 커리어 설계가 어려움
  • 조직 내 시니어 프론트엔드 엔지니어의 부재로 미들급에게 리더십이 더 많이 요구됨

이 글은 이런 고민을 하는 프론트엔드 엔지니어와, 그들을 어떻게 이끌지 고민하는 팀 리드 및 CTO를 위해 썼다. 프론트엔드 엔지니어가 어떤 방향으로 전문성을 특화시켜 어떻게 시니어로서 커리어를 쌓아나갈지에 대한 가이드로서 도움이 되길 기대한다.

1. 탁월한 엔지니어 되기

‘탁월한 시니어 프론트엔드 엔지니어가 되고 싶다’는 문장은 3가지 측면에서 해석할 수 있다.

  • 탁월한 (시니어 프론트엔드) 엔지니어가 되고 싶다.
  • 탁월한 (시니어) 프론트엔드 엔지니어가 되고 싶다.
  • 탁월한 시니어 (프론트엔드) 엔지니어가 되고 싶다.

What Makes a Great Software Engineer?라는 논문에 따르면 탁월한 엔지니어는 좋은 코드를 짜고, 작업의 현재 가치를 극대화하고, 데이터에 기반하여 의사결정하고, 동료의 효과적 의사결정을 돕고, 꾸준히 학습하는 사람이다. 이 다섯 가지 역량을 발전시키고자 노력하면 좋은 엔지니어가 될 것이다.

덧붙여, 점차 강화되는 인공지능 때문에 커뮤니케이션과 글쓰기 능력이 훨씬 더 중요해졌다. 인공지능에게 개발 업무를 대체당하는 대신 인공지능을 비서로 삼아 효과적으로 일하려면 Prompt Engineering 관점에서 영어 글쓰기나 인터뷰 기법을 공부하는 게 좋다.

2. 탁월한 프론트엔드 엔지니어 되기

위의 기본기에 더해 주니어 프론트엔드 엔지니어가 어떤 방향으로 전문성을 쌓으면 좋을지 세 가지 트랙을 생각해봤다. 각 트랙은 상호보완적이므로 한쪽의 전문성이 충분히 있는 사람은 다른 트랙의 전문성을 쌓기 훨씬 쉬워지며, 당연히 각 트랙에서 시니어로서 가능한 커리어도 일부 겹친다. (‘운영 트랙’은 데브옵스적 측면과 프로세스/조직 운영적인 측면 둘 다를 포함했으나, 이 두 가지 역량을 꼭 같이 가져가야만 좋은 커리어를 쌓는 건 아니다. ‘프로세스 특화’ 트랙을 별도로 둬야 할지 고민도 됐지만 4번째 트랙을 유의미하게 만들기에는 아직 나의 역량이 부족하여 일단 하나로 합쳤다.)

웹 특화
제품 특화
운영 특화
a.k.a.
Software Engineer
Product Engineer
Full-Stack Engineer
주요 특징
- 인터넷, 웹브라우저, HTML/CSS/JS에 대한 깊이 이해하고 활용함 - 웹 생태계를 구성하는 도구별 장단점을 알고, 여러 환경에서 트러블슈팅해본 경험이 있음 - 웹에 등장하는 새로운 기술에 민감하고, 직접 활용 시도를 함
- 적은 양의 코딩으로도 여러 도구를 조합하여 초기 제품 성과를 만들어낼 수 있음 - 시장과 고객에 대한 이해가 높고, 이해를 더 높이기 위한 여러 방법을 실무에 적용할 줄 앎 - 마케팅 및 영업 담당자에게 제품을 이해시키기 위한 커뮤니케이션을 자주 함
- 프로젝트 구조, 통합, 테스트, 배포에 대한 관심이 많음 - 간단한 API는 직접 만들줄 알고 필요한 인프라도 직접 구성할 줄 앎 - 조직 규모가 커지면서 생기는 빈틈과 비효율을 캐치하여 몸으로 때우고, 프로세스를 개선함
장단점
- 어느 정도 수준까지는 혼자서도 역량을 올리기 쉬움 - 제품의 복잡도/성숙도가 충분히 높지 않은 조직에서는 전문성을 발휘하여 인정받을 만한 기회가 적음
- 제품을 시장에서 검증받고자 하는 초기 스타트업에게 열렬히 환영받음 - 안전한 공간에만 머물러있는다면 본인이 키운 제품 조직에서 밀려나버릴 수도 있음
- 넓은 범위의 업무를 커버하면서 많은 사람들과 협업하며 인정받을 기회가 있음 - 의식적으로 노력하지 않으면 기술 역량이 뒤쳐지고 반복 업무만 하다가 번아웃이 올 수 있음
역량 향상 방법
- 로드맵의 키워드를 따라 책과 인터넷 컨텐츠로 공부하며 사이드 프로젝트에 써보기 - 뉴스레터 구독, 오픈소스 참여, 신기술 테스트, 사용하는 도구의 동작 원리와 한계를 이해하고, 때론 직접 도구를 발명하기 - 다양한 환경에서 트러블슈팅하고 성능을 끌어올려보기
- 본인 도메인에서 훌륭한 제품을 분석적으로 사용하고, 고객을 관찰하며 프로덕 센스 키우기 - 익숙한 도구의 조합에 집착하지 말고 공구상자를 지속적으로 개편하기 - 본인이 주도한 초기 제품이 성과를 거둬 구조와 코드를 갈아엎어야 할 시기를 함께 버티며 바퀴를 교체하기
- 어드민 백엔드 API 구현과 프론트엔드 인프라 구성 등으로 외연을 넓히기 - 폭발적으로 성장하는 조직에서 대규모 트래픽과 장애를 맞아가며 대응하기 - 큰 회사의 운영 프로세스와 가이드라인을 파헤치거나 멘토링/강연을 듣고 본인 조직에 맞게 적용하기
이후 시니어로서 가능한 커리어
- 웹 역량을 높이는 강의 교육자 - (웹 생태계를 구성하는 도구를 만드는 조직의) 소프트웨어 엔지니어 (D7) - (복잡도 높은 제품을 다루는 조직의) 소프트웨어 엔지니어 (D7) - 프론트엔드 테크 리드 (TL7)
- (PMF를 찾는 모든 조직의) 소프트웨어 엔지니어 (D7) - 그로스 엔지니어, 그로스 컨설턴트 - 프론트엔드 테크 리드 (TL7) - 테크니컬 프로그램 매니저 (TPM7) - PM, PO, CPO
- (제품이 다양한 대규모 조직의) 소프트웨어 엔지니어 (D7) - 프론트엔드 테크 리드 (TL7) - 테크니컬 프로그램 매니저 (TPM7) - 엔지니어링 매니저 (EM7), 애자일 코치, VP of Engineering - CTO

3. 탁월한 시니어 엔지니어 되기

위와 같이 전문성을 쌓은 사람이 탁월한 시니어 엔지니어가 되려면 어떻게 해야 할까? 나는 어떻게 시니어 역할을 맡게 됐는지, 또 내가 만나왔던 훌륭한 시니어 엔지니어들은 어떤 사람이었는지를 토대로 탁월한 시니어 엔지니어가 되기 위한 세 가지 포인트를 짚어본다.

  • 기본에 충실하고자 노력한다: 탁월한 엔지니어의 5가지 역량은 당연히 시니어 엔지니어에게도 똑같이 적용된다.
  • 명시적 리더가 아니어도 리더처럼 행동한다: 리더십은 명시적 리더가 아닐 때도 충분히 발휘할 수 있고, 때론 동료의 모범적 행동 하나가 명시적 리더의 수많은 말보다 더 큰 영향을 끼칠 수 있다. 주어진 역할과 상관없이 제품과 팀과 조직 전체에 긍정적 영향을 미치기 위해 힘쓰면 어느새 시니어로 인정받을 것이다.
  • 어떤 상황에서든 큰 임팩트를 낸다: 디버그와 같은 작은 행위에서도 시니어는 주니어보다 훨씬 큰 영향력을 발휘한다. 주어진 일을 잘 끝마치는 걸로 만족하지 않고, 전후 맥락을 살피며 여러 사람과 의사소통하여 큰 임팩트를 만들어내는 사람이라면 제품에서든, 팀에서든, 회사에서든 어느 한 파트를 안심하고 맡길 수 있는 시니어로 성장할 것이다.

“3년차 프론트엔드 엔지니어입니다. 이제 뭘 더 공부해야 할까요?”

‘웹 개발자’는 1990년대부터 있어왔지만 ‘프론트엔드 엔지니어’가 독립적인 직업군으로 불리게 된 것은 불과 10년도 채 안 됐다. 자바스크립트 생태계가 웹에 끼치는 영향이 급격히 커지고 UI/UX의 중요성도 훨씬 부각된 2010년대 중반부터 많은 조직에서 프론트엔드 엔지니어를 본격적으로 채용하기 시작했다.

이렇게 프론트엔드 개발의 역사가 짧다 보니, 다들 좋은 시니어 프론트엔드 엔지니어를 원하지만 찾기는 너무 힘들다(죄다 네카라쿠배토당야에 가있는 것 같다). 일단 뽑아서 키워보자는 생각으로 주니어를 채용한다. 주니어는 디자이너나 기획자가 건네준 화면 몇 개를 그리는 것으로 일을 시작한다. 수많은 용어와 프레임워크에 익숙해지는 것만도 벅찼던 주니어는 연차와 경험이 쌓이면서 슬슬 자신감이 붙는다. 디자이너와 기획자가 뭘 요구하든 검색하거나 라이브러리 쓰면 대부분 만들 수 있겠다고 생각한다. 그러나, 점점 자신감은 불안감으로 바뀐다.

  • ‘어차피 해달라는 건 다 구현할 수 있겠는데 이제 뭘 더 공부해야 하지?’ (대부분의 스타트업에서 프론트엔드에 요구하는 기술 수준이 그다지 높지 않음)
  • ‘내가 프론트엔드만으로 계속 먹고살 수 있을까? 주변 시니어들은 대부분 백엔드 출신이던데 나도 백엔드로 전업해야 하나?’ (프론트엔드 엔지니어 출신으로 좋은 커리어를 쌓은 롤모델이 주변에 별로 없음)
  • ‘내 뒤에 들어온 주니어들을 이끌어주라는데, 과연 내가 잘 할 수 있을까?’ (조직 내 시니어 프론트엔드 엔지니어의 부재로 미들급에게 리더십이 더 많이 요구됨)

이 글은 이런 고민을 하는 프론트엔드 엔지니어와, 이들을 어떻게 이끌지 고민하는 팀 리드 및 CTO를 생각하며 썼다. 프론트엔드 엔지니어가 시니어로 나아가기 위해 어떤 역량을 쌓아야 하는지, 어떤 방향으로 전문성을 특화시켜야 할지, 그리고 향후 어떤 커리어를 쌓아나갈지에 대한 가이드로서 조금이나마 도움이 되길 기대한다.

1. 탁월한 엔지니어 되기

‘탁월한 시니어 프론트엔드 엔지니어가 되고 싶다’는 문장은 3가지 측면에서 해석할 수 있다.

  • 탁월한 (시니어 프론트엔드) 엔지니어가 되고 싶다.
  • 탁월한 (시니어) 프론트엔드 엔지니어가 되고 싶다.
  • 탁월한 시니어 (프론트엔드) 엔지니어가 되고 싶다.

이중 첫번째가 가장 기본이며 가장 중요하다. 물론 모든 ‘기본’이 마찬가지겠지만 기본을 잘 하는 것도 무척 어렵다. 애초에 탁월한 엔지니어는 어떤 사람일까?

다음은 What Makes a Great Software Engineer?(Li Paul Luo 외, 2015년)라는 논문에 나오는 ‘탁월한 엔지니어의 5가지 주요 역량’을 요약하여 내 의견을 덧붙인 것이다. 올해 초에 작성한 뉴스레터개발자 채용 인터뷰 평가 템플릿에서도 공유한 바 있지만 재탕한다.

좋은 코드를 짠다(Be a competent coder)

탁월한 엔지니어는 좋은 코드를 짠다. 나는 ‘좋은 코드를 짠다’는 것을 1) 코드 품질에 대한 자신만의 일관된 관점을 갖고, 2) 고객 요구사항을 만족하는 코드를 3) 빠른 속도와 4) 적은 버그로 5) 가독성 있게 작성한다는 뜻으로 사용한다. 주니어 엔지니어라면 일단 좋은 코드 짜기를 목표로 삼는 게 좋다. 다만 이건 커트라인이라서, 일정 수준을 넘어가면 다른 역량이 더 중요해진다.

작업의 현재 가치를 극대화한다(Maximize current value of your work)

스타트업에서는 기술부채가 쌓이더라도 빠르게 구현하는 것이 능사라는 관점이 있다. 나 또한 좋은 코드에 대한 ‘기본’을 지킨다는 가정 하에(특히 적은 버그), 빨리 출시하여 고객 반응을 확인하여 수정하는 게 아주 유효한 전략이라고 생각한다. 그러나 분명 어느 순간부터는 기술부채가 발목을 잡아 전진하지 못하게 되는 경우가 생긴다. 따라서 탁월한 엔지니어라면 어디서 어떤 문제가 생길지, 나중의 요구사항 변화가 어디에 올지 예측하여 시스템적 사고를 통해 유지보수 비용을 줄이는 식으로 천천히 실행할 줄도 알아야 한다. 즉 빨리 실행하는 능력과 멀리 볼 줄 아는 능력을 둘 다 기르되 언제 무엇을 얼마나 사용할지 결정할 수 있어야 현재 본인이 하는 일의 가치가 극대화된다. 이는 다음 역량으로 이어진다.

데이터에 기반하여 의사결정한다(Practice informed decision-making)

제품 개발은 수많은 의사결정의 연속이다. 제품이 출시된 이후에도 의사결정은 끝없이 이어진다(제품의 지표가 좋지 않은데 이유가 뭘까, 이렇게 개선하면 나아질까, 다음 기능은 뭘 우선해서 넣을까 등). 탁월한 엔지니어는 직관뿐 아니라 데이터에 기반해 합리적 의사결정을 하는 사람이다. 따라서 다양한 양질의 정보를 얻기 위한 환경을 구축하고, 주변에 도움을 요청하고, 열린 마음을 가져야 한다. 직관에 반하는 정보가 수집되었다면 그걸 무시하기보다는 좋은 학습의 신호로 받아들여야 한다. 구성원의 다양성이 확보된 커뮤니티에 속해 있는 게 그래서 중요하다.

동료의 효과적 의사결정을 돕는다(Enable others to make decisions efficiently)

탁월한 엔지니어는 본인이 확보한 유용한 정보와 경험을 공유하여 다른 사람을 성장시키고, 팀의 생산성을 높이고, 결과적으로 본인이 속한 조직이 더 나은 의사결정을 할 수 있도록 돕는다. 이렇게 하려면 본인과 조직 모두 투명성이 높아야 하는데, 나는 투명성이 높으려면 본인의 취약성을 드러내는 마음가짐과 조직문화가 갖춰져야 한다고 생각한다.

꾸준히 학습한다(Continuously learn)

마지막으로, 탁월한 엔지니어는 끊임없이 배우고 끊임없이 본인을 개선하려고 노력한다. 이 업계는 워낙 빠르게 변하니 n년 전에 유효했던 지식이 지금도 유효하리라는 보장이 없다. 좋은 의사결정을 위해 정보를 습득하는 태도는 달리 말하면 꾸준히 학습하려는 태도이기도 하다. 지식이 그저 지식으로 남지 않고, 그걸 배워서 어떤 역량을 어떻게 키워나갈 것인가 고민하면서 배워야 한다. 요즘은 긱뉴스나 각종 컨퍼런스를 비롯해 큐레이션된 최신 정보를 쉽게 접할 수 있다. 이러한 정보를 받아들이면서도, 한편으로는 핫하다는 프레임워크나 도구의 사용법만 파기보다는 당장의 쓸모가 조금은 덜할지라도 근본적인 원칙이나 설계에 대한 고전을 읽고 적용해보는 것도 좋다.

이 다섯 가지 역량을 쌓고자 지속적으로, 의식적으로 노력하는 사람이라면 비단 개발뿐 아니라 무슨 일을 하더라도 어디서나 환영받는 사람이 될 것이다.

여기에 하나 더하자면, 커뮤니케이션/글쓰기 능력의 중요성이 이전보다도 훨씬 커졌다. 최근 각광받는 ChatGPT를 비롯한 인공지능에게 본인의 일을 대체당하는 대신 인공지능을 비서로 삼아 내 일을 더 효과적으로 하기 위해서다. 위 5가지 역량을 잘 쌓은 사람이 커뮤니케이션을 못할리 없겠지만, Prompt Engineering 관점에서 영어 글쓰기나 인터뷰 기법에 대해 좀 더 공부한다면 유용하게 써먹을 수 있을 것이다.

2. 탁월한 프론트엔드 엔지니어 되기

위의 다섯 가지 기본 역량은 탁월한 엔지니어가 되기 위한 태도 또는 마음가짐에 가깝다. 주니어 입장에서는 현실적으로 어떤 노력을 해야 하는지 모호하게 느껴질 수 있다. 그래서 더 구체적으로 프론트엔드 엔지니어가 어떤 방향으로 전문성을 쌓으면 좋을지 세 가지 트랙을 생각해봤다.

트랙별 차이를 드러내기 위해 편의상 분리하여 설명해두었지만, 실제로는 대부분의 시니어 프론트엔드 엔지니어가 한 트랙만 끝까지 밟기보다는 세 트랙 모두에서 어느정도 역량을 갖췄을 확률이 높다. 각 트랙은 상호보완적이므로 한쪽의 전문성이 충분히 있는 사람은 다른 트랙의 전문성을 쌓기 훨씬 쉬워지며, 당연히 각 트랙에서 시니어로서 가능한 커리어도 일부 겹친다. (‘운영 트랙’은 데브옵스적 측면과 프로세스/조직 운영적인 측면 둘 다를 포함했으나, 이 두 가지 역량을 꼭 같이 가져가야만 좋은 커리어를 쌓는 건 아니다. ‘프로세스 특화’ 트랙을 별도로 둬야 할지 고민도 됐지만 4번째 트랙을 유의미하게 만들기에는 아직 나의 역량이 부족하여 일단 하나로 합쳤다.)

웹 특화
제품 특화
운영 특화
a.k.a.
Software Engineer
Product Engineer
Full-Stack Engineer
주요 특징
- 인터넷, 웹브라우저, HTML/CSS/JS를 깊이 이해하고 활용함 - 웹 생태계를 구성하는 도구별 장단점을 알고, 여러 환경에서 트러블슈팅해본 경험이 있음 - 웹에 등장하는 새로운 기술에 민감하며 실무에서 써먹어봄
- 적은 양의 코딩으로도 여러 도구를 조합하여 초기 제품 성과를 만들어낼 수 있음 - 시장과 고객에 대한 이해가 높고, 이해를 더 높이기 위한 여러 방법을 실무에 적용할 줄 앎 - 마케팅 및 영업 담당자에게 제품을 이해시키기 위한 커뮤니케이션을 자주 함
- 프로젝트 구조, 통합, 테스트, 배포에 대한 관심이 많음 - 간단한 API는 직접 만들줄 알고 필요한 인프라도 직접 구성할 줄 앎 - 조직 규모가 커지면서 생기는 빈틈과 비효율을 캐치하여 몸으로 때우고, 프로세스를 개선함
장단점
- 어느 정도 수준까지는 혼자서도 역량을 올리기 쉬움 - 제품의 복잡도/성숙도가 충분히 높지 않은 조직에서는 전문성을 발휘하여 인정받을 만한 기회가 적음
- 제품을 시장에서 검증받고자 하는 초기 스타트업에게 열렬히 환영받음 - 안전한 공간에만 머물러있는다면 본인이 키운 제품 조직에서 밀려나버릴 수도 있음
- 넓은 범위의 업무를 커버하면서 많은 사람들과 협업하며 인정받을 기회가 있음 - 의식적으로 노력하지 않으면 기술 역량이 뒤쳐지고 반복 업무만 하다가 번아웃이 올 수 있음
역량 향상 방법
- 로드맵의 키워드를 따라 책과 인터넷 컨텐츠로 공부하며 사이드 프로젝트에 써보기 - 뉴스레터 구독, 오픈소스 참여, 신기술 테스트, 사용하는 도구의 동작 원리와 한계를 이해하기, 때론 직접 도구를 발명하기 - 다양한 환경에서 트러블슈팅하며 앱 성능을 끌어올려보기
- 본인 도메인에서 훌륭한 제품을 분석적으로 사용하고, 고객을 관찰하며 프로덕 센스 키우기 - 익숙한 도구의 조합에 집착하지 말고 공구상자를 지속적으로 개편하기 - 본인이 주도한 초기 제품이 성과를 거둬 구조와 코드를 갈아엎어야 할 시기를 함께 버티며 바퀴를 교체하기
- 어드민 백엔드 API 구현과 프론트엔드 인프라 구성 등으로 외연을 넓히기 - 폭발적으로 성장하는 조직에서 대규모 트래픽과 장애를 맞아가며 대응하기 - 큰 회사의 운영 프로세스와 가이드라인을 파헤치거나 멘토링/강연을 듣고 본인 조직에 맞게 적용하기
이후 시니어로서 가능한 커리어
- 웹 역량을 높이는 강의 교육자 - (웹 생태계를 구성하는 도구를 만드는 조직의) 소프트웨어 엔지니어 (D7) - (복잡도 높은 제품을 다루는 조직의) 소프트웨어 엔지니어 (D7) - 프론트엔드 테크 리드 (TL7)
- (PMF를 찾는 모든 조직의) 소프트웨어 엔지니어 (D7) - 그로스 엔지니어, 그로스 컨설턴트 - 프론트엔드 테크 리드 (TL7) - 테크니컬 프로그램 매니저 (TPM7) - PM, PO, CPO
- (제품이 다양한 대규모 조직의) 소프트웨어 엔지니어 (D7) - 프론트엔드 테크 리드 (TL7) - 테크니컬 프로그램 매니저 (TPM7) - 엔지니어링 매니저 (EM7), 애자일 코치, VP of Engineering - CTO

전문성 트랙 1: 웹 특화

웹 특화 프론트엔드 엔지니어는 웹 브라우저에 대한 깊은 이해를 가지고, HTML/CSS/JS라는 웹의 3대 구성 요소를 적재적소에 써먹는 사람들이다. 이들은 우리가 ‘개발자’라고 할 때 흔히 떠올리는 ‘특정 기술에 능통한 소프트웨어 엔지니어’에 가깝다.

웹 특화 프론트엔드 엔지니어의 지식과 경험 예시
  • HTTP와 인터넷 자체에 대해서 잘 이해한다. CORS에 대해 잘 알고, 리소스가 어떻게 브라우저에 캐싱되는지 이해한다. Cookie, LocalStorage, IndexedDB 등 브라우저의 저장 공간별 특성에 대해 이해하여 활용한다.
  • 브라우저가 문서를 해석해서 렌더링하는 프로세스를 잘 이해한다. Core Web Vitals의 각 지표에 웹앱의 어떤 요소가 어떤 영향을 미치는지 이해한다. 성능 분석 도구(e.g., Lighthouse, Performance Profiler, Bundle Analyzer)로 웹사이트 성능을 측정 및 분석하여 개선해본 경험이 있다. 주요 브라우저들의 특징과 차이를 이해하여 코딩하고 디버깅한다. 브라우저가 할 수 있는 일은 최대한 브라우저에게 맡긴다.
  • 각종 DOM API와 이벤트 핸들러를 잘 사용한다. 특정 브라우저에서 미지원되는 기능이라면 폴리필이나 폴백을 적절히 마련한다. 모바일 브라우저, 웹뷰, Node.js, Window DOM, JSDOM 등 각 환경별 특징과 차이를 이해하며 환경간에 잘 호환되는 코드를 짠다.
  • 시멘틱 HTML을 잘 이용한다. 웹 접근성을 준수하는 구조로 HTML을 짜서 스크린 리더에게도 문제없는 앱을 만든다. CSR, SSR, SSG를 모두 능숙하게 다루며 언제 어떤 방식을 쓰는게 유리한지 안다.
  • 모던한 CSS 셀렉터와 속성의 존재를 잘 알고 이용한다. 이전에는 JS로만 할 수 있었던 인터랙티브한 UI/UX중 CSS로 대체 가능한 것들을 찾고, 대체하여 성능과 코드 가독성을 높인다. CSS Module, CSS-in-JS, Utility-first CSS(e.g., TailwindCSS) 등 근래 CSS 세계에서 자주 사용되는 개념과 프레임워크에 대해 이해하고, 익숙하게 사용한다. 디자이너와 협업하여 본인 조직만을 위한 디자인 시스템을 바닥부터 만들어 Storybook 등을 통해 공개해본 경험이 있다.
  • ES6 이후의 모던 JS 문법과 모듈 시스템을 잘 이해하고, ESM와 CJS의 차이를 알고, TypeScript를 잘 이용한다. JS 생태계를 이루는 여러 도구 중 조직과 제품의 상황에 맞는 것을 선택할 줄 알고, ‘개발-린트-테스트-빌드-배포’라는 여정의 각 단계별로 최소 한가지 이상의 도구를 익숙하게 사용한다(e.g., VSCode + Yarn + TypeScript + React + Next.js + TanStack Query + ESLint + Prettier + Husky + Jest + Cypress + Webpack + Github Action + Vercel). 각 도구의 한계를 알고, 그 한계가 그 도구 안에서 또는 다른 도구로 어떻게 극복될 예정인지 이해하고, 때론 그 한계를 직접 극복한다(새로운 도구를 만들든, 기존 도구에 PR을 날리든).
  • Rust, WebAssembly, Edge Computing 등 새로운 기술들이 웹 생태계에 미치는 영향에 대해 이해한다. 이런 기술 또는 그 기술을 활용한 도구를 사이드 프로젝트 또는 실무에서 테스트해본 경험이 있다.

웹 특화 트랙은 전문성을 키우기 위해 필요한 기술 및 키워드가 로드맵으로 잘 정리되어 있고, 인터넷상에 무료 강의를 비롯해 공부할 수 있는 컨텐츠도 많다. 그래서 어느 정도 레벨까지는 혼자 공부하거나 사이드 프로젝트를 진행하면서 역량 수준을 빠르게 끌어올리기 수월하다. 그러나 그 이상으로 올라가려면 뉴스레터를 구독(e.g., Korean FE Article)하고, 여러 동료와 협업하고, 오픈소스 커뮤니티에 참여하고, 생태계를 이루는 도구들의 소스코드와 릴리즈 노트를 후벼파고, 신기술의 동향을 파악하며 직접 시험해보는 등 꾸준한 노력이 필요하다.

웹 전문가는 도구를 사용하는 데 만족하지 않고 그 동작 원리를 삽질해가며 파악하는 데서 재미를 느낀다. 제품의 복잡도가 올라가서 온갖 환경에서 트러블슈팅을 해야 하거나, 서비스가 어느정도 궤도에 올라 프론트엔드의 성능을 끌어올려야 할 때 이들의 이러한 지식과 삽질 경험이 빛을 발한다. 즉 웹 전문가들은 제품이 성숙해질수록 더 필요해지고, 더 큰 임팩트를 낼 수 있다.

이는 초기 스타트업에서 이들의 특화된 전문성이 인정받기 쉽지 않다는 뜻이기도 하다. 제품을 시장에 내놓고 핏을 찾을 때까지 고군분투하는 시기에는 대부분의 제품에서 필요한 웹 기술의 수준이 그리 높지 않기 때문이다. 나는 웹 기술이 부족해서 시장에서 성공하지 못하는 케이스도, 탁월한 웹 기술만으로 시장에서 성공한 케이스도 많이 접하지 못했다. 물론 웹 전문가가 있다면 당연히 어느 조직에서나 큰 도움이 되겠지만, 초기 스타트업에서 이들의 전문성을 필요로 할 만한 사건이 자주 일어나지는 않을 것이다.

그러면 웹 특화 전문성을 쌓은 프론트 엔지니어는 이후 어떤 커리어를 밟아나갈 수 있을까? 우선 웹 전문가들은 웹 생태계 구성 도구를 직접 만드는 회사(e.g., Vercel, Remix, Chromatic)에 합류하거나, 본인의 전문성을 바탕으로 강의를 만들어서 교육하는 등 유니크한 기회를 만들 가능성이 있다.

역량이 개인 강의를 운영할 수준까지는 아니더라도, 복잡하고 성숙한 제품을 가진 조직에는 웹 전문가가 들어갈 자리가 충분히 존재한다. 경험상 엔지니어링 팀의 크기가 두자릿수를 넘길 때부터는 개발자 10명당 최소 1명 정도는 웹 전문가가 있어야 서비스의 품질 및 성능을 잘 끌어올릴 수 있다고 보기 때문이다. 매니저 역할에도 관심이 있는 엔지니어라면 그러한 조직의 테크 리드 자리도 노려볼 수 있다.

전문성 트랙 2: 제품 특화

제품 특화 프론트엔드 엔지니어는 제품을 시장에 내놓아서 성공시키기까지 필요한 일이라면 무엇이든지 할 수 있는 사람들이다. 이들은 스스로를 ‘프로덕 엔지니어’로 소개하는 것을 선호하며, 프론트엔드 기술은 제품을 성공시키기 위해 그들이 쓸 수 있는 유용한 도구 중 하나다. 웹 특화 엔지니어와 다르게 각 도구의 근본 작동 원리보다는 ‘그래서 언제 무엇을 어떻게 쓰는 게 좋은가?’에 관심이 더 많다.

제품 특화 프론트엔드 엔지니어의 지식과 경험 예시
  • 실제 코딩 없이도 여러 도구를 조합하여 적은 비용으로 제품의 초기 성과를 만들어낸 경험이 있다(e.g., ProtoPieFigjam 같은 도구로 UI 프로토타입을 만들고, 노코드로 랜딩 페이지를 만들고, 매체 광고의 썸네일과 문구를 바꿔가며 퍼널 통과율을 관찰하면서 A/B 테스트하고, Supabase로 고객 정보를 저장하고, Typeform으로 설문조사를 만들고, MailChimp로 마케팅 이메일을 보내고, Zendesk를 붙여 고객 문의에 빠르게 대응).
  • 검색엔진의 동작 방식(e.g., Google’s 200 Ranking Factors)에 대해 잘 이해하여 SEO를 수행한다. 단순히 ‘이렇게 하면 랭킹이 올라가더라’라는 미신에 기대기보다는 SEO와 상관없이 수행하면 좋을 활동을 우선시한다. 사이트맵을 추가하고, 적절한 title과 description과 본문을 이미지와 함께 넣는다. 보기 좋은 링크 프리뷰를 위해 OpenGraph도 신경쓴다.
  • 시장과 고객에 대한 이해가 높고, 이해도를 더 높이기 위한 활동에 꾸준히 참여한다. PM 및 디자이너와 함께 고객 여정을 그리고, 고객 인터뷰를 직접 수행하고, 고객 행동 이벤트를 설계하고, 이벤트 분석 도구를 심어 관찰한다. 고객 경험을 나타내는 핵심 지표를 정의하여 측정한다.
  • 본인이 속한 도메인에서 소위 ‘잘 나가는’ 제품들을 대부분 분석적으로 사용해본다. 도메인의 트렌드 변화에 민감하며 그러한 트렌드를 본인 제품에 (최소한 마케팅 용도로라도) 적용해본 경험이 있다.
  • 제품의 마지막 10%를 꼼꼼하게 마감하는 역할을 자주 맡는다. 고객 경험에 집착하여 경험을 개선하기 위한 작은 UI/UX 디테일을 끊임없이 제안한다. 다른 한편으로 제품이 고객에게 도달하지 못하면 아무런 가치를 만들어내지 못한다는 것을 잘 이해하고 있기에, 우선순위를 조율하며 기술부채를 현명하게 쌓는 방식으로 구현할 줄 안다.
  • PM과 함께, 또는 PM을 대신하여 영업 담당자 및 마케팅 담당자와 커뮤니케이션하는 일이 잦다. 영업과 마케팅 담당자에게 제품을 이해시킴으로써 잠재고객에게 더 잘 설명하고 더 잘 보여주기 위해서이다. 어떤 기능이 언제까지 배포되는지 로드맵을 제공하는 역할을 수행하기도 한다.

제품 전문가는 아직 시장으로부터 충분한 반응을 얻지 못한 초기 스타트업에서 가장 환영받는 유형의 엔지니어다. 적절한 가설을 설정하고 빈번하게 실험하면서 초기 제품에 유의미한 변화를 만들어내려면 높은 수준의 기술보다는 고객/시장에 대한 이해와 프로덕 센스가 더 중요한데, 제품 특화 프론트엔드 엔지니어가 바로 그런 센스를 갖춘 사람들이기 때문이다. 이들은 코딩도 좋아하지만 코딩 없이 문제를 빠르게 해결하는 걸 더 좋아한다(노코드/로우코드 도구를 사용하든, 미팅을 통해 스펙을 줄이든). 자신의 기여로 UI/UX가 더 좋게 변하고, 제품 지표가 개선되는 걸 보면서 희열을 느낀다.

제품 특화 트랙을 밟고자 하는 엔지니어는 두 가지 함정에 빠지지 않도록 주의해야 한다. 첫번째는 PM이나 디자이너가 기획해준 작업을 맥락 파악(e.g., 어떤 고객의 어떤 문제를 풀기 위한 작업인가? 그 문제는 얼마나 시급하고 얼마나 중요한가?) 없이 그저 빠르게 수행하려는 태도다. 제품 특화 엔지니어가 임팩트를 내려면 단순히 빠르게 구현만 할 게 아니라, ‘고객이 원하는 가치를 가장 적절한 형태로 빠르게 전달’하는 데 집중해야 한다. 따라서 언제나 이 기능이 어떤 고객의 어떤 중요한 문제를 푸는 것인지 고민하며 의사소통하는 게 좋다.

엔지니어가 전달받은 대로 구현만 한다면 첫 버전 배포는 빠를지도 모르지만, 고객이 별로 원하지 않는 제품을 전달했다거나, 유저플로우상 듬성듬성 빠진 케이스가 있다거나 하는 이유로 큰 효용을 못 보고 둘째 버전을 금방 만들어야 할 수도 있다. 때로는 제공하려는 핵심가치와 상관없는 곳에 오버엔지니어링(e.g., 처음 만들어보는 패턴으로 CSS 애니메이션을 구현해야 해서 오래 삽질했는데 알고보니 꼭 그렇게 안해도 됐었다거나)해서 첫 버전 배포조차 느려질 위험도 있다.

두번째는 너무 오랫동안 안전한 공간에만 머물러있으면서 역량 강화에 소홀해지는 것이다. 제품 특화 엔지니어는 문제가 주어졌을 때 본인에게 가장 익숙한 도구의 조합으로 최대한 신속하게 구현하려는 경향이 있다. 하지만 그 도구가 현 시점에 그 문제를 풀기에 가장 적합한 도구라는 보장은 없다. 학습 비용을 감수하고라도 때론 새로운 CSS 문법, 새로운 UI 프레임워크, 새로운 노코드 도구 등을 익히며 공구상자를 업데이트하는 게 장기적으로 이득이다.

또한 트래픽이 늘어나고, 조직규모가 커지고, 비즈니스 로직이 복잡해진다면 제품 특화 엔지니어가 슈퍼스타처럼 만들었던 구조와 코드를 대폭 뜯어고쳐야 할 일이 반드시 생긴다. 만약 이런 변화에 적응하지 못하고 ‘의도대로 작동하나 가독성이 나쁘고 유지보수하기 어려운 코드’나 ‘조직 내에서 본인만 잘 쓰는 도구 및 프레임워크’로만 계속 일한다면, 동료들로부터 협업하기 어렵다는 평가를 받으며 자신이 키워놓은 제품 조직에서 불명예스럽게 떠나 또다른 초기 스타트업으로 이동해야 할지도 모른다. 물론 초기 스타트업의 제품을 시장에 인정받을 수준까지 만들어내는 건 굉장히 특별한 역량이지만, 엔지니어로서의 기본 역량을 탄탄하게 유지하도록 노력해서 손해볼 리는 없다.

제품 특화 프론트엔드 엔지니어는 제품을 시장에 안착시키고자 하는 모든 조직에서 환영받으니, 테크 리드를 비롯한 시니어 엔지니어로서 커리어를 지속하기 쉽다. 그러나 꼭 프론트엔드 엔지니어가 아니더라도 다른 여러 역할도 충분히 수행할 수 있다. 그로스 컨설팅 조직에서 그로스 엔지니어나 컨설턴트로 일할 수도 있고, 엔지니어링 배경을 가진 채 PM/PO가 되면 엔지니어들과의 의사소통이나 적정기술 선택 등에서 아주 수월해지므로 이쪽으로 전업하여 CPO까지도 나아갈 수도 있다. 제품의 구현자들(PM, 디자이너, 동료 백엔드 개발자 등)과 좋은 협력관계를 유지하면서 영향력을 끼쳐야 할 일도 많으니 협력과 관리 역량을 강화하여 테크니컬 프로그램 매니저를 맡는 것도 가능하다고 본다.

전문성 트랙 3: 운영 특화

‘운영 특화’ 프론트엔드 엔지니어는 효과적으로 제품과 조직을 운영하는 데 필요한 여러 도구와 프로세스를 이용할 줄 아는 사람들이다. 이들은 백엔드/인프라/데브옵스/아키텍처/조직관리 등 여러 방면으로 관심을 가지고 역량을 쌓아, 프론트엔드 엔지니어라기보다는 ‘데브옵스 엔지니어’나 ‘풀 스택 엔지니어’로 불리는 일도 잦다.

운영 특화 프론트엔드 엔지니어의 지식과 경험 예시
  • 프로젝트 구조, 통합, 테스트, 배포에 대한 관심이 많다. 모노레포가 멀티레포 대비 어떤 장단점이 있는지 이해하고, 멀티레포를 모노레포로 마이그레이션하거나 모노레포로 된 서비스를 운영(통합/테스트/배포)해본 경험이 있다. 모노레포 및 Plug’n’Play를 지원하는 yarn berrypnpm 과 같은 패키지 매니저의 사용법에 능통하여 트러블슈팅을 할 수 있다. 마이크로 프론트엔드 개념을 실무에서 사용해본 경험이 있다.
  • Sentry, Datadog, NewRelic 등 서비스 성능 측정 및 에러 모니터링 도구를 능숙하게 사용하여 성능 병목과 오류를 파악한다. 대규모 트래픽에 맞아보고, 장애 대응을 하면서 달리는 자동차의 바퀴를 갈아끼워본 경험이 있다. 엔지니어링 팀 내에서 린터, 코드 리뷰, 테스트, QA 자동화, 회고를 통해 같은 실수를 반복하지 않고 생산성을 높이기 위해 프로세스를 끊임없이 개선한다.
  • Docker나 Kubernetes 을 비롯한 컨테이너 기술을 실무에 적용하여 개발/테스트/배포해본 경험이 있다. 주요 클라우드 서비스(AWS, GCP, Azure) 중 최소 하나 이상을 프론트엔드에 필요한 수준으로는 다룰 줄 안다(e.g., S3, Cloudfront, Lambda@Edge, Route53, Cloudwatch). Terraform으로 클라우드 서비스를 관리해본 경험이 있다.
  • GraphQL에 관심이 많고, BFF와 같이 프론트엔드에 최적화된 API나 간단한 어드민 백엔드 API는 직접 설계 및 구현한다. 백엔드 팀에서 API 모델링과 설계를 할 때 충분히 유의미한 인풋을 주고, 때로는 직접 설계한다.
  • 비엔지니어 동료들의 비생산적 활동을 인지하고, 이를 줄이기 위한 도구를 빠르게 만들어(e.g., CS 담당자를 위한 유저 데이터 확인용 어드민 개발, 마케팅 담당자를 위한 이미지 업로드용 어드민 개발, 세일즈 담당자를 위한 이벤트 페이지 제작용 노코드 툴 도입) 효율적인 프로세스를 정립한다.

운영 특화 트랙에 필요한 전문성은 책을 읽거나 사이드 프로젝트를 수행하는 정도로는 발전시키기 어렵다. 큰 회사들이 여러 블로그 글을 통해 공개해둔 운영 방식을 읽어보거나, 다른 회사 지인들의 운영 방식/도구/프로세스를 접하는 것도 많은 도움이 되지만 그 외형을 따오기보다는 본인 조직에 맞게 고칠 줄 알아야 한다. 결국 운영 전문성은 대부분 현장에서 얻게 되는데, 일부러 ‘나는 운영 전문성을 키워야지’라고 결심해서 이것저것 공부하기보다는 제품과 조직이 성장함으로써 만나는 문제를 몸으로 해결하면서 ‘필요하니까’ 체득하곤 한다. 예를 들어:

  • 어설프게 만들었던 서비스에 트래픽이 갑자기 폭발해서 생긴 장애에 대응하면서
  • 사람 손으로 때워가며 서비스를 운영하다가 생기는 실수와 잃는 시간을 더이상 감당하기 어려워 자동화하면서
  • 조직 규모가 커지고 스테이크홀더가 많아지며 눈에 띄게 길어진 제품 리드 타임을 줄이기 위해 여러가지 장치와 도구를 도입하면서

내가 아는 운영 특화 엔지니어 중에는 책임감이 높고 눈치가 빠른 사람들이 많다. 서비스가 커지고 조직 규모가 커지면 반드시 어딘가에 빈틈과 비효율이 생기기 마련인데 이들은 그런 빈틈을 기꺼이 메우며 윤활유 역할을 해준다. 이런 Glue Work를 도맡아 하는 분들은 자연스럽게 업무 커버리지가 넓어지며 많은 사람들을 돕게 되는데, 정작 본인이 원래 맡았던 기술적 업무에 쏟을 시간이 부족해져 역량에 깊이를 더하지 못하거나 좋은 성과평가를 받지 못할 위험이 있으니 주의해야 한다. 그래서 운영 특화 엔지니어는 본인이 하는 일의 가치를 인정받고 근본적 개선 및 역량 강화를 위한 시간을 확보받기 위해 관리자에게 셀프 PR을 꾸준히 할 필요가 있다.

운영성 업무를 조직 차원에서 관리하지 못했을 때 생길 수 있는 일

서비스가 너무 빠르게 성장한 조직에서는, 특정 시기에 특정 패턴으로 생기는 이벤트(e.g., 매월 초에 열리는 이벤트 때문에 폭발하는 트래픽 대응)에 대해 책임감 높고 오래 재직한 엔지니어 한두명이 수작업(e.g., 해당 엔지니어의 로컬 PC에 있는 스크립트를 특정 순서로 실행하기)으로 대응하는 식으로 운영하는 걸 종종 본다.

그 시기에 그 엔지니어가 부재하면 서비스 전체가 마비되기에 그는 휴가갈때도 노트북을 챙겨야 한다. 운영 업무에 너무 많은 시간을 쓰기 때문에 그는 근본적인 개선 작업이나 본인의 역량 강화를 하기 어렵다. 결국 번아웃이 온 엔지니어가 회사를 떠난다.

회사는 그의 대체자를 급하게 찾았지만 그의 로컬 스크립트들과 머릿속에만 존재하던 베스트 프랙티스는 완전히 인계받지 못하여 서비스가 삐걱거리기 시작한다.

운영 전문가도 웹 전문가처럼 소규모 스타트업에서는 전문성을 인정받기 어려울지도 모른다. 그러나 조직이 커지고 신규 기능 개발보다는 유지보수 및 운영 업무에 들이는 시간이 많아질수록 운영 특화 엔지니어의 유무가 전체 생산성에 미치는 영향이 커질 것이다. 또한 조직 규모가 작더라도, 그저 운영 업무를 수행하는 수준이 아니라 일을 더 효과적으로 하기 위한 자동화 경험과 프로세스 구축 경험, 다양한 역할의 동료들과 긴밀하게 협업한 경험이 있는 사람이라면 CTO와 같은 중요한 역할을 맡을 수도 있다. 스타트업 초기에는 구성원 한명 한명이 제너럴리스트로서 여러가지 역할을 해야 하는데, 온갖 기술적 업무를 운영 전문가가 커버하며 문제를 해결해줄 수 있기 때문이다.

운영 전문가는 넓은 커버리지와 더불어 기술역량을 꾸준히 높여나가면서, 테크 리드는 물론이고 제품이 다양하고 조직 규모가 큰 회사의 공통 파트를 다루는(대개 ‘플랫폼 팀’이라고 불리는) 곳에서 커리어를 밟을 수 있다. 만약 많은 사람들과 소통하고 영향력을 발휘하여 여러 팀을 변화시키는 쪽에 흥미가 생겼다면 애자일 코치테크니컬 프로그램 매니저 역할로 직무를 전환할 수도 있다. 이 방향에서는 소프트웨어 관리, 조직 관리에 대한 좋은 책들을 읽고 적용해보는 것도 도움이 될 것이다(e.g., Quality Software Management, 테크니컬 리더, 클린 애자일, 매니지먼트 3.0 등).

3. 탁월한 시니어 엔지니어 되기

위와 같이 전문성을 쌓은 사람이 탁월한 시니어 엔지니어로 성장하려면 어떻게 해야 할까? 좋은 시니어의 조건에 대해서는 사람들마다 의견이 갈릴 것이고, 나 또한 아직 미숙한지라 명료하게 정리하기는 어렵다. 간단하게 나는 어떻게 시니어 역할을 맡게 됐는지, 또 내가 만나왔던 훌륭한 시니어 엔지니어들은 어떤 사람이었는지를 토대로 탁월한 시니어 엔지니어가 되기 위한 세 가지 포인트 정도만 뽑아본다.

기본에 충실하고자 노력한다

처음에 언급한 ‘탁월한 엔지니어의 5가지 역량’은 당연히 시니어 엔지니어에게도 똑같이 적용된다. 좋은 코드를 짜고, 작업의 가치를 극대화하고, 데이터에 기반하여 의사결정하고, 동료의 효과적 의사결정을 돕고, 꾸준히 학습하는 걸 지속한다면 좋은 시니어가 될 가능성이 높아진다.

명시적 리더가 아니더라도 리더처럼 행동한다

나는 짧게나마 창업을 해본 다음 직장에 들어가서였는지 NBT에서 1년차 엔지니어였을 때도 스스로 주니어라는 자각이 딱히 없었다. 내가 여길 건드려도 괜찮나, 이렇게 목소리를 높여도 괜찮나 같은 자기검열 없이 빨빨거리며 돌아다녔다. 운좋게도 날 특별히 제지하는 사람이 없는 좋은 문화를 가진 팀이었고, 실제로 구체적인 성과도 몇 차례 있었다 보니(e.g., 팀 내 페어 프로그래밍이 더 잦아지고, Ruby 스타일 가이드를 팀 전체가 더 잘 따르게 되고, 피크타임 기준 주요 API 응답시간이 절반 이하로 낮아짐) 언젠가부터 다들 나를 시니어처럼 취급했다.

리더십은 명시적 리더가 아닐 때도 충분히 발휘할 수 있고, 때론 동료의 모범적 행동 하나가 명시적 리더의 수많은 말보다 더 큰 영향을 끼칠 수 있다. 엔지니어링 레벨을 빡빡하게 평가하는 걸로 유명한 구글에서는, ‘상위 레벨의 역할을 잘 할 것 같은 사람’을 승진시키는 게 아니라 ‘이미 상위 레벨의 역할을 일정 기간 이상 충분히 수행하고 있었던 사람’의 노고를 인정해주는 차원에서 승진시킨다고 한다. 본인에게 주어진 역할과 상관없이 제품에, 팀에, 조직 전체에 긍정적 영향을 미치고자 힘쓰다 보면 어느새 모두로부터 시니어로 인정받으리라 본다.

어떤 상황에서든 큰 임팩트를 낸다

버그가 생겼을 때 주니어는 보통 그 현상만 고치지만 시니어는 다각적으로 문제를 해결한다. 버그의 근본 원인을 파악하고, 비슷한 버그가 다른 곳에 존재하진 않는지 확인하고, 운영환경별로 다르게 적용할 만한 예외 케이스는 없는지 살피고, 다음에 비슷한 버그가 생기기 어렵도록 개발환경을 개선(린터 룰 추가, 테스트 추가, 구조 변경 등)하고, 만약 생기더라도 일찍 인지할 수 있는 장치를 추가한다. 이 모든 걸 혼자 하는 게 아니라 동료들과 의사소통하고 위임하여 함께 해결함으로써 조직 전체의 역량을 높인다.

이렇듯 디버그라는 작은 행위에서도 시니어는 주니어보다 훨씬 큰 영향력을 발휘한다. 사실 조직 내에서 큰 책임의 기회는 자주 오지 않는다. 어쩌다보니 덜컥 막중한 책임을 맡아버렸는데 잘 해내는 사람도 있겠지만, 보통은 작은 일을 맡아도 큰 임팩트를 만드는 사람들이 이후 더 큰 일을 맡는다. 이는 ‘명시적 리더가 아니더라도 리더처럼 행동’하는 것과 비슷하다. 주어진 일을 잘 끝마치는 걸로 만족하지 않고, 전후 맥락을 살피며 여러 사람과 의사소통하여 큰 영향력을 미치는 사람에게는 더 큰 책임과 권한이 주어진다. 이런 사람들은 제품에서든, 팀에서든, 회사에서든 어느 한 파트를 안심하고 맡길 수 있는 시니어로 성장할 것이다.