2008년 12월 4일 목요일

우리나라에는 전지전능한 슈퍼 개발자가 있다.

여러 소프트웨어 회사를 컨설팅하다보면 아주 많은 개발자들을 만나게 됩니다. 
그 중에는 전지전능한 슈퍼 개발자를 만나게 됩니다.

코딩, 설계, 분석, 테스트, 기획, 고객 전화응대, 고객 지원, 프로젝트 관리, 일반 관리, 아키텍처 등등 엄청나게 많은 일을 하는 개발자들을 보게 됩니다.
이들은 대부분 팀장 쯤 됩니다.

어떻게 생각하시나요? 
바람직해 보입니까?
"나도 그런 전지전능한 개발자야 돼야지"라는 생각이 드십니까?
혹시 지금 이렇게 모든 분야의 일을 다 하고 계시나요?

이것은 One man company 얘기가 아닙니다. 
개발자가 100명이 넘는 회사도 이러한 경우를 여럿 봤습니다.
대부분은 회사가 성장과정에서 적당한 때에 조직을 변화시키지 못하고 그냥 달려온 경우입니다.
이런 경우 전지전능한 개발자가 대부분의 기술과 이슈를 꽤 뚫고 있어서 조직이 그럭저럭 굴러갑니다. (개발자들은 몰라도 사장님은 고민 많으실 겁니다.)
모든 길은 로마로 통하듯 모든 기술적인 이슈도 이 전지전능한 개발자를 통해야 해결됩니다.
이런 개발자가 나가면 회사는 망할 것만 같습니다.

이러한 상황이 정상일까요?

어떤 사람도 서로 완전히 다른 Skill set들을 필요로 하는 일들을 동시에 다 잘 수행해 낸다는 것은 불가능합니다. 아주 작은 회사라면 그렇게 해야지요. 다른 대안이 없으니까요.

이렇게 모든 일을 다하는 전지전능한 개발자는 그 모든 업무를 다 잘 못하고 있다고 봐야 합니다. 그건 애초에 불가능합니다.
이들은 예전에는 뛰어난 개발자였습니다. 하지만, 개발 이외의 일들을 하나씩 떠 맡으면서 각 분야의 일들의 전문성이 점점 떨어지게 됩니다. 그리고 각 일의 Switching cost가 만만치가 않습니다. 이일하다 저일하다하면 그냥 시간이 지나가버리지요. 톰 디마르코는 몰입에는 15분의 시간이 필요하다고 했습니다. 전화한번만 받아도 15분은 그냥 추가로 까먹는거죠.

심지어는 테스트, 고객 전화응대, 고객 지원까지 한다는 것은 100원의 돈을 받으면서 20원짜리 일을 하는 것과 같습니다. 그런 일은 싸게 고용할 수 있는 사람을 시켜야지요. 그리고 기획 같은 일은 전문성이 부족하여 제대로 수행하지도 못합니다. 

결국 이 개발자는 다른 소프트웨어 회사에 가면 별로 가치 없는 개발자가 되고 맙니다. 분야가 달라지면 Domain Knowledge에 의한 경쟁력을 잃고, 개발 실력도 경력에 걸맞지 않게 떨어지고 어느 것 하나 특출난게 없게 됩니다. 관리자로 가야 할까요? 그래서 회사에 꼭 붙어 있으려고 하고, 정치를 하면서 세력을 키우고, 회사의 개혁이나 변화를 반대하고, 골치덩어리 영웅이 되고 맙니다.

회사는 이들에 의존도가 커져서 리스크를 감당할 수 없는 수준에 이르게 됩니다.
이들이 등돌리면 회사는 휘청합니다. 

이것이 개발자 탓일까요? 아니면 회사 탓일까요? 
네, 회사 탓입니다. 회사는 개발자가 실력을 발휘할 수 있도록 여건을 조성해주고 훈련도 시켜줘야죠.
그런데 맨땅에 개발자가 북치고 장구치고 다 하다 보니까, 어쩌다보니 그렇게 된 것이지요.

그럼 어떻게 해야 할까요?

조직이 작을 때부터 나중에 커질 때를 대비해야 합니다.
조직이 커지면 언제든지 분리하기 쉬운 업무부터 띄어낼 수 있도록 말입니다.
이렇게 하려면 갖춰야 할 것이 3가지 있습니다.

이는 "프로세스"와 "기반시스템" 그리고 "문서"입니다.

