리더에 관한 기준이 높은 편이다. 리더는 시야가 넓어야 하고, 조직을 우선해야 하며, 친절해야 하고, 부지런해야 하며, 탁월해야 한다. 아무튼 다 리더 책임이다. 그것이 내 리더에 관한 지론이었다.

그렇게 생각했던 어느 개발자는 2021년 10월, 5인 개발팀 팀장이 된다. 어찌어찌 한 해를 견뎌내고 어느새 2022년 12월의 마지막날이 됐다. 아무튼 다 리더 책임이라 생각했던 어느 개발자는 한 해를 온전히 개발 팀장으로서 보내며 무슨 생각을 했을까.

이 글에서는 스타트업 개발 팀장의 2022년, 1년 회고를 해본다.

2022년 코드에프 API 개발팀

코드에프 API는 2019년 출시된 서비스로 나는 2019년 5월에 세 번째 개발자로 합류했다. API 서비스로 수익을 내고 있지만 이 서비스를 위해서 홈페이지도 필요하고, 개발가이드도 필요하고, 어드민도 필요하고. 운영을 위한 여러 시스템이 필요하다. 코드에프 API팀은 API 서비스와 관련된 모든 기술적 책임을 갖는다.

내가 API팀 개발 팀장이 된 2021년 10월에는 고객에게 제공할 신기능은 물론, 서비스 운영 리소스를 낮추는 운영 시스템을 보완해야 하는 미션이 있었다. 고객이 늘어나도 추가 채용이 필요하지 않을 정도의 든든한 운영 시스템이 필요했다.

당시 API팀은 BE 2인과 FE 2인 그리고 개발 팀장 등 5인으로 구성됐다. 주어진 리소스를 어떻게 할당해야 이 팀을 안정적으로 운영할 수 있을지 고민이 깊어졌다. 내가 아는 모든 지식을 총 동원해서 이 팀을 좋은 팀으로 만들고 싶었다. 그리고 좋은 팀 안에서 팀원들이 좋은 커리어를 이어갔으면 했다. 물론 안정적인 API 서비스는 늘 0순위였다.

군사학에서 전략(Strategy)은 아군의 피해를 최소화하고 적의 피해를 최대화하여 종국에 전쟁을 이기기 위한 계획이고 전술(Tactic)은 그 실행 방법이라고 한다. 나는 전략을 세우고 지피지기하며 전술을 짰다.

전략을 짜라

축구 감독 스타일로 따지자면 나는 다소 엄격한 전술 안에서 높은 조직력으로 원팀을 만드는 전략가 스타일이다. 전략을 짜기 전 가장 먼저 우선돼야 할 것은 ‘목표’를 정하는 것이다. 축구에서 ‘목표’는 ‘골’을 넣는 것이다. 아주 명확하다. 골을 넣기 위해 각 포지션에서는 공격과 수비를 한다. 각 포지션에서 적절한 전술을 수행했을 때 비로소 원팀으로서 골을 만들어낼 수 있다.

때문에 나는 가장 먼저 API팀의 목표를 세웠다.

안정적인 CODEF API 서비스와 효율적인 운영 도구 개발

그리고 이 목표를 API팀 위키인 컨플루언스에 적었다. 이제 API팀은 어떤 판단이 필요할 때 따를 수 있는 목표가 생겼다. 적어도 이 문장으로 선택할 수 있는 문제 앞에서는 API팀 각 구성원은 한 방향으로 정렬(align)된 것이다.

그렇게 우리 개발자는 ‘개발’로서 문제를 해결하며 조직에 기여할 수 있는 전략을 짰다.

CODEF API

업무와 캐릭터를 분석하라

목표를 세워 전략을 짰으니 전략을 실행하기 위한 방법 즉, 전술이 필요했다. 여기서부터는 쉽지 않았다. 전술을 짜기 위해서는 지피지기 즉, 업무와 팀원들의 캐릭터 분석이 필요했다.

