2009년 7월 9일 목요일

개발자는 코딩만 해야 한다.

제목을 보시고 무슨 말도 안되는 얘기를 하느냐고 생각하시는 분이 대부분일 겁니다.

이러한 생각의 Gap은 소프트웨어를 개발하는데 있어서 개발자의 역할에 대한 인식의 차이에서 비롯합니다.

현실을 보면 개발자라는 이름으로 정의된 소프트웨어 엔지니어들은 대단히 많은 일을 합니다. 

요구사항 분석도 하고, 설계도하고, 코딩도 하고, 테스트도 하고, 빌드도 하고, 팩키징도 하고, 고객지원도 하고, 전화도 받고, 영업도 지원하고, 서비스 회사인 경우에는 실제 운영서버 관리도하고, 장애 해결도 하고, 정말 여러가지 일을 합니다.

이것을 역할로 바꿔보면, Software Analyst, Software Architect, Coder, QA Engineer, Build Engineer, Release Engineer, Technical support engineer, Technical sales engineer, System administrator 등의 서로 다른 역할 들입니다.

이런 일들을 모두 다른 사람이 해야 한다고 하면 배부른 소리하고 있다고 할 겁니다. 물론 그것은 아니죠. 이중에서 개발자가 Coder의 역할만 하는 것은 아니고 몇 가지 역할을 겸해서 할 수는 있습니다. 심지어는 위의 모든 일을 한 명의 개발자가 수행할 수도 있습니다. 하지만 그렇다고 하더라도, 이 각각의 일들은 원래 다른 역할이라는 것을 알아야 합니다. 특히 코딩과 테스트는 한 사람이 동시에 잘 해내기 어려운 조합이기도 합니다. 따라서 여유가 되고 기회가 된다면 적절한 시점에 똑같은 만능개발자를 수평적으로 인원수만 늘릴 것이 아니고, 각각의 역할로 쪼개야 합니다.

그 중에서 개발자(코더)의 역할은 정해진 설계에 따라서 혹은 할당받은 버그에 대하여 소스코드를 수정하고 소스코드관리시스템에 등록하면 끝나는 겁니다. 나머지는 다른 사람들이 할 일이죠. 이것이 지켜지지 않으면 이중에서 비싼 인력인 개발자가 싼 인력이 수행할 수 있는 일들에 치여서 점점 효율성이 떨어지고, 자잘한 사고도 많이 일어납니다. 개발자는 개발이 전문이지, 테스트 전문가도 아니고, 빌드와 릴리즈 전문가는 더욱더 아니라서 코딩 이외의 일들은 잘 해내지도 못합니다. 따라서 조직이 커지고 있다면 적절한 시점에 역할이 분리되지 않으면 커다란 공장에서 수많은 개발자들이 체계적이지 않은 방법으로 인형에 눈깔 붙이듯이 서로 뒤죽박죽 뒤섞여서 일하게 될 수 있습니다. 

지금은 조직이 작아서 개발자가 여러가지 일을 다하더라도 "모드전환스위치"를 가지고 있어서 서로 다른 일을 할 때는 스위치를 잘 해야 합니다. 그리고 언제든지 일을 떼어줄 준비를 하고 있어야 합니다.

개발자 4명보다 개발자 3명과 테스터 1명이 더 효율적입니다.

개발자 30명보다 개발자 20명과 테스터 6명과 빌드/릴리즈 담당자 1명과 3명의 Technical Support 담당자가 있는 것이 더 효율적입니다.

물론 숫자는 절대적인 것이 아니지만, 회사는 계속 커가는데, 구멍가게나 가내수공업식으로 계속하고 싶지 않으면 역할에 분리에 대해서 고민해야 합니다.