이 3가지가 있어야 개발 조직이 전문적으로 움직일 수 있습니다.
단 제대로 갖춰야지요. (제대로의 의미는 너무 많이 설명해야 하니 앞으로 계속 올리는 글에서 설명하도록 하죠, 그리고 사실 문서는 프로세스에 포함된 것입니다.)

혼자 일을 하더라도 "스펙"을 작성하고 "설계문서"도 작성하고 "Test Case"도 만들어 놓습니다. 물론 남에게 일을 시키는 것보다는 간소화 할 수 있습니다.
인도에 외주를 줄만큼 자세히 작성하는 것은 낭비죠.
그리고 적절한 개발 프로세스를 만들어서 조직이 커질 때마다 그에 알맞게 계속 발전시켜나가야 합니다.
그리고 "소스코드관리시스템"과 "버그(이슈)관리시스템"은 무조건 제대로 갖추고 있어야 합니다.
이 모든 것은 혼자 소프트웨어 회사를 한다고 해도 갖추고 있어야 합니다.

프로세스, 문서 얘기가 나오니까 오히려 개발이 늦어질 것 같은가요?
혼자 개발을 해도 이것들은 꼭 필요합니다. 개발이 더 빨라지고, 제품의 품질도 올라가죠.

왜?

지금 이해가 가지 않는 분이라면, 여기서 납득을 시켜드릴 수는 없습니다. 
제 책(소프트웨어개발의 모든 것)을 읽어보시거나 저를 찾아오시면 친절하게 설명드리겠습니다.
각설하고..

그렇게 준비가 되고 나면 회사 커지면 직무를 하나씩 전문화시켜야 합니다.
우선 "테스트팀"을 만드십시오. 회사가 작다면 이들이 Technical Support(고객지원)도 병행할 수 있을 겁니다. 
물론 테스트 직무도 전문화를 시키십시오. Random Test가 아닌 제대로 된 절차에 의한 테스트를 할 수 있도록 훈련시켜야 합니다. 그 방법은 제 책을 포함해서 시중에 좋은 책들이 얼마든지 있습니다.

그리고 개발자가 많아지면 관리자를 나누고, 기획, 프로젝트 관리자, 빌드/릴리즈 역할을 나눠 나갈 수 있을 겁니다. 

아직 "프로세스", "기반시스템", "문서", 이런 것들을 갖추고 있지 않은 회사라면은 조직을 어떻게 바꿔도 결국 그 전지전능개발자에게 커뮤니케이션이 다 몰리고 리스크는 여전할 것입니다.

이렇게 회사를 바꾸려면 개발자나 회사나 모두 "성장통"을 감내해야 합니다.
개발자는 현재 자신이 하는 일에만 가치가 있다고 생각하면 안됩니다. 좀더 큰일을 하기 위해서 과감하게 현재의 일을 버리고 자신이 가장 잘하는 일에 집중해서 더욱 가치를 높여야 합니다.
회사는 이 과정에서 임시적을 생산성이 떨어집니다. 이 기간이 짧게는 5,6개월에서 길게는 1년이 갈 수도 있습니다. 부작용을 최소화 하기 위해서 점진적인 변화를 할 수도 있고, 전문가를 영입하여 한번에 바꾸는 방법도 있습니다.

회사 안에 있으면 경영자나 개발자나 이러한 상황을 잘 느끼지 못하는 경우가 많습니다.
개구리를 냄비 안의 찬물에 넣고 서서히 데우면 뜨거워서 견지디 못하는 순간이 될 때까지 잘 느끼지 못하는 것과 같은 거죠.
그냥 익숙해지는 겁니다.
이런 경우 외부의 전문가가 회사를 분석하는 것이 효과적일 때가 많습니다.
궁금하신 내용이 있으면 언제든지 E-mail([email protected])으로 연락주세요. 궁금증을 시원하게 풀어드리지요. 

장문의 글을 읽어주셔서 감사합니다.