먼저 업무다. 코드에프 API는 상용 서비스로 365일 24시간 운영돼야 했다. 스크래핑 기반 API 특성상 스크래핑 대상기관이 장애일 경우 API 역시 장애일 수밖에 없었고 간헐적으로 API 시스템 장애가 발생하기도 했다. 이때 고객은 당연히 문제 해결을 요구한다.

사업팀에서 많은 대응을 해주고 있지만, API 상품 특성상 기술적 답변이 필요할 때가 많다. 이때는 개발팀에서 대응이 필요했다. 채널이 정말 많았다. API팀에서 요청하는 홈페이지 Q&A 게시판은 물론 이메일, 유선 등 다양한 채널로 고객 문의가 도착했다. 고객이 늘어날수록 업무시간에는 정신이 없었다.

당시 5인 개발팀에서는 고객사와 원활히 유선 대응을 할 수 있는 사람이 나와 팀원 1명 등 총 2인 정도였다. 또한 BE 개발자가 나를 포함해 3인 뿐이니 API에 장애가 생겼을 때 휴가자가 있거나 회의가 있다면 여러 서비스 장애를 동시에 분석하기엔 쉽지 않았다.

그렇다고 FE 영역의 업무가 쉬운 것도 아니었다. 상용 웹서비스가 3개에 내부에서 관리하는 서비스까지 합하면 FE 역시 2인으로 운영하기 빠듯했다. 게다가 별도 퍼블리셔가 없는 상황이니 FE 개발자도 물리적 시간이 늘 부족했다.

정말 문제는 업무 외 시간이었다. 코드에프 API 서비스를 활용해 고객사는 서비스를 만든다. 때문에 API는 365일 24시간 운영돼야 했다. 그리고 업무 외 시간에는 당연히 이는 팀장의 몫이 됐다.

코드에프 API 상품은 400개에 달한다. 수십개 웹사이트를 스크래핑 해 데이터를 제공하는데 종종 스크래핑 대상기관 사이트에서 별도 공지 없이 서버 작업을 진행할 때가 있다. 그리고 이는 보통 업무 외 시간에 이뤄진다. 때로는 밤 12시에 때로는 새벽 시간에 이뤄지는 간헐적인 서버작업으로 인한 장애 알림은 서비스 책임자로서 결코 놓쳐선 안 되는 알림이다.

서비스 장애를 대응하기 시작하면서 나는 불면증이 생기고 소음에 관한 강한 스트레스가 생겼다. 원래도 예민한 캐릭터인데 약간의 거슬리는 소리만 나도 스트레스가 올라왔다. 지금은 많이 괜찮아졌지만 윗집에서 쿵쿵대는 소음이 너무도 크게 들려 퇴근 후 생활에서도 정말 힘들었었다. 밤 11시, 12시는 물론 새벽 3시, 4시에도 장애 대응을 했다. 이쯤되니 모든 게 스트레스였다.

당연히 혼자서 해결하긴 벅찼다. 당시 팀장에서 부서장이 된 전임 팀장님이 내가 알림을 놓칠 때면 도움을 줬던 적이 많다. 리더에 관한 기준이 높으면 뭐하는가. 결국 내 역할을 하지 못하고 있다는 생각에 하루에도 몇 번씩 속으로 울컥했다. 결국 나도 현실과 타협해야 하는가 하는 질문 앞에서 수차례 무릎을 꿇을뻔 했다.

늘 온라인으로서 대응해야 하는 업무. 그리고 제한적인 리소스는 팀장으로서 큰 벽을 느끼기에 충분했다. 그럼에도 우리가 이 상황을 극복하고 2022년을 견뎌낼 수 있었던 것에는 역시 우리 팀원들 덕분이라 할 수 있겠다.

당시 나를 제외한 4인은 BE 2명과 FE 2명으로 이뤄졌다.

BE 2인은 모두 코드에프에 신입사원으로 입사해 계속 일한 캐릭터로 각 7년과 3년 경험이 있었다. FE 2인은 모두 내가 채용에 참여한 캐릭터로 BE 경력이 있는 FE와 퍼블리셔 경력이 있는 FE였다.

