관리 메뉴

밤 늦게까지 여는 카페

백엔드팀 팀장 1년 회고 본문

lifehacking/Retrospect

백엔드팀 팀장 1년 회고

Jㅐ둥이 2022. 9. 17. 16:53
반응형

백엔드팀에서 팀장을 맡게 된 지 벌써 1년이 되었습니다. 팀장의 시야에서 바라보며 서비스의 개발과 운영에 대해서 많은 것을 배우고 공부할 수 있었습니다. 부족하기만 했던 저를 믿고 팀장이라는 자리를 맡겨줬던 동료분들에게 감사를 전하고 싶습니다. 동시에 기대에 부응하지 못했기에 죄송한 마음도 가득합니다.

1. 무책임한 개발자

2, 3년 전만 해도 밤을 새워가며 코드를 작성하고 또 작성하며 "무책임한 개발"에만 정신이 팔려있었습니다. 내가 작성한 코드가 실제로 배포되어서 로봇의 동작에 영향을 주고, 회사의 전체적인 생산성에 기여한다는 생각에 앞뒤 안 가리고 개발에 몸을 던졌던 것 같습니다.

서버에 필요한 기능은 많았고, 저는 코드를 빠르게, 이곳저곳 작성할 수 있었습니다(당장 무언가 해냈다는 자기 만족감에 사로잡혀 무책임한 코드를 생산했던 것 같습니다). 다행이었던 점은 그 당시 회사 상황에서 제 능력이 큰 도움이 되었기에 좋은 평가를 받았다는 것입니다. 문제는 제가 시간이 지나도 무책임한 개발자에서 벗어나지 못했다는 것에 있습니다.

몇몇 기능들은 개발되었지만 제대로 공유되지 않고 저만 알고 있는 경우도 많았습니다. 내용이 정리된 문서도 없고, 코드도 이해하기 어려워 팀 내부적으로도 관리가 어려운 기능도 있었습니다. 기능이 제대로 관리되지 않다 보니 서비스의 운영도 삐걱대기 시작했습니다.

서버에 추가된 기능들은 내부 로직도 복잡하고, 직접 API 요청을 보내야 해서 검수하기 어려웠습니다. 여기에 더해 사내 서비스들과의 버전 호환성도 제대로 관리되지 않았습니다. 그 외에도 많은 실수가 있었지만 결과적으로 "서버는 안정적이지 않다"는 생각을 조직에 심어버렸고, 서비스의 업데이트 주기가 매우 길어져버렸습니다.

  • 이 문제들을 팀 내부적으로 해결할 수 없다고 판단하고, 넘겨버린 것이 가장 큰 실수였습니다. 팀 내부적으로 관리할 수 있는 만큼은 최대한 관리해야 했습니다.
  • 하드웨어처럼 실제로 업데이트가 어렵지도 않은데 업데이트 주기가 길어져버린 서비스의 슬픔을 아십니까?

2. 너무나 커져버린 문제

내부 코드는 복잡하고, 복잡한 코드를 작성한 당사자는 팀장이 되었습니다. 당연히 팀의 생산성은 낮아질 수밖에 없었습니다. 리팩토링과 서비스 개발과 운영에 필요한 문서 관리에 대한 필요성을 너무 늦게 깨달아버렸습니다. 고객사의 신규 기능 개발 요청과 기존 대응으로 팀의 생산성이 낮아질 대로 낮아진 순간이 되어서야 깨달아버린 것입니다.

서버가 서비스의 성장을 가로막고 있다는 생각이 들기 시작했고, 이 문제들이 조속히 해결되지 않으면 서비스의 성장이 불가능할 것이라는 두려움이 머릿속에 가득 찼습니다. 과거에 저질렀던 실수들이 지금의 문제들로 이어지고, 해결하기 위한 시간과 인력이 부족한 상황을 어떻게 풀어가야 할지 막막했습니다.

3. 좋은 팀장