댓글 11개:

  1. 마음에 와 닿는 글입니다.
    좋은글 감사합니다^^~

    전지전능한 개발자가 되려면 분배하고 대화하고 교육하는 그런 노하우도 있어야 하겠지요.
    과연 그런 사람이 얼마나 될까요?

    답글삭제
  2. 돌이아빠님 안녕하세요.
    진짜 제대로된 전지전능 개발자면 좋겠죠. 말씀대로 이는 거의 불가능합니다.
    그냥 일만 많이 하는 그런 개발자가 회사의 큰 리스크라는 것이 문제죠.

    답글삭제
  3. 오늘 제가 일하는 곳의 절친한 이사님과 소프트웨어 개발자들의 미래에 대한 이야기를 잠깐 했었습니다. 저 자신도 개발자 출신이라 최근의 급격한 변화가 가져올 소프트웨어 개발자들의 미래에 대해 언제나 큰 관심을 가지고 있기에, 약간은 전문적인 글이라 많은 분들이 보시지는 않겠지만 미래의 소프트웨어 개발에 대한 글을 하나 올려볼까 합니다. 1975년 소프트웨어 개발과 관련하여 전설적인 책이 한권 출간 되었습니다. 프레데릭 브룩스(Frederick Broo..

    답글삭제
  4. 좋은 글이네요. 일정정도 맥이 통하는 글을 쓴 것이 있어서 트랙백 달고 갑니다.

    답글삭제
  5. 전문화된 개발자가 대우 받는 여건이 빨리 형성되었으면 좋겠습니다.

    그리고 정치세력이란 이야기 정말 공감갑니다.
    스트럭쳐(구조)화 하기 좋아하는 경향들이 있어서 그런지 사람 관계도 구조화를 잘 하시는 분들이 많더라구요 ;)

    좋은 글 정말 잘 읽었습니다. ;-)

    답글삭제
  6. 하이컨셉님 안녕하세요.
    작성하신 글은 잘 봤습니다.
    공감이 가는 글이더군요. 앞으로도 좋은 의견 많이 주고 받기를 기대합니다.
    감사합니다. ;)

    답글삭제
  7. jangsungjin님 안녕하세요.
    개발자의 정치라는 것은 결국 제살 깍아먹는 것 아닐까요?
    개발자가 실력이 경쟁력이 되어야지, 정치로 얼마나 오래 살아남을 수 있을까요?
    이런 개발자는 실력도 립서비스밖에 없는 개발자가 되더군요.

    답글삭제
  8. 모든 것을 다 하려는 개발자는 어쩔수 없이 문맥전환 비용을 치러야하겠죠. 그러다보면 결국 업무 효율은 떨어지게 될 테구요. 잘 할 수 있는 일에 집중하는 것이 좋겠습니다.

    트럭 넘버라는 이야기를 어디서 들었는데요. 개발자가 트럭에 치어 일을 못하게 되는 일이 생기게 되면 프로젝트가 정상적으로 굴러갈 수 없는 일이 생기게 되는데요. 이런 사고로 개발자들의 일부가 동시에 업무를 보지 못하게 될 경우, 최대 몇 명 까지는 그래도 감내할 수 있는가 하는 질문에 대한 답이 트럭 넘버더군요.

    한 사람의 달인에게 프로젝트의 성패를 의존하게 되면, 프로젝트 불확실성은 계속 증가하게 되는 것 같습니다. 가급적 모든 사람이 프로젝트에 대해 고르게 잘 알도록 배려하는 것이 중요하겠죠.

    답글삭제
  9. 이병준님 안녕하세요.
    트럭넘버이야기 재미있겠는데요. 블로그에 한번 올려주세요.

    소프트웨어 개발에서 특정인의 의존도를 낮추고 프로세스와 시스템에 의해서 많은 부분을 커버하는 것은 매우 중요합니다. 이것이 소프트웨어 엔지니어링의 중요한 요소이죠.
    그런 환경이어야 프로젝트의 리스크도 줄어들고 개발자에게도 전문적으로 성장할 수 있는 기회를 제공하게 됩니다.

    답글삭제
  10. 좋은 글 감사합니다.
    또 하나의 생각은, 슈퍼 개발자는 회사의 환경만이 그 요소일까.입니다.
    즉, 회사에서 모든 것을 의존하는 것은 본디 그 개발자의
    성향에 의해서도 좌우될 것 같습니다.
    그러기에,
    슈퍼 개발자가 될 성향을 가진 사람들에 대한 정상적 멘토링과
    그들이 지속적으로 관심을 가질 요소들을 찾아서 균형적인
    성장을 할 수 있도록 배려가 필요할텐데...
    그런 방안중 하나로 Ray님의 블로그와 책을 추천하는 것도 좋겠군요
    context switching. 팀장님께 말씀드려봐야겠습니다.
    감사합니다.

    답글삭제
  11. 오리주민님 안녕하세요.
    모든 것이 복합적인 문제라서 하나의 원인만 고를 수는 없는 것 같습니다.
    멘토링 참 중요한 이슈입니다. 아직 활성화가 많이 안되어 있고, 시행하더라도 여건과 준비가 부족하고 형식적인 경우도 많은 것 같습니다.

    답글삭제