나는 API 업무를 파악함과 동시에 팀원 4명의 캐릭터를 분석했고 “안정적인 CODEF API 서비스와 효율적인 운영 도구 개발”을 위한 전술을 짜기 시작했다.

팀원은 소중하다

전술을 짜라

축구에서는 전술이 발동되는 ‘트리거(trigger)’라는 게 있다. 예를 들면 중원에서 미드필더가 공을 잡으면 오른쪽 공격수 앞으로 롱킥을 해라. 골키퍼가 골킥을 하면 움직이지 말고 각자 맡은 위치를 지켜라. 상대 프리키커가 킥을 하려는 순간 수비수는 라인을 올려라.

각 전술은 철저히 훈련되고 발동되는 시점. 즉, 트리거가 존재한다. 각 상황에서 발동되는 트리거가 존재하며 이 트리거가 충분히 훈련이 돼 있다면 정제된 업무를 일관성있게 처리할 수 있다. 이때 가장 먼저 필요한 것이 바로 ‘정제된 업무’다.

나는 2019년 코드에프 API 출시 이후 API팀에서 이뤄지는 모든 업무를 했다. BE, FE 개발은 물론 운영과 고객대응, 고객사 기술 지원, 다양한 장애 대응 등 API 팀에서 발생할 수 있는 업무는 전사에서 가장 많은 경험치를 가지고 있다. 때문에 어떤 일이 발생하든 충분한 시간만 주어지면 문제를 해결할 수 있다.

먼저 업무를 개발과 운영으로 나누고 개발은 업무를 할 수 있는 환경을 만드는데만 집중했다. 예를들면 기술 요건을 정리하고, 타팀과 일정을 조율하고, 회의에 참여하는 등 개발이 아닌 개발 환경을 만드는데 내 리소스를 할애했다. 이렇게 하면 팀원들은 ‘개발’에 좀 더 집중할 수 있었다.

운영 측면에서는 운영 업무를 ‘정제’하는데 집중했다. 예를들면 에러코드에 따라 어떻게 답변을 하는지. 어느 팀에 문의를 해야 하는지. 언제까지 답변해야 하는지. 등 반복적인 작업은 메뉴얼을 만들어 팀원들이 수행할 수 있도록 했다. 최대한 많은 업무를 정제하려 노력했고, 정제되기 어려운 간헐적 업무는 내가 처리했다.

그렇게 신규 팀을 만들던 중 회사 자금사정이 나아지고, 업무가 늘어나는 등 물리적 한계가 생겨났다. API팀은 더 양한 업무를 해야 했다. 이에 경영진은 API팀을 부서로 격상시키며 개발자를 충원하도록 했다. 그렇게 API팀은 개발1부로. 나는 팀장에서 부서장이 됐다.

세용에서 세옹이 됐다.

이적시장

축구에서 이적시장은 어쩌면 가장 기대되는 시기다. 팀의 부족했던 부분을 보완하며 새로운 목표에 다가갈 수 있는 흥분되는 시기다. 그리고 코드에프 개발1부의 이적시장은 대한민국 개발자 몸값이 가장 비싸던 2022년 초에 열렸다.

내 채용 철학은 명확했다.

현 API팀의 분위기에 어울리며 현 API팀의 부족한 능력치를 보완해줄 수 있는 개발자

앞서 말했듯 나는 원팀을 추구한다. 모두가 한 방향으로 달려가야 하며 각자의 노력이 우리의 목표에 기여하고 있다는 생각이 들어야 한다. 때문에 나는 캐릭터를 유심히 지켜봤고 API 업무에 적절한 능력치를 가지고 있는지 분석했다.

정말이지 개발자를 채용하기 너무 힘들었다. 채용 플랫폼에 유료 광고를 올리고 헤드헌터도 사용했다. 경영지원실에서도 많은 도움을 줬지만 일단 지원 자체가 너무 적었다. 채용 플랫폼에서 훑어본 이력서만 수천 개가 넘는다. 연락을 주고 받은 건 수백명, 인터뷰도 백단위에 달했다.