댓글 14개:

  1. 확실히 전문적으로해야 한다는 점에서는 맞긴 하지만..
    문제는 회사에서는 슈퍼맨을 원하죠.. 한사람으로 세사람 역활을 하는 그런 것들을 말이죠..

    하지만 개발자가 코딩을 위해서는 저러한 방법론적인 이론들도 알고는 있어야 합니다
    그러면 또 윗사람은 당연히 그것도 해야 하잖아? 라고 하고.. 참.. 악순환이군요..

    답글삭제
  2. 글 내용에서는 개발과 테스팅의 체계적인 분리 필요성을 역설하셨지만, 제목은 그렇지 않네요 ㅋ

    답글삭제
  3. 규현님 블로그의 특징은 글이 띄엄 띄엄 올라오는 대신 그 글들 하나 하나가 좋은 듯....

    답글삭제
  4. 안녕하세요. 하나님
    잘 읽어주시니 감사합니다. 글을 자주 올리려고 하는데, 최근에 많이 바빴습니다. 다시 열심히 포스팅해야죠. ^^

    답글삭제
  5. Zaphod님 안녕하세요.
    일부러 제목은 이상하게 만들어봤습니다. ^^

    답글삭제
  6. 구차니님 안녕하세요.
    저도 여러 슈퍼맨들을 만나 봤습니다. 그들의 대부분은 잡다구리한 것들만 잘하지 진짜 소프트웨어 개발 전문가적인 실력을 가지고 있는 사람은 본적이 없습니다. 가짜 슈퍼맨이죠.
    개발자는 주로 설계, 코딩을 하지만, 그외의 일도 전반적으로 다 잘 알아야죠. 그래야 제대로된 설계를 할 수 있습니다.

    답글삭제
  7. hangum님 안녕하세요.
    반갑습니다.

    답글삭제
  8. 그런데 텍스트큐브 블로거는 티스토리 블로그를 관심 블로그로 설정할 수 없나요? 전 텍큐라서....

    답글삭제
  9. 제가 텍스트큐브는 잘 몰라서요...
    그냥 RSS Feed를 보시면 되지 않을까요?

    답글삭제
  10. 각 개발자별로 1개의 전담분야를 맡아 처리하려면 부서가 최대한 작게 나눠저야 하고(프로젝트를 진행하는) 팀장의 수도 작아야 하죠 ㅎㅎ 안 그러면 팀마다 개발자/DBA/아키텍터.. 등등이 필요로 하게 되니... 네네.. 뭐 일단 현실은 말씀하신 것처럼 개발자가 제안서 작성/해외출장 및 클라이언트 미팅/설계/개발/SQL튜닝/QA/인수인계 문서작성/교육/관리.. 까지 다 하는게 대부분의 중소기업의 현실인듯. 또 그런 멀티 플레이어를 중소기업일수록 선호하는게 사실이구요.

    뭐... 팀원 모두가 유능한 멀티플레이어가 되는 것도 한 가지 방법입니다. :)

    답글삭제
  11. 안녕하세요. 우울한 딱따구리님

    맞습니다. 개발자의 역할은 대단히 많은 분야에 걸처있고, 다 조금씩 할 수 있어야죠. 그런데, 개발자가 100명이 넘는 회사에서 모든 개발자가 다 그렇게 서로 뒤죽박죽되어서 일을 하고 있는 경우도 많습니다. 이런 경우 잘하는 개발자들만 죽어나고, 효율도 떨어지고 성과도 안나오죠. 처음에 멀티플레이어라고 하더라도 Role을 구분해서 일하는 습관을 들여 놓지 않으면 나중에게 거대한 가내수공업 공장이 되어 버린다는 경고입니다.

    답글삭제
  12. 국내개발자는 슈퍼맨이 맞습니다. 워낙 여러가지 일들을 하기를 원해서요. 기본적으로 설계+코딩+테스터는 기본이고 상황에 따라 배포까지 해야하니까요. 그러니 외국에선 싼 가격에 여러가지 일들을 해낼 수 있는 국내 개발자를 선호하는지도 모르겠구요. 외국은 역활 분리가 완벽하게 되어있으니.

    답글삭제
  13. 안녕하세요. 국내개발자님 ^^
    보통은 만능개발자로 시작을 하지만, 조직이 커져갈수록 역할 분리를 해야 하고 미리 준비가 되어 있어야 합니다. 국내에서는 그렇게 하기에는 소프트웨어 개발 문화에 대한 저변 자체가 워낙 낮기 때문입니다.

    답글삭제