소프트웨어 프로젝트가 실패하는 이유에는 수많은 원인들이 있다. 가장 고전적인 원인을 꼽는다면 ‘잘못 결정된 프로젝트 기간과 비용’일 것이다. 또는 요구사항을 제대로 파악하지 않았거나 빈번하게 수정했기 때문일 수도 있고, 주요 이해관계자의 참여 또는 경영층의 지원이 부족했거나, 제대로 된 프로젝트 계획을 작성하지 않았기 때문일 수도 있다. 그것도 아니면 프로젝트 또는 조직 내부의 정치적인 문제 때문일 수도 있다.

어떤 최악의 프로젝트에서는, 그 모든 요인들이 결합해서 나쁜 시너지를 만들어내고 그 결과로 참담한 상황을 맞이하기도 한다. 프로젝트에 나쁜 영향을 미치는 모든 요인들에 대해 살펴보려면 엄청난 지면이 필요할 것이다.

이번 컬럼에서는 가장 중요한 실패 원인 중 하나이지만 잘 거론되지 않는 사실을 하나 소개해 보겠다. 그것은 바로 프로젝트 매니저, 아키텍트의 역할을 혼동한 나머지, 잘못한 책임을 부여하는 것이다. 즉 관리 책임과 기술 책임을 구분하지 않는 문제인데, 가장 중요한 인적자원에 오류가 있는 것이어서 프로젝트의 근본적인 실패 원인으로 작용하게 된다.

현재의 상황을 살펴보자. 먼저, 지금 당장 아무 구인구직 사이트든 가서 확인해보라. 다음과 같은 글을 쉽게 만날 수 있을 것이다.

[PM 모집: 자격 요건은 다음과 같음]
C/C++, Java, DBMS를 능란하게 구사 가능해야 함
UML 등을 활용한 설계 능력이 뛰어나야 함
고객과의 원활한 의사소통 및 협상이 가능해야 함
교육 및 프레젠테이션 스킬이 뛰어나야 함
소프트웨어 프로젝트의 관리 능력이 능숙해야 함
기술사, PMP, CISA 등의 자격증 우대


위와 같은 사람을 구하려고 한다면 장담컨대 거의 확실하게 구할 수 없을 것이다. 우리 업계에 그런 스펙을 갖춘 사람도 드물지만, 그런 사람이 있다고 하더라도 구인 업체에서 어떻게 평가하고 판단할 수 있겠는가? 또한 충분한 대우는 가능할까?


멀티 플레이어에 대한 무지 또는 욕심

프로그래밍 능력의 경우 면접 시 테스트 프로그래밍을 통해 어느 정도 평가를 할 수도 있겠지만, 설계 능력과 관리 능력의 경우 테스트 자체가 거의 불가능하다.

위와 같은 사람을 구하는 것은 그저 업체의 욕심일 뿐이다. 프로그래밍 능력, 설계 능력, 관리 능력을 모두 갖춘 그런 자원이 거의 없는 것이 국내 업계의 현실이다. 개인 탓이 아니라 시대가 그렇다.

기술 쪽을 살펴보면, 지금은 코볼로 개발을 하던 1980년대가 아니다. 그때에는 코볼 하나만 알면 모든 것이 해결되었지만 지금은 알아야 할 것이 너무 많다. 관리 쪽도 만만치 않다. 비즈니스 환경을 전반적으로 이해해야 하고, 정치력도 필요하고, 문서 작성, 프레젠테이션을 잘 해야 하는 등 고도의 스킬이 필요해졌다. 그리고 관리와 기술은 서로 다른 분야이다.

하지만 주요 인적자원의 실제 업무를 이해하지 못한 채로, 멀티 플레이어(또는 업계 용어로 올라운드 플레이어)를 뽑으려고 노력하는 업체들이 참으로 많다. 그것은 무지 또는 욕심. 둘 중의 하나이다.


잘못된 역할 배정의 문제

위에 예를 든 구인 공고를 보면 알겠지만 그 제목은 어쨌거나 ‘PM 모집’이다. 즉 프로젝트 매니저를 뽑는 것이다. 그런데 세부 사항을 보면 도통 프로그래머를 뽑는 것인지, 설계자를 뽑는 것인지, 관리자를 뽑는 것인지 헷갈린다.