당시 코드에프는 개발자 수십명을 채용하며 개발부서를 3개로 나누고 이를 CTO가 관리했다. API팀은 개발1부가 됐는데 마이데이터 사업을 하는 개발3부와 스킬셋이 비슷했다. 때문에 나는 개발1부는 물론 개발3부 인터뷰에도 참여했고 2022년에 개발자 수십명을 채용하는 인터뷰에 대부분 참여했다.

이는 굉장한 경험이었다. 시장에 어떤 개발자가 있고, 어떤 개발자가 우리에게 관심을 보이며, 어떤 개발자가 실제 우리 회사에 와서 일하고 있는지. 이 모든 과정에 참여하는 건 2022년에 내가 결코 포기할 수 없었던 경험이다. 이 과정에서 우리 회사의 부족한 점을 보기도 했고, 몇몇 부분은 경영진에게 강력하게 건의했다.

그렇게 전직원 연봉 500만 원 인상에 기여했다.

데이터중개플랫폼 기업 코드에프, 임직원 연봉 500만원 인상

개발1부는 코드에프 이적시장에서 몸집을 두 배로 늘렸다. 5명이었던 개발팀은 이제 10명 개발부서가 됐다. 이제 우리는 일을 더 많이 해야 했고, 더 많은 성과를 내야 했다.

리더에 관한 기준이 높은 편이다. 인원이 두 배가 됐는데 결과가 두 배가 안 되는 건 리더 책임이다. 나는 개발 부서장으로서 API 업무 외에도 부서원의 성장과 만족도 그리고 조직의 목표에도 신경을 써야 했다. 역할에 최선을 다하려는 부서원이 조직의 목표에서 벗어나는 업무를 한다면 역시 리더 탓이다.

“한 사람이 온다는 건 실은 어마어마한 일”이라고 한다. 업무는 변하지 않았는데 사람이 늘어나 생기는 새로운 일들을 푸는 건 쉽지 않았다. 예를 들면 이전에는 문제가 생기면 바로 해결하고 반영했지만, 관리하는 서비스가 늘어나니 모든 것을 당장 처리할 수 없게 됐다. 이때마다 어떤 판단이 필요한데 이 판단을 언제나 부서장만 해서는 적절한 조직 구조라 생각되지 않았다.

결국 5인 개발팀 시절 적절했던 구조는 10명이 되며 새로운 혼란을 가져왔다. 10명을 위한 새 판을 짤 시기가 된 것이다.

새 판을 짜라

상용 API 서비스와 이를 구성하는 몇 가지 스프링 프로젝트. API 서비스를 위한 웹서비스와 이를 운영하기 위한 웹서비스. 이를 구성하는 몇 가지 스프링 프로젝트와 몇 가지 Vue 프로젝트. 이제는 100명에 달하는 코드에프 내 여기저기서 도착하는 요청. 그 요청이 처리되는지 되묻는 채팅과 돌아오지 않는 메아리. 새로운 규모에서의 협업은 또 다른 일이었다.

나는 점점 늘어나는 조직 구성에 우려를 표하며 몇몇 리더를 소집했다. 이 모임은 협업TF가 됐다. 협업TF는 기존 ‘노션’에서 ‘아사나’로 ‘카카오워크’에서 ‘슬랙’으로 협업 시스템을 변환하는 작업을 진행했다. 그렇게 전사 협업 시스템을 재구축하고 협업TF는 공식 조직인 ‘협업위원회’가 돼 코드에프 협업을 개선하고 있다. 이 이야기는 기회가 되면 다른 글에서 자세히 풀어보겠다.

전사 협업 시스템을 재구축하는데 참여했지만 개발1부 내 협업은 개발1부에서 해결해야 했다. 앞서 5인 개발팀일 때 세팅했던 전략은 변하지 않았다. 하지만 5인이 10명이 되며 전략을 실행하는 방법 즉, 전술은 달라져야 했다.

