오랫 동안 개발팀을 운영해오면서 "어떻게 하면, 각 개발자가 자신의 역량을 100% 발휘할 수 있을까?" 하는 고민에 자주 빠지곤 했었다. 그런 고민 끝에 우선 몇 가지 원초적인 질문을 하게 되었다.
- 개발이란 무엇인가?
- 개발자란 무엇인가?
- 개발자에는 어떠한 분류가 있을 수 있을까?
- 무엇이 개발을 어렵게 하는가?
오늘은 그러한 원초적인 질문 중에서 개발자를 분류하는 방법에 대해서 답해보고자 한다. 그리고, 그 중에서도 필자가 제일 중요하다고 생각하는 추상화 래밸에 따른 분류를 살펴보자.
여러 개발자들을 만나다 보면 센스가 넘치는 개발자들이 있었다. 무엇이든 빨리 이해하고, 성장도 빠르다. 하지만, 센스가 좋다고 해서 기술적 기량이 뛰어난 경우는 사실 드물었던 것 같다. 프로그래밍의 기량은 오랜 기간 숙성이되어야 하는 요인들이 많다. 설령 양쪽 모두 잘한다고 해도, 분석/설계와 코딩을 동시에 진행하면 스스로의 역량의 30%도 발휘 못하게 된다.
어떤 일이든 한 번에 두 가지 업무를 하게 되면
능력이 "50% + 50%"가 아닌 "15%+15%"로 떨어지게 된다.
반대로 전체 그림을 시각화하는 능력을 떨어져도 주어진 임무를 말끔하게 끝내는 능력이 탁월한 경우도 있다. 이들은 반복적인 일에도 비교적 잘 적응하는 편이다. 소위 "맨 땅 위에 해딩"을 주저하지 않고, 수 많은 기술 사항들을 꿰차고 있다. 알고리즘 이해 및 개발 또는 문제해결 과정 자체를 즐기는 타입들이다.
불행히,
아직 추상화 래밸을 정확하게 측정하는 방법을 못 찾았다.
앞으로도 영원히 못 찾을 것이다.
다만, 본인은
"
Job Flow"를 토대로 주어진 과제에 대해서 설명하는 능력에 따라서 측정하고 있다.
일단 개발자들에게 자신의 포지션을 배정하는 기준은 아래와 같이 정했다. 더 세밀하게 분류하고 싶지만, 사실 아래처럼 분류될 정도로 규모 있는 팀을 맡아 본 적이 없다. 아래에서 기량은 프로그래밍 능력 수치를 의미한다.
- 업무분석 (추상화=상, 기량=하)
- 시스템 분석 (추상화=상, 기량=중)
- 시스템 설계 (추상화=상, 기량=중)
- 유저인터페이스 설계 (추상화=상, 기량=하, 감각=상)
- 인터페이스 계층 개발 (추상화=중, 기량=중)
- 구현계층 개발 (추상화=하, 기량=하)
- 유저인터페이스 개발 (추상화=하, 기량=하)
- 코어 개발자 (추상화=하, 기량=상)
- 기술적 기량은 아주 뛰어나지만, 다른 사람과 섞여서 일하지 못한다.
- 커뮤니케이션 능력이 다른 이들에 비해 떨어진다.
- 무엇인가 재미있는 일에 능하지만, 마무리 과정에서 능력이 떨어진다.
- 모든 면에서 뛰어나지만, 기량이 너무 뛰어나서 코어의 품질을 위해 집중할 필요가 있다.
소규모 개발회사에서 추상화 능력이 뛰어나면서 기량도 갖춘 한 명의 리더와 인터페이스 계층을 개발하고 유지/보수할 수 있는 기량을 갖춘 다른 한 명의 개발자와 그 외 다수의 일반 개발자만 갖출 수 있다면 엄청난 행운이 아닐 수 없다.
결국, 가진 자원을 토대로 가장 효율적인 배치와 훈련을 통해서 성장해 나가는 수 밖에 없다. 하지만, 현실은 언제나 주먹구구식으로 개발자 한 명이 여러 가지 업무를 종횡무진하는 경우가 많다. 마치, 동네축구에서는 공만 쫓아다니기 때문에 포지션이 애초에 의미 없는 것과 마찬가지다.
그리고, 개발자 개개인들의 대다수는 자신이 "어떠한 것을 잘하는 지" 때로는 "어떤 것을 하고 싶은지"조차 모르는 경우가 많다. 개발자의 성향과 능력을 정확하게 평가할 수 있는 기준을 마련해야 한다. 필자에게 있어 이것은 끝없는 숙제가 될 것 같다.
여하튼, 결론적으로 필자는 "추상화 능력"과 "개발 능력" 두 가지의 큰 요인을 토대로 업무를 배정하는 것을 원칙으로 삼는다. 유저인터페이스 설계의 경우에는 "감각" 요소를 추가로 고려한다.