물론 척박한 국내의 IT 현실에 비추어 볼 때, 프로젝트에서 수많은 역할을 동시에 수행할 수 있는 그런 멀티 플레이어를 선호하는 상황을 인정하지 못하는 바는 아니다. 하지만 바로 그런 잘못된 판단 또는 욕심이 바로 프로젝트를 실패하게 만든다.

일단 프로그래머의 경우 모든 사람들이 익히 잘 아는 역할이므로 논외로 치고, 소프트웨어 아키텍트와 프로젝트 매니저의 역할을 생각해보자.

소프트웨어 아키텍트는 설계자이다. 개발을 위한 ‘소프트웨어 요구사항’을 파악하고, 큰 그림의 소프트웨어 아키텍처를 디자인하고, 개개의 프로그래머들이 작업해야 할 서브 시스템과 컴포넌트를 정의하는 사람이다. 또한 테스트 엔지니어들과 함께 테스트 요구사항을 수립하기도 하면서, 소프트웨어 개발의 전 과정에서 중요한 기술 책임자의 역할을 수행하는 사람이다.

프로젝트 매니저는 관리자이다. 프로젝트의 진행을 위한 ‘프로젝트 요구사항’을 파악하고, 프로젝트 계획을 수립하고, 개개의 팀원들이 작업해야 할 프로젝트 활동을 시간과 비용 개념을 갖고서 정의하는 사람이다. 또한 품질 담당자와 함께 품질 보증을 위한 활동을 수립하기도 하면서, 프로젝트의 전 과정에서 관리 책임자의 역할을 수행하는 사람이다.

소프트웨어 아키텍트는 소프트웨어 개발을 위한 높은 수준의 디자인을 계획하고 책임지는 사람이고, 프로젝트 매니저는 프로젝트 관리를 위한 여러 활동들을 계획하고 책임지는 사람이다. 기술 활동과 관리 활동은 분명히 다른 것이다.

하지만 많은 업체들이 그것을 혼동함으로써 재앙을 불러온다. 마치 프로젝트 매니저가 프로그래밍도 잘 알아야 하고, 설계도 잘 해야 하고, 관리도 잘 해야 한다고 생각한다. 물론 작은 규모의 프로젝트에서는 단 한 명이 모든 역할을 다 수행하는 경우도 있겠지만, 그것은 아주 예외적인 것이다.


기술 책임자와 관리 책임자는 구분되어야 한다

대부분의 소프트웨어 프로젝트에서 프로젝트 매니저의 역할과 아키텍트의 역할은 명확히 구분될 필요가 있다. 물론 두 사람이 상호 신뢰 하에 관리 책임자, 기술 책임자로서 긴밀하게 협조해야 하는 것은 자명하다.

그러므로 이 컬럼의 진지한 충고는, 프로젝트 매니저와 아키텍트의 역할을 제대로 구분하고 적합한 사람을 각각의 역할에 배정하라는 것이다. 그런 사람이 없어서 못 쓴다고 항변하는 업체들도 있을 것이다. 글쎄, 세상에 쉬운 일이 어디 있겠는가? 그것은 시간을 갖고 업체 스스로 양성을 하든, 경쟁 업체에서 스카우트를 하든, 해외에서 데려오든 해당 업체가 판단할 일이다.

프로젝트의 실패. 그것은 바로 소프트웨어와 프로젝트의 본질을 무시하고 인적자원의 중요성을 무시한 행동에 따른 필연적인 결과가 아닐까 필자는 생각한다. 그래서 필자는 다음의 주장을 명백히 강조하고 싶다.

“기술 책임자와 관리 책임자는 구분되어야 한다” 그것은 CEO와 CTO가 구분되어야 하는 것과 같은 개념이다. 만일 무지하여 그러한 구분을 제대로 해내지 못하거나, 또는 비용 절감의 욕심에 사로잡혀 고의적으로 그것을 행하지 않는다면, 프로젝트는 필히 재앙으로 보답할 것이다. 소프트웨어 프로젝트의 역사는 그것을 증명하고 있다. @


♣ 자료출처 : 류한석(피플웨어 운영자)

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,