나는 팀은 1개로 두되 파트를 3개로 나눴다. 현재 개발1부는 부서장 1인과 팀장 1인 그리고 BE1, BE2, FE 등 3개 파트로 구성 돼 있다. 부서장과 팀장은 개발 외 운영 등 다른 업무를 더 많이 하지만 굳이 따지자면 BE 7명과 FE 3명으로 구성 돼 있다.

팀 초기에 정리한 업무 덩어리는 대부분 그대로 두되 관리 주체를 각 파트에 할당했다. 이제 주체가 명확한 업무는 각 파트장에게 주체가 명확하지 않은 업무는 팀장에게 할당한다. 그리고 부서장은 타 팀과 부서 등 대외 채널로서 개발1부에 할당되는 업무의 진행 여부와 일정 등을 조율한다.

가장 스트레스를 받았던 업무 외 시간 장애 대응은 여전히 부서장으로서 참여하고 있지만 팀장과 각 파트장이 함께 대응한다. 그리고 업무 내 시간에는 굳이 부서장이 없어도 팀 내에서 대응할 수 있도록 됐다. 이게 내가 스트레스가 크게 줄어든 이유다.

CODEF API 개발가이드 리뉴얼

또 다른 이유는 2022년, 우리는 놀지 않았다. 굉장히 다양한 반복 업무를 개선했고 직접 DB에 작업하던 업무를 웹서비스 UI로 컨트롤할 수 있도록 개발했다. 덕분에 생산성이 굉장히 대폭 개선됐다. 아마 앞으로 입사하는 개발자는 2022년 우리의 고생을 느끼지 못할 수도 있다. 한편으로는 이런 환경을 만들었다는 것에 강한 자부심을 느낀다.

코드에프 개발1부는 5명일때와 같이 10명이 된 지금도 원팀으로 일하고 있다. 한해 동안 글에 적지 않은 정말 많은 일이 있었지만 여전히 우리가 원팀으로 일할 수 있는 것에는 내가 리더로서 포기하지 않은 한 가지 때문이라 생각한다.

리더로서 포기하지 않았던 한 가지

리더에 관한 기준이 높은 편이다. 때문에 리더가 되면 하고 싶었던 게 참 많다. 이에 따른 의욕도 충분한 편이었다. 덕분에 정말 다양한 도전을 했고 도전에 관한 훈장으로 다양한 실패를 받았다.

가장 기억에 남는 실패는 팀 내 학습 발표다. 커리어를 이어오며 조직 기여도와는 다르게 평가를 받는 사람을 보기도 했고, 시간이 흐르니 노력과 다른 결과를 받아본 사람을 보기도 했다. 분명한 것은 조직에서 열심히 일한다고 해서 꼭 좋은 평가와 좋은 결과를 받아보는 건 아니란 것이다.

나는 나와 함께하는 동료들이 잘할 수 있는 환경을 만들어주고 좋은 평가와 좋은 결과를 받을 수 있도록 돕고 싶었다. 그게 리더의 역할이라 생각했다.

그래서 분기마다 학습 발표를 강행했다. 모두가 분기마다 학습을 하고 정리해 발표를 하도록 했다. 올해 마지막 학습 발표날 나를 비롯한 대부분의 팀원들이 준비를 하지 않았고 전날 밤을 새워 준비한 팀원들이 불만을 토로했다. 내가 준비하지 않은 잘못은 물론 학습 발표라는 방법 자체가 실패한 것을 인정해야 했다.

좋은 의도가 늘 좋은 결과로 이어지지 않는다는 것은 안다. 하지만 이 상황을 마주했을 땐 감정적으로 다소 힘들었다. 하지만 중요한 것은 팀이지 내 고집이 아니다. 나는 그날 학습 발표를 없앴다.

이처럼 내가 상상했던 좋은 미래를 지금 동료들과 함께 도전했다. 하지만 학습 발표와 마찬가지로 여러 실패를 마주했다. 그럼에도 내가 리더로서 포기하지 않았던 한 가지는 팀원들이 언제든 리더와 이야기할 수 있는 창구를 열어둔 것이다.