팀원분들과 실장님, 본부장님께 문제를 설명드리고 얘기를 나눠볼수록 제가 팀장에 적합하지 않다는 생각이 들었습니다. 저는 팀장이라는 역할도 제 내키는 대로 수행했습니다. 막연하게 "팀원들이 좋아하는 일을 하면 되겠지!"라고 생각했습니다. 무엇이 팀에 도움 되는 일인지 깊게 생각하지 않았던 것이죠. 좋건 싫건 팀장은 팀의 방향성과 성장에 큰 영향을 끼치게 됩니다. 저는 준비되지 않은 팀장이었고, 좋은 영향력을 끼치지 못했습니다.

그렇다면 팀과 회사에 도움이 되는 좋은 팀장은 어떤 팀장일까요? 2008년부터 진행된 구글의 Oxygen 프로젝트에서 어느 정도 답을 찾을 수 있었습니다. 연구의 내용을 요약하면 다음과 같습니다.

좋은 팀장이 보여주는 행동

1. 좋은 코치이다.
2. 팀원들에게 충분한 권한을 부여한다(마이크로 매니징 하지 않는다).
3. 팀원들의 성공과 건강을 장려하는 환경을 구성한다.
4. 생산적이고 결과 중심적이다.
5. 소통 능력이 뛰어나다(경청하고 정보 공유를 잘한다).
6. 팀원들의 경력 발전과 업무 능력 향상을 지원한다.
7. 확실한 팀의 방향성을 가지고 있다.
8. 팀원들에게 조언을 줄 수 있을 만큼의 기술적 숙련도를 가지고 있다.
9. 여러 팀들과의 협업을 능숙하게 해낸다.
10. 강력한 의사 결정자이다.

참고: https://rework.withgoogle.com/guides/managers-identify-what-makes-a-great-manager/steps/learn-about-googles-manager-research/
  • 굵은 글씨로 표시된 능력들이 저에게는 부족한 것 같습니다

문화 차이와 조직의 생태를 고려하더라도 저에게 부족한 점은 너무 많았습니다. 앞으로 팀장을 얼마나 더 맡게 될지는 모르겠지만 팀장으로 있는 동안은 부족한 점들을 채우기 위해 노력할 것입니다.

4. 팀장에게 필요한 능력

4.1. 문제 식별 능력

팀장은 팀원들보다 다양한 정보를 접할 수 있는 자리라서 팀 내부적으로 숨어있는 문제를 먼저 발견할 수 있어야 합니다.

그리고 이를 팀 내부 혹은 조직적으로 공론화시켜서 의견을 모으고 좋은 방향을 제시하는 책임을 다할 수 있어야 합니다.

  • 고객의 요구사항을 끌어내듯 팀원들이 속으로만 품고 있는 문제점들을 끌어낼 수 있어야 합니다.

 

4.2. 문제 해결에 대한 강인한 의지

또한, 문제를 해결할 수 있는 모든 방법을 찾아야 하고, 실행할 수 있어야 합니다.

제 상황을 예시로 들면, 생산성이 떨어지는 이유를 "코드가 복잡하다, 개발 인력이 부족하다"로 끝내지 않고 어떻게 하면 복잡한 코드를 개선할 수 있을지 팀 내외부적으로 소통하며 문제의 해결책을 찾았어야 했습니다.

프로젝트의 기한이 다 되어갈 때 즈음에야 개발팀으로 전달되는 이유, 인력을 보충하기 어려운 이유 등 개발 외의 여러 문제들을 해결하고자 노력해야 했습니다.

  • 개발팀이라고 "개발"에서만 해결책을 찾으면 안됩니다.

 

4.3. 결단력과 설득력

팀의 방향성과 우선 순위를 결정할 수 있어야 합니다.

위에서 언급했던 정보의 불균형성으로 인해 팀원들과 다른 조직원들은 파악하지 못하는 문제점들을 팀장 혼자 알고 있을 수 있습니다. 각 문제들의 우선 순위를 정하고 조직적으로 문제를 해결할 수 있도록 설득해야 하는 책임도 따르게 됩니다.

  • 자료를 준비하고 1차적으로 해결책을 고민하는 등 일을 추진시킬 수 있는 촉매가 되어야 합니다.

 

반응형