첫째로는 정기적인 일대일 인터뷰다. 리더는 늘 바쁘다. 때문에 리더는 바쁘지 않도록 노력해야 한다. 업무 외 시간에 장애 대응을 하고 늘 온라인 상태로 있을 정도로 바쁜 한해였다. 하지만 나는 매달 팀원 모두와 일대일 인터뷰 하는 것을 단 한 번도 빼먹지 않았다.

일대일 인터뷰는 짧게는 10분에서 많게는 1시간이 넘도록 이어진다. 평소에 많은 대화를 하는 팀원은 1분만에 끝나기도 했다. 평소에 하고 싶은 말을 다 해서 딱히 할 말이 없다는 게 이유였다. 그러니 가서 일을 하는 게 낫겠다고 하더라.

평소에 하고 싶은 말을 다 해서 딱히 할 말이 없다니. 이 얼마나 바람직한 상황인가. 그럼에도 나는 정기적인 일대일 인터뷰 자리를 만든다. 혹 불편해서 이번 달에는 말하지 못하더라도 다음 달에는 꼭 말할 수 있도록. 혹 불편해서 먼저 ‘이야기 좀 합시다’라고 말하지 못하더라도 정기적으로 말할 수 있는 시간이 있다는 건 팀원에게 안정감을 줄 수 있다고 믿는다.

둘째로는 비정기적인 일대일 인터뷰다. 일을 하다 보면 늘 문제가 생긴다. 이 문제를 늘 지켜보다가 힘들어하는 팀원이 있으면 먼저 문제를 해결해준다. 이렇게 하기 위해서는 팀원을 비롯해 다른 부서의 동료들로부터 늘 정보를 수집하는 노력이 필요하다. 어딘가에서 들려온 이야기를 놓치지 않고 해결해주는 것이다.

문제를 없앨 수는 없다. 그렇다면 어떤 문제든 해결할 수 있는 방법이 있으면 된다. 그럼 문제는 두렵지 않다.

대화가 대부분의 문제를 해결할 수 있다고 믿는 사람들이 있다. 그리고 개발1부는 대화로 대부분의 문제를 해결할 수 있는 사람이 모였다. 때문에 우리는 대화 창구가 열려있다면 대부분의 문제를 해결할 수 있다.

내가 해결 못하면 대표님들이 해결해줄거다

마무리

2022년 12월의 마지막날 카페에 앉아 조직을 돌아봤다. 정말 많은 생각이 떠올랐지만 다듬고 또 다듬어 이정도만 적었다. 우리 개발1부 생각이라면 카페에 가만히 앉아 하루 종일 할 자신이 있다.

좋은 이야기만 적었지만 힘든 일도 참 많았다. 어느 조직처럼 갈등도 있었고 여전히 해결되지 않은 세세한 문제도 많이 있다. 그 문제들을 떠올리며 과연 그때로 돌아가면 어떤 선택을 할까 생각에 잠기기도 했다. 아마 지금 기억을 가지고 1월로 돌아간다면 조금은 더 잘할 수 있을거라 생각한다.

하지만 1월로 돌아간다 해도 언제나 똑같은 선택을 하고 싶은 게 있다. 우리 개발1부 10명. 나는 다시 2022년 1월로 돌아간다 해도 지금 10명을 그대로 채용할 것이다. 우리가 가진 능력치가 부족해 풀지 못하는 문제도 있고, 우리가 가진 캐릭터가 갖는 한계도 있다. 늘 우리를 생각하는 내가 그걸 모를리 없다. 그래도 나는 우리 10명을 선택할 것이다.

리더에 관한 기준이 높은 편이다. 우리로서 부족하다면 그건 리더 탓이다.

아마 우리는 내년에 더 성장할 것이다. 성장할 수 있는 사람들과 성장할 수 있는 환경을 만들었으니 성장하지 못할리 없다.

2022년, 나는 리더로서 잘 살았는지는 모르겠다. 그래도 개발1부 여러분은 참 잘 했다고. 그래도 우리와 함께했던 2022년은 결코 바꾸고 싶지 않은 한 해였다고. 말하며. 스타트업 개발 팀장의 2022년 회고를 마친다.