예산 계획 (프로젝트 성공률 1% 높이기)

프로젝트 관리계획을 개발하는 데 있어 큰 3가지가 일정, 범위 및 예산이 있다. 이 3가지가 긴밀하고 유기적으로 연계되어 결국엔 성공적인 관리계획을 수립하게 된다. 앞선 일정, 범위와 더불어 이번에는 예산에 대해서 살펴보자.
 
 

예산관리

승인된 예산 범위 내에서 프로젝트를 완료하기 위한 활동. 앞서 이야기한 일정, 범위와의 관계를 보자면, 만약 일정을 앞당기려면 범위를 줄이거나 원가를 높여야 하고, 원가를 줄이려면 범위를 줄이거나 일정을 늘려야 한다. 특히 돈과 관련한 특성상 모두 다 중요하지만 예산만큼 민감한 사안도 없다. 하지만 이 3가지가 삼위일체처럼 움직여야 함은 변함없다. 이렇듯 중요한 예산관리는 일반적으로 예산을 산정하고 편성하여 통제하는 3단계를 거치는 다음을 보자.
 
✔️ 예산산정: 프로젝트 활동에 소요되는 자원의 원가를 예측한다.
✔️ 예산편성: 프로젝트 전체적인 원가의 예측치를 각각의 활동에 배정한다.
✔️ 예산통제: 편성된 예산, Cost baseline을 기준으로 예산이 적절한 시기에 제대로 쓰였는지를 감시한다.
 
 

예산 산정

비용은 단위 공정별로 원가 산정과 이를 바탕으로 총원가를 산정한다. 이를 통해 추정원가 요약 및 상세로 공유되며 추정원가는 단위를 통일해야 하고 프로젝트 진행상 변경을 고려하여 모든 사항을 상세하게 구별하고 기술하는 것이 중요하다. 이러한 예산산정의 방법들이다. 
 
🚩Top down
: 전문적 결정의 한 형태로 유사 추정이라고도 한다. 즉, 앞서 수행된 다양한 형태의 유사 프로젝트의 실제 비용을 확인하고 이를 향후 원가 추정의 근거로 쓰는 방법이다. 이는 원가 추정 시 필요정보의 양이 제한적이고 명확하지 않을 때 사용하며 이미 수행 프로젝트의 유사도와 추정인력의 전문성에 따라 신뢰도가 높아진다. 다만 이의 수행 원가는 적게 소요되지만 다른 방법들에 비해 정확도가 떨어질 수 있으며 활동별 원가를 추정하기가 어려워진다.
 
🚩Bottom up
: 프로젝트 개별 작업목록 각각의 비용을 합산하여 프로젝트 총원가를 추정하는 방법이다. 이 방법의 정확성은 개별작업목록의 규모에 따라 다르며 작업목록의 크기가 작을수록 원가의 정확성이 높아진다.
 
🚩Parametric
: 모수 기법으로 함수 모델을 근간으로 정량적 통계를 사용하여 비용, 시간, 자원 등 프로젝트를 완료하는 데 필요한 예상 자원의 양을 계산한다. PM은 추정치 계산 시 과거 데이터 또는 프로젝트를 기반으로 변수 또는 특성을 사용하는데 그 정확성은 모델링 도출에 사용되는 기초 데이터가 정확할수록, 모델에서 사용되는 변수가 측정 가능할수록, 프로젝트 작업 규모에 상관없이 모든 것이 관리되고 측정 가능할수록 높아지기 마련이다.
 
이러한 기법을 바탕으로 예산 산정이 된다면 조직과 프로젝트 차원에서 예산을 집행한다. 즉, 액수가 큰 프로젝트는 기업의 자본 유동성이나 재무 상태에 큰 영향을 끼칠 수 있기 때문에 지출 시기를 잘 관리하여야 한다. 또 이런 시기가 계획과 어긋난 경우 즉각 대처할 수 있는 모니터링 시스템을 가동해야 한다. 여기엔 기성고(Earned Value) 등의 여러 측정치를 주기적으로 관리한 데이터들이 기반이 된다.
 
 

원가 

PM이 하는 일은 워낙 많기도 하지만 그중에서 이 원가를 책임지는 중차대한 역할을 가지고 있다. 즉, 승인된 예산 내에서 프로젝트를 어떻게 잘 끝마칠 수 있을까 하는 고민의 시작은 원가와 밀접하다. 그런데 사람이 주 자원인 소프트웨어 개발 같은 경우 원가를 무시하거나 중요하게 생각하지 않는 경향이 있다. 인건비만 알면 된다는 입장인데 이 또한 그리 간단한 것이 아니다. 여하튼 프로젝트 원가와 조직 원가의 상관관계를 잘 이해하여야 하며 모든 내용을 숙지하고 활용해야 한다.
 
프로젝트 원가는 크게 인건비, 재료비, 경비로 나뉜다.
 
✔️ 인건비: 프로젝트에 참여하는 인력에게 지출되는 비용이다. 대부분 특정 기간에 지급하기로 한 금액과 실제 투입된 기간에 따라 산정한다. 다양한 인력의 상황에 여러 변수가 있을 시에는 국가/정부 기관에서 배포되는 노임단가를 기준으로 조정하기도 한다.
✔️ 재료비: 기자재, 장비 도입 및 구매에 사용되는 비용이다. 대상이 무언가에 따라 직/간접재료비로 구분하기도 하며 검수 기준에 맞춰 계획하고 집행한다. 비목은 산업 및 사업 등에 따라 다소 상이하게 부를 수도 있지만 큰 틀에서 이해하면 된다. (이 또한 가이드라인이 있으니 여기에 따르면 된다)
 
✔️ 경비: 프로젝트 원가 중 인건비와 재료비를 제외한 모든 금액을 말한다. 이는 업종이나 기업 회계규정 등에 따라 달라질 수 있다.
 
그러면 조직 차원에서의 원가는 어떤가? 조직을 구성하는 인력들, 즉 PM, 사업부, 경영자 및 투자자가 보는 원가는 모두 다를 수밖에 없다. PM은 직접비 중심으로, 사업부는 재무 관점의 판매비를, 경영자와 투자자는 영업이익과 경상이익을 중심으로 본다. 이 또한 프로젝트 보고 주기에 따라 관리되고 보고되며 의사결정에 매우 중요한 자료가 된다. 
 
 
 
 
※ 관리 PM? 개발 PM?
규모가 좀 있는 프로젝트에 들어가면 PM도 여러 종류가 있다. 물론 전문인력을 앉혀서 제대로 관리하는 것도 중요한데 그렇지 않은 프로젝트는 한 사람이 모든 것을 다해야 하는 경우가 다반사다. 그러다 보니 PM에 따라 각기 강점인 부분들을 제외하곤 나머지는 모자라거나 모르는 부분이 있을 수밖에 없다. 하지만 그렇다고 주저앉아 있을 수는 없다. 해내야 할 일을 어깨에 얹고 있는 이상 열심히 배우고 익히고 경험하는 수밖에. 뭔가 위로의 말을 기대했다면 미안하지만, 없다. 그냥 하는거다. 단! 도망가지 마라.

일정 계획 (프로젝트 성공률 1% 높이기)

일정 관리

일정 관리는 프로젝트가 납기 내 완료될 수 있도록 보증한다. 범위관리가 무엇에 관한 것이라면 일정 관리는 언제 어떻기에 관한 것이다. 그렇다면 누구나 다 아는 일정은 그 일정일까? 프로젝트에서 일정은 다양한 의미를 내포하는데 역할로 본다면 다음과 같다.
 
✔️ 프로젝트의 시작과 종료 시점, 상호관계 및 마일스톤의 설정
✔️ 프로젝트 외부에서 발생하는 활동과의 조율
✔️ 프로젝트 내부의 활동 간 연관관계 설정
✔️ 수행 기간 동안 활동별 자원할당과 진행
✔️ 주요 자원 요소들 및 장애 파악
✔️ 위험 요소 파악
 
그러면 일정도 기준이 있을까? 있다. 일정을 작성할 때는 수행 기간과 우선순위를 따진다. 여기엔 시작 일자와 완료 일자를 기준으로 잡는 방법 두 가지가 있다.
 
✔️ 시작 일자 기준: 프로젝트 시작을 명시하고 활동 기간과 연관관계에 따라 종료 일자를 도출
✔️ 완료 일자 기준: 프로젝트 종료를 명시하고 활동 기간과 연관관계에 따라 시작 일자를 도출
 
이렇듯 프로젝트 일정은 복잡해 보일 수 있으나 정해진 프로세스가 있으며 업무 범위를 명확히 하여 프로젝트를 수립하고 통제함을 기본으로 한다. 이를 통해 범위와 원가를 잡을 수 있는데 그 구성엔 활동을 정의하고 순서를 배열하며 각각 자원과 기간을 산정하여 일정을 작성하는 흐름이다.
 
 

Critical Path

Critical Path(주요공정)는 임계경로 분석법(CPM:Critical Path Method)으로 불리는 프로젝트 관리계획 및 통제 기법으로 많이 사용된다. 이는 일련의 프로젝트 활동 일정을 짜기 위한 수학적인 알고리즘으로 시작부터 끝까지 프로젝트를 완수하는 데 드는 시간을 측정하고 가장 긴 의존 활동을 식별하여 결정한다. 이 방법은 1956년부터 1958년까지 미국 듀퐁(Dupont)사가 건설계획을 추진하면서 개발하였고 이 시기 즈음하여 미국 GM과 해군이 PERT(Program Evaluation and Review Technique)라는 것을 만들었다. 이것들은 모든 형태의 프로젝트, 예를 들어 건축, 소프트웨어 개발, 제품 개발, 각종 공학 및 연구 프로젝트에 널리 쓰이고 있다.
 
그래서 흔히 들어본 PERT/CPM이 바로 이것이다. PERT는 계획단계에서 공사 기간 단축이 요구되는 때에 비관치, 낙관치, 실제 가능치를 고려하여 공수를 산정한다. CPM은 최소의 비용 증가로 공사 기간을 단축하려 하는 방법으로 각 작업의 시간당 비용증가율을 비교하여 산정하는데 PERT는 활동 수행 기간 추정에 확률 개념을 반영한다는 측면에서 CPM과 구분된다.
 

다시 말해 CPM은 프로젝트 계획, 리소스 할당 및 작업 일정 계획에 대한 통찰력을 제공하며 이를 사용해야 할 이유는 몇 가지가 있다.

🚩 향후 계획 개선: 현재 진행상태와 기대치를 비교, 현재 프로젝트의 데이터를 추후 프로젝트 계획에 반영한다. 
🚩 효과적 자원관리: PM이 작업 우선순위를 정하는 데 도움이 되고 자원을 적재적소에 배치하는 법을 지원한다.  
🚩 업무 지연 방지: 네트워크 다이어그램을 이용하여 프로젝트 종속성을 계획하여 일정을 계획한다.  

 
 

< Critical Path 예 >

 
Critical Path는 종속성이 중요한데 이는 활동 중 시작일과 종료일 사이의 관계를 말하여 활동 간 논리적 관계를 이야기한다. 이때 지연과 선행을 염두에 두고 작업을 하여 WBS 활동의 전후 관계를 살피고 네트워크 다이어그램을 작성한 뒤 연관관계를 파악하여 프로젝트 종료일과 여유시간을 찾아 공정을 마련한다.
 
✔️ 지연(lag)은 작업 종료 후 후행 작업을 기다리는 시간이다
✔️ 선행(lead)은 작업 종료 이전 후행 작업이 시작되어 두 작업이 중첩된 시간을 말한다.
✔️ Critical Path는 여유 시간이 없는 일련의 업무와 작업으로 프로젝트 납기일에 영향을 끼치는 활동들의 집합이다.
 
 

공수 산정

산정은 프로젝트팀원에 의해 이뤄져야 하며 실제 업무수행을 통해 시행착오를 거쳐야지만 체득할 수 있는 기술이다. 여기엔 여러 가지 방법들이 있는 대표적으로는 이전 유사한 프로젝트의 경험을 바탕으로 산정하거나 다수의 프로젝트 수행으로 구축된 DB나 방법론을 쓰기도 하고 PERT나 Function Point도 사용한다. 우리나라의 경우에는 한국소프트웨어산업협회에서 소프트웨어 사업 추진 시 SW 개발비 등에 대한 적정 대가를 산정하기 위한 기준으로서 “SW 사업 대가 산정 가이드”를 공표하니 이 자료를 자세히 참고해 보는 것도 업무 진행에 많은 도움을 받을 수 있다.
 
 

일정 관리 도구

도구들은 너무도 많아 일일이 나열하기도 뭐하다. 하지만 가장 기본이 되는 두 가지 정도만 챙겨도 도구 사용엔 별다른 문제가 없을 것이다.
 
🚩마일스톤 : 목표를 달성하기 위해 중간중간 발생하는 주요한 이벤트로 프로젝트 기간 중 주요 달성 및 완료의 표식이며 주요 산출물의 달성일을 말한다. 마일스톤은 할당된 기간이 없고 일정표상에 비어있는 다이아몬드(◇)로 기술하며 프로젝트 상 중요한 일자에 stakeholder와의 의사소통에 중요하게 쓰인다.
 
🚩간트차트 : 일명 Bar 차트로 진척 보고나 통제용으로 주로 쓰인다. 전체 프로젝트의 시작과 종료 기간을 한눈에 볼 수 있고 모든 활동이 기술되어 있어서 프로젝트 내 진척도에 대한 확인 및 의사소통에 주로 사용된다. 작성은 간단하게는 엑셀과 함께 전문화된 많은 툴이 있어 프로젝트 맞는 것을 골라 적극적으로 사용하는 것이 좋다.
 
 
 
 
※ 사용하실 겁니까?
도구가 없었을 땐 손으로 그렸지만, 지금은 그럴 필요가 전혀 없다. 다만 도입보다도 중요한 것은 경영층과 관리자층의 의지이다. 막상 도입은 했는데 쳐다보지도 않는다면 아래에선 죽어라 하고 헛일만 하는 것일 뿐. 이럴 바에 개발에라도 더 신경 쓰길 원하는 것이 그들의 마음이다. 현실과 괴리되어 흘러가는 프로젝트는 죽은 것이나 다름없다. 괜스레 사람들 빠져나간다고 뭐라 말고 나부터 돌아보자.

범위 계획 (프로젝트 성공률 1% 높이기)

“아니 그때 다 이야기된 것 아니었나? 뭐가 이렇게 자꾸 나와?”
 
 

프로젝트 범위

무슨 일이든 정해진 범위가 있다. 해야 할 일이 무엇이고 어디까지 해야 한다는, 각각의 일들이 기간을 가지고 있고 우선순위가 있지만 이 모두는 한 박스에 넣어진다. 넘칠 것 같으면 다른 박스에, 아니라면 더 작은 박스로 옮길 수도 있다. 이렇듯 일에 맞는, 범위에 맞는 일을 정해놓지 않으면 서로 얼굴 붉힐 일만 남을 뿐이다.
 
그럼 프로젝트에서 범위는 뭘까? 범위는 프로젝트가 고객에게 제공해야 할 서비스의 집합체로 계획을 수립하고 통제하는 대상이자 시작점이다. 이에 따라 계획의 적정성, 실현 가능성 및 구체성이 결정되고 범위가 변경된다고 하면 다른 영역들에 지대한 영향을 미친다. 예산이 모자를 수도 있고 투입인력이 탈출할 수 있으며 프로젝트 자체가 폐기될 수도 있는 중차대한 일이다.
 
프로젝트 범위는 그만큼 중요하다. 그래서 이의 관리를 위해 기본방침으로 잡는 것들이 있다. 첫째. 꼭 필요한 일들로 범위를 최소화하는 것이다. 총합으로서 또는 이를 구성하는 단계 내 범위를 최소화, 군집화하는 것이다. 둘째. 범위의 변경 또한 최소화한다. 범위가 변경되면 작업이 중단되거나 계획을 다시 수립해야 하고 많은 재작업이 발생할 수 있기 때문이다. 셋째. 불필요한 작업을 방지해야 한다. 특히 고객의 요구사항을 제대로 파악해야 하며 이를 통해서 고객의 지나친 요구사항들을 제어해야 하기 때문이다.
 
 

범위의 계획

범위 기술서가 우선 필요하다. 수많은 입력값을 토대로 작성한다. 입력값들은 프로젝트 착수 단계에서 고려된 계획과 제약사항들을 분석하여 의사결정과 이해관계를 정리하는데 중요한 단서가 된다. 이러한 일련의 일들은 PM이 주로 작성하고 여러 수행조직과 고객에게 프로젝트 범위에 대한 합의 기준, 의사소통 기준 및 프로젝트 종료 기준을 마련하는 목적을 갖는다.
 
여기서 범위 기술서는 WBS나 SOW와 차이점이 있다. SOW(Statement Of Work)는 보통 작업지시서, 작업 기술서 또는 시방서라 부르며 공급할 제품/서비스에 대한 상세한 설명을 담고 있다. WBS(Work Breakdown Structure)는 말 그대로 업무 분해 구조로 범위 기술서에 정의된 정보를 바탕으로 제품/서비스를 개발하는 과정에서 필요한 여러 단계의 작업 요소들을 상세하게 구성하고 조직화하는 것이다. 그래서 범위 기술서로 범위 기준을 설정하고 이 내용을 바탕으로 작업을 지시하며 이 작업을 수행하기 위해 범위를 정의하고 관리 틀을 만들어 운영한다고 보면 된다.
 
 

범위의 정의

프로젝트 범위를 한눈에 볼 수 있는 것이 뭐가 있을까? 앞서 이야기한 WBS가 이 범위를 산출물 중심으로 프로젝트 여러 요소를 군집화해 보여준다. WBS는 반복되는 분할로 더 작고 관리하게 편한 크기로 작업을 나눠 프로젝트 산출물을 체계화했다고 보면 된다. 이는 보통 PM과 프로젝트팀에서 작성하는데 이를 통해 프로젝트 전체를 조망하고 관리할 수 있는 매우 중요한 문서이다.
 
그래서 WBS는 외부적으로 PM과 고객, 내부적으로는 PM과 상위 관리자 간의 실질적 계약으로 볼 수 있으며 모든 계획의 근간이 된다. 그래서 정해진 업무 외 추가적인 요구사항이 나온다면 그 수용 여부에 대해서 고객을 설득할 수 있는 증거물로도 그 역할을 톡톡히 한다. 
 
 
WBS 작성은 범위 기술서를 바탕으로 한다. 목적을 염두에 두고 기능요구사항을 정의한 뒤 이의 달성을 위해 주요 액티비티를 정의한다. 이후 관리를 용이하게 하고 누락을 없애기 위해 계층적 분할을 하며 조직화하고 군집화한다. 여기까지 되었다면 일정을 산출하고 원가와 연계시킬 수 있으며 진척도를 관리할 지표로 사용할 수 있다.
 
 

WBS (Work Breakdown Structure)

WBS의 핵심 구성요소에는 Work Package(작업패키지) 가 있다. 이는 측정 및 관리가 가능한 WBS 최하위 작업 요소라고 보면 된다. 즉 분할의 최소단위인데 보통 80시간(2주) 내의 기간을 가지게끔 분할 규모를 설정한다. 또한 유일한 ID로 관리하는데 이를 Code of Account라고 한다. 전체적으로 보면 프로젝트 – 단계(Phase) – 작업(Task) – 작업패키지가 그것이다. 산출물 또한 중요한데 이것은 액티비티의 결과로 만들어지며 최하위 작업패키지에 매핑한다.
 
그래서 작업패키지를 어떻게 잡는가가 관건인데 의 적정 수준은 크게 두 가지로 본다. 첫째. 너무 개괄적인 분해는 아닌지? 둘째. 너무 세밀한 분해는 아닌지? 이렇게 보면 어떻게 잡으라는 말인가 하고 의문이 들 수 있는데 이 역시나 경험이 필요하다. 어느 하나 똑같은 경우는 없으며 프로젝트마다 모두 다르기 때문에 많은 시도와 결과를 통해 적정한 규모로 만들어가는 노력이 필요하다. 다만 이를 평가하는 일종의 법칙이 있다.
 
 
하나는 1~10%의 법칙인데 전체 프로젝트 기간을 영업일 기준으로 산정하고 여기에 1%에서 10%의 범위로 규모를 나누는 것이다. 또 하나는 1보고 기간의 법칙이다. 이는 작업 지연을 최소화하기 위한 것으로 프로젝트 최소 감시 주기 이내로 작업을 분할하는 것이다. 예를 들어 주간 보고가 최소 감시 주기라 하면 이 이상을 벗어나는 작업은 마지막에 가서야 결과를 통보받을 수 있기 때문에 그 위험성이 증가할 수 있는 것이다.
 
 
 
 
※ WBS 만들기
요즘 툴들이 너무나도 좋아져서 기본적인 내용만으로도 작업이 가능하다. 하지만 말이 좋아 그렇지 WBS를 만드는 일은 만만하지 않다. 역시나 어디까지 할 일을 분할해야 하는가에 대한 고민은 머리를 빠지게 한다. 그래서 여기서도 MECE(Mutually Exclusive, Collectively Exhaustive)를 중요하게 쓸 수 있다. 중복됨 없이 하나라도 누락되지 않게끔 정리하고 80시간 이내로 자르며 이것이 최소 감시 주기를 벗어나지 않게만 해도 반은 성공이다. 여기까지도 힘 드는가? 그렇다면 동료와 같이 작성하자. 왜냐면 프로젝트는 나 혼자만 하는 것이 아니니까 말이다.

프로젝트 착수 (프로젝트 성공률 1% 높이기)

이제 시작이다!

프로젝트의 시작을 어디서부터냐고 물어보면 모두 제각각일 것이다. 왜냐면 처음 프로젝트를 기획한 단계부터 최종 계약이 성사되고 이후 수행을 위한 단계, 그리고 마무리까지 이해관계자가 모두 다 다르기 때문이다. 그간의 앞선 내용들에선 주로 기획부터 계약까지의 행정적 단계를 이야기했었고 여기의 참가자들은 현장의 관리자급 이상이 될 수 있다. 하지만 실제 프로젝트의 구성원으로 프로젝트를 끌어내 갈 현업의 입장에서는 이제부터가 진짜 프로젝트라고 볼 수 있다.
 
이제 프로젝트는 PM이 선임되고 필요한 인력들이 속속 합류하고 있다. 웬만한 규모 이상이라면 별도의 프로젝트 장소도 섭외가 되고 업무에 필요한 각종 장비도 마련된다. 몇 명 없고 비어있던 사무실에 활기가 돌고 눈에 띄게 바삐 움직이는 사람들과 손끝에 전달되는 타격감은 프로젝트의 긴장도를 슬슬 높여간다. 곧 일할 맛 나는 프로젝트 현장이 눈 앞에 펼쳐진다.
 
프로젝트라는 이름의 배는 모든 이들을 태우고 부두를 떠나고자 밧줄을 풀고 있다. 아직은 어수선하지만 들뜬 분위기를 다잡고 목표한 항구에 도달할 때까지 한마음 한뜻으로 나아가기 위해 선장은 리더십을 발휘한다. 굳이 형식을 따지자면 임무 수여와 같은 프로젝트 헌장을 만들곤 하지만 꼭 이런 형태가 아니더라도 프로젝트의 구심점을 잡아 프로젝트의 공식적인 출항을 다양한 형태로 기념한다. 같은 장소, 같은 시간 속에서 조직은 결속을 다져나간다.
 
※ 프로젝트 헌장: 프로젝트 사명서 형태로 볼 수 있다. 프로젝트의 목적과 목표, 범위, 산출물, 마일스톤을 크게 명시한다. 이를 통해 구성원과 고객의 프로젝트 이해도를 높이고 합의를 끌어내고 궁극적인 의사소통을 원활히 할 수 있는 근간을 마련한다. 특히 성과 측정 기준을 제시하여 거시적 관리 시점을 갖도록 한다.
 
 

프로젝트 관리계획

중요한 문서로 수립되는 단계이다. 관리계획에서 다루는 주요 내용은 프로젝트 전반에 걸쳐 세부 계획들을 정의, 준비, 통합, 조정하기 위한 필수적인 활동들이다. 그 면면을 보자면 중복/누락 업무 방지, 기간 준수, 예산운영, 품질 유지, 위험관리, 의사소통 기준과 방법, 용어/지표 정의 및 일관된 업무 활동 세팅 등이다. 당 문서는 단지 작성되는 것에만 그치지 않고 관리 프로세스를 통해 개정, 변경된다. 문서로만 존재하는 것이 아니라 이를 토대로 모든 활동을 진행하고 제어한다. 그만큼 중요하고 프로젝트와 같이 이 또한 생명주기를 가진다고도 볼 수 있다. 다음은 관리계획에 있어 주요한 구성 요소들이다.
 
🚩각종 산출물 집합
  • 프로젝트팀에서 선정한 프로젝트관리 프로세스
  • 단계별 산출물 (산출물이 꼭 문서 형태가 아닐 수도 있음) 
  • 프로세스 진행에 필요한 도구와 기법
  • 변경 사항 감시 및 통제 방법
  • 형상 관리
  • 이해당사자 간 의사소통 기법 및 방법
  • 성과평가 및 품질측정
  • 필요시 보조계획
 
🚩보조계획 (복잡도 증가)
  • 범위관리 계획
  • 프로젝트에 필요한 단계별 계획 (일정, 원가, 품질, 인력, 의사소통, 위험, 구매관리 등)
 
🚩기타
  • 마일스톤, 자원 현황관리, 기준선, 장애 관리대장 등
 
 

관리 도구 

PMIS(Project Management Information System)/PMS(Project Management System)라 불리는 도구들은 프로젝트가 존재하던 과거부터 있었고 그간의 개발 방법과 기술의 발전은 현시점에서 다양한 형태의 관리 솔루션들을 보여주고 있다. 이런 도구들은 주로 프로젝트 전반, 계획수립, 일정 관리, 진척 관리, 비용관리, 자원관리, 보고서 작성, 통계, 위험관리 및 의사소통 또는 이러한 여러 단계 중 특정 단계에 집중되어 있기도 하다. 그에 따라 다양한 회사에서 많은 솔루션을 선보이고 있어 이를 사용하는 입장에서 무엇을 선택해야 할지 난감한 경우가 많다. 특히나 근래엔 협업툴이 인기를 끌면서 접근법을 달리한 PMS의 형태를 띠기도 한다. 아래는 가트너에서 최근에 발표한 PMS 들인데 많기도 하다.
 

< Best Project Management Software – 2023 >
 
이렇게 다양한 PMS 중 우리는 과연 무엇을 선택해야 하는가? 이 선택의 순간에 보통 2가지 관점으로 접근해 볼 수 있는데 첫째는 프로젝트 프로세스 및 조직에 얼마나 반영을 잘 시킬 수 있는지, 둘째는 필요로 하는 기능들을 얼마나 충족시켜 주는지이다. 더불어 사용자가 얼마나 쉽게 사용할 수 있는가도 매우 중요하다. 여기서 사용자 프로젝트 이해당사자들인데 이들은 소속이나 역할, 직위, 능력 등이 다양하기 때문에 관점에 기인한 중지를 모아 신중하게 결정하는 것이 좋다. 또한 기본적으로 갖추고 있는 조직, 인력, 문화 등 내재 역량 또한 무시할 수 없다.
 
이는 돈으로 살 수 없는 경우도 많으며 서로 간의 이해가 첨예하게 부딪히는 일도 다반사이고 업종이 무엇이냐에 따라서도 매우 다르기 때문에 현명한 선택이 요구된다. 만약 잘못된 선택으로 인하여 프로젝트 중반에 이를 변경할 일이 생긴다면 비용도 그렇지만 모든 것을 도구에 맞춰 진행해온 프로젝트 자체가 큰 위험에 빠질 수도 있기 때문이다.
 
 
 
 
※ 엑셀이 좋아!
MS Office의 엑셀은 정말 훌륭한 도구다. 기업 조직 내 시스템이 갖춰진 정도가 모두 다르더라도 가 가운데는 항상 엑셀이 존재한다. 그래서 비싸게 시스템을 도입해놔도 엑셀을 고집하는 경우가 많다. 하지만 프로젝트에서 선정한 도구가 있다면 이를 충분히 잘 활용하는 것에 집중함이 필요하다. 이 또한 의사소통 도구로 선택했기 때문이다. 그러니 엑셀은 잠시만 뒤로 하고 먼저 써보고 이야기하자. 써보지도 않고 뭐라 뭐라 말하는 것은 꼰대! 나 하는 거지 않는가?

프로젝트 제안 (프로젝트 성공률 1% 높이기)

프로젝트 발주

프로젝트 발주는 고객의 니즈를 내부적으로 충족할 수 없는 경우 조직 외부로부터 제품, 서비스 또는 특정 결과물을 조달하는 것이다. 이를 전담하는 인력은 흔히 발주 PM이나 발주업무 담당자라고 볼 수 있는데 실제 프로젝트를 진행할 PM의 입장에서도 프로젝트 배경과 필요성을 제대로 파악하는 것이 프로젝트의 요구사항 분석과 성공을 위한 필수적이다.
 
발주는 공개적인 방식 또는 제한된 정보망 등을 통해서 공유된다. 사업자들은 항시 발주 이벤트를 주시하고 있으며 언제든지 진행할 준비를 하고 있다. 누가 먼저 소식을 접했느냐도 중요하지만 제한된 시간 내에 모든 역량을 투입할 수 있는 여건도 또한 중요하다. 어찌 보면 중요하지 않은 것이 하나도 없다.
 
 

프로젝트 제안

제안서는 프로젝트 사업자 선정을 위한 기술평가를 통해서 수주 경쟁화한다. 이를 통해 사업제안자들의 사업수행역량을 체크하고 각 제안 별 핵심 사항과 역량 검증을 통해 최적의 사업자를 하나둘 선별해낸다. 이런 제안의 흐름은 일반적으로 다음의 단계를 거친다.
 
🚩제안요청서
 : RFP(Request For Proposal)라고 말하는 것. 사업에 대한 고객의 세부적 요구사항이 정의되어 있고 제안을 위한 기본 틀과 요건을 제시한다. 다양한 형태의 제안서가 존재하지만 가장 중요한 것은 원하는 것이 무엇인지, 이를 통해 최종 결과물의 이미지가 무엇인지 명확하게 제시하는 것이다. 가끔 고객 스스로가 무엇을 할지 제대로 모르면서 부실한 RFP를 내는 경우가 있는데 이건 시장에서도 매력도가 떨어지며 그 누구도 참여할 이유를 찾지 못하기에 이 또한 잘 만들어야 한다. 그러기 위해선 고객도 공부가 많이 되어 있어야 하며 자신들의 약점과 강점을 알고 조직적인 대응을 해야 한다.
 
🚩제안서
: RFP가 뜨고 나서 사업을 검토 후 제안에 응할 목적으로 작성하는 것. 사업을 어떻게 수행할지 포괄적으로 정리하며 고객이 평가를 통해 결정할 수 있는 근거 자료와 신뢰를 줘야 한다. 즉, 요구사항에 대한 구체적인 방안과 제안사의 사업수행 능력을 명확히 보여줘야 한다. 여기서 최우선은 고객 만족이다. 이를 우선순위로 내용을 작성하며 사업수행을 위한 다양한 투입자원을 고려하여 현실적인 사업 범위를 결정, 제시한다. 특히 경쟁사 대비 차별화는 추후 POC(Proof Of Concept) 나 BMT(Bench Marking Test) 등을 염두에 두고 변별력을 가질 필요가 있다.
 
🚩계약
: 선발된 다수명의 심사자 및 심사조직을 통해서 제안심사가 진행된다. 몇 단계에 걸쳐 심사 결과들이 발표되기도 하는데 계약 성사를 위해 제안서를 토대로 제안프로젝트를 본격적으로 진행한다. 제안 분석과 전략 수립, 목차를 구조화하고 핵심 내용을 선별 후 예상 질의까지 준비한다. 제안발표를 하고 당 제안이 타당하다고 평가되면 사업자가 선정된다. 협상을 통해 최종사업자를 가리게 되면 계약이 진행된다. 계약에는 RFP와 제안서를 토대로 여러 법리해석과 최종견적이 완성된다. 사업 대가는 프로젝트 단계별로 고려하고 규모와 자원투입, 시간을 기준으로 산출한다.
 
 

RFQ, RFI, 그리고

프로젝트 발주를 위한 RFP는 봤는데 이와 비슷한 RFQ, RFI, RFB 등 여러 용어도 볼 수 있다. 이것들은 프로젝트 진행을 위한 분야별 세부 확인을 위해 쓰이는 것들인데 주요한 것만 살펴보면 RFI(Request For Information)는 사전정보요청으로 RFP를 작성하기 전 프로젝트에 필요한 여러 정보나 환경 등을 파악하기 위한 자료로 쓰인다. 특히 기술 부분에 있어 내부 역량에 따른 외주 여부 등을 사전에 파악해 볼 수 있으며 일차적인 필터 기능도 포함한다. RFQ(Request For Quotation)는 제안 견적요청서로 예산 중심의 문건이다. 즉, 적절한 프로젝트 비용을 파악할 필요가 있는데 RFP 요청 시 RFQ도 같이 요구하는 경우가 많으며 두 문건을 같이 검토하여 평가의 기초로 다룬다.

 

프로젝트 수주

제안서 작성의 최종 목적은 프로젝트 수주이다. 아무리 제안서를 훌륭하게 작성하였어도 프로젝트를 수주하지 못하면 그 제안서는 아무런 의미가 없다. 결국 가격 부분을 제외한 나머지 부분, 제안사는 고객의 이번 사업을 다른 누구보다도 잘 이해하고 있으며, 최고의 솔루션(제안된 솔루션을 이행할 계획과 인력, 기술, 그에 대한 풍부한 경험)을 제안하여 제안사를 선택할 경우 성공적인 프로젝트를 수행할 것을 보장한다는 내용을 빠짐없이 담고 있어야 한다. 제안서는 고객의 요구사항을 정확하게 파악하고 고객과의 원활한 커뮤니케이션, 구체적 서비스 내용을 제안서에 어떻게 표현했는가에 따라 그 결과가 좌우된다.
 
다시 말해 제안서는 단순한 제안 문서로서의 의미보다 제안 업체의 사업역량의 위상을 표현하는 최고의 서비스 상품이 되어야 한다. 그렇기 때문에 사업자 스스로 질문과 답을 해야 하고 고객 이전에 먼저 설득이 되어야 한다. 그러고 나서 고객을 설득한다. 그러기 위해서 정말이지 어디에 내놔도 당당한 제안서라는 상품을 만들 필요가 있다.
 
 
 
 
※ 템플릿
요즘처럼 넘쳐나는 정보 속에서 자료가 없이 일을 못 했다는 건 말이 되지 않는 세상이 되었다. 그런데 정작 중요한 것은 형식도 형식이지만 내용이 먼저다. “고객이 원하는 것이 무엇인가?”에 대한 깊은 고민은 책상 앞에서 만으론 해결되지 않는다. 그러니 틀이 짜졌다면 열심히 더 뛰어다녀야 한다. 그러면서 체득한 내용들을 채워 넣어야 한다. 그러나 지금 당장 일어나 움직이자!

프로젝트 선정 (프로젝트 성공률 1% 높이기)

프로젝트 기획!

기획? 계획? 비슷한 용어 같지만 전혀 다르다. 다시 한번 사전을 찾아보자. 기획(企劃)은 꾀어서 긋는, 즉 일을 꾸며서 계획하는 것이라 하고, 계획(計劃)은 세어 긋는다는 의미로 해야 할 일의 구체적인 사항들(내용, 방법, 차례, 일정 등)을 미리 생각해서 정하는 것이라 한다. 다시 말해 기획은 고민한 목적을 바탕으로 과제를 결정한 뒤 어떻게 할 것인지를 찾아가는 것이라면 계획은 이미 정해진 과제를 어떻게 할 것인지를 고민한다. 
 
앞선 글들에서는 프로젝트의 계획에 대해서 주로 이야기했다면 이제는 스스로 기획하여 프로젝트를 만든다고 할 때 어떠한 절차와 방법들이 있는지 자세하게 알아볼 필요가 있다. 이는 프로젝트 진행을 위한 갑과 을을 입장에서 서로를 이해하고 보다 명확한 프로젝트 분석 설계를 하기 위한 실마리로서 많은 배움을 얻을 수 있다.
 
 

프로젝트 타당성 분석

프로젝트는 니즈와 시점이 부합되는 지점에서 발생한다. 이는 크게 내부 프로젝트와 외부 프로젝트로 나뉘는데 내부 프로젝트는 조직 내부의 프로세스를 개선한다거나 제품, 솔루션 개발을 통한 생산성 향상 내지는 대외 경쟁력 확보 차원에서 진행된다. 반대로 외부 프로젝트는 수익성을 최우선으로 양질의 서비스를 받거나 비즈니스 목적에 연관된 아웃소싱을 염두에 둔다.
 
프로젝트는 발의에서 실제 승인까지 여러 단계와 시간이 소요되며 그 중간과정에서 꼭 필요한 것은 프로젝트 목적을 달성시킬 수 있는 프로젝트의 타당성 검토에 있다. 지난할 수도 있지만 이 부분은 반드시 통과해야 프로젝트는 계획이 아닌 실제 수행단계로 접어들 수 있다. 무엇보다도 기업은 시장에서의 기회에 대한 실행과 성공 여부를 분석하여 의사결정을 통해 프로젝트를 승인하고 진행한다. 그렇다면 타당성에 대한 분석은 어떻게 하는가? 그 기준을 몇 가지 찾아보자.
 
🚩시장
 : 과연 시장에서 이 프로젝트는 성공할 것인가를 타진한다. 여기서 시장은 내외부 모두를 포함하며 이 토대 위에 타깃 시장을 정조준한다. 더불어 시장에 대한 고려는 고객과도 맞닿아있다. 고객분석과 시장분석은 떼려야 뗄 수가 없으며 밀접한 관계와 긴장도를 유지한다. 다만 시장이 모두 고객은 아니며 고객이 모두 시장은 아니다.
 
🚩기업 내부
: 프로젝트를 수행할 역량을 조직이 갖추었는가? 인력, 조직구조, 지원자원 등 프로젝트에 필요한 기본적인 요건들은 준비되고 충족된 상태인가? 검토 결과를 모두 수긍하고 상황에 맞게 개선하고자 하는가? 혹시 몇몇 의견에 압도되어 무리한 진행을 하려고는 하지 않는가? 철저한 내부 분석을 통해 외부 영향도를 고려해야 한다. 안에서부터 시작이다. 
 
🚩재정
: 모든 계획이나 시점이 맞아떨어져도 일을 수행할 자원, 돈이 없다면 어떠한 일도 진행할 수 없다. 영리를 목적으로 하는 기업은 투자 여력을 항시 고려하여야 하며 냉정함을 끝까지 유지해야 한다. 미래의 대가를 먼저 끌어온 들 돼야 하는 것. 경영진을 포함하여 실무진까지 궤를 같이하지 않으면 옳은 것이 아니다. 
 
🚩설계
: 고객의 요구사항은 명확히 정의되고 확인되었는가? 이 요구사항을 충족할만한 기술력은 보유하고 있는가? 개발 이전에 분석설계 단계에서 감내해야 할 부분은 충분히 고려되었는가? 혹시 현실 감각이 둔화한 허황한 미래상을 그리고 있지는 않은가? 전문가를 포함하여 현업과의 밀접한 관계로 설계는 계속 확인하여야 한다.
 
 

프로젝트 선정기법

프로젝트 착수 이전, 프로젝트에 대한 타당성 분석과 실행 여부에 대한 판단은 포트폴리오 차원에서 기업 전략목표에 부합하는지, 다른 프로젝트들과 영향력은 어떠한 상태인지, 각각의 우선순위들은 문제가 없는지를 인지하고 이를 통해 프로젝트 선정을 위한 합리적 의사결정을 위해 여러 지표를 분석하고 경제성을 파악하는데 주안점을 둔다. 그렇다면 어떤 기법들을 통해 의사결정을 할 수 있을까? 간략히 살펴보면 다음과 같다.
 
🚩미래가치와 현재가치
:  현재의 일정 금액이 향후 몇 년 뒤 가지게 될 가치를 평가하거나 이에 반대로 평가한다. 미래가치는 보통 복리(FV = 원금 ⅹ (1 + 이자율) 년수의 거듭제곱) 계산과 유사하다. 
 
🚩투자 가치평가
: 프로젝트 수행 시 투입될 비용과 프로젝트 완료 후 발생하는 편익에 대한 현금흐름을 추정하여 정한다. 여기서 모든 비용과 편익은 현재가치로 환산하며 환산된 총비용과 총편익을 비교하여 투자가치를 평가하며 다음과 같은 방법들이 있는데 우선은 무엇이 있는지만 살펴보자. (※ 관련해선 좀 더 깊은 공부가 필요하다)
  • 화폐의 시간적 가치 미고려 시: 회계적 이익률법, 회수기간법 등
  • 화폐의 시간적 가치 고려 시: 순현재가치법(NPV), 내부수익률법, 편익/비용 비율, 경제적 부가가치, EVA 등 
이러한 일련의 방법을 통한 프로젝트에 대한 판단은 최종적으로 정보화 계획을 수립하게 된다. 조직의 장기적 목표와 전략에 따라 세부 마일스톤을 세우고 전술적 액션플랜을 마련한다. 이에 따라 각기 수행할 업무를 세분화 및 명확화하고 관련 이해당사자들 간의 협의를 거쳐 사업화할 부분을 선택, 확정하며 최종적으로 마련된 계획안을 배포, 공유한다. 이제 한 가지 목표를 바라볼 때가 온 것이다.
 
 
 
 
※ 뭣이 중한데?
기획하다 보면 자칫 모든 것이 중요하게 보이며 변별력이 사라질 때가 있다. 하지만 결국 길을 찾고 해결책을 제시해야 한다. 여기서 꼭 필요한 것은 흐려진 목표와 목적을 다시금 상기하고 항시 잊지 않는 것이다. 이는 길 잃은 망망대해에서 별자리이자 삶의 의지이다. 그래서 정말 중요한 일을 하게 되어 있다. 그러니 망설이지 말고 한 걸음 앞으로 나아가 보자. 꾹!

프로젝트생명주기 (프로젝트 성공률 1% 높이기)

프로젝트 생명주기!

일을 진행하는 과정에 있어서 그 단계와 절차들이 있는데 프로젝트에선 이를 생명주기(life cycle)로 표현하며 여러 단계(phase)를 통합적으로 지칭한다. 프로젝트 수행조직은 하나의 프로젝트를 여러 개의 단계로 구분, 관리하는데 이 단계는 프로젝트의 구성단위로 볼 수 있고 각 단계는 단계별로 중요한 산출물이 완료되는 시점이다. 이러한 단계는 종료 검토를 통해 다음 단계로 진행할 것인지를 결정하고 이 단계들이 모여 최종적인 프로젝트가 완성된다.

모든 프로젝트는 단계로 나눠진다고 이야기했다. 크든 작든 프로젝트와 상관없이 이 단계들은 일정한 생명주기를 가지는데 큰 틀에서는 엇비슷하다고 볼 수는 있으나 크게는 업종에 따라서도 그 내용이 상이하다. 그래서 동종업계의, 유사 프로젝트 성격을 가진 자료들을 바탕으로 이러한 생명주기를 참고하고 갖춰볼 수도 있다. 그러면서 내 프로젝트에 맞게끔 적용하거나 변경할 수 있다.

프로젝트관리 생명주기?

그간 프로젝트, 프로젝트관리, 생명주기 등 각각의 용어에 대해서 알아보았다. 그렇다면 프로젝트관리 생명주기는 무엇인가? 헷갈릴 수도 있지만 앞선 용어들을 참고해서 의미를 생각해 보자. 프로젝트 생명주기가 아닌 프로젝트관리에 대한 생명주기는 관리 절차, 관리프로세스라고 볼 수 있고 이는 각각 착수, 계획, 실행, 감시/통제 및 종료로 구성된다. 아래를 봐보자.

🚩착수
: 프로젝트의 시작이다. 고객이 프로젝트의 발의를 결정하고 수행조직에 전달되어 준비되는 이벤트이다. 첫 시작이기 때문에 이것저것 챙길 것이 많다. 그중에 몇 가지만 추려보면, 프로젝트 요구사항분석, 예비 범위 확인, 일정/예산 산정, 제약조건 확인, 이해당사자 분석, 성과기준 마련, PM 결정과 권한 부여, 팀 꾸리기 등이 있다. 이 모든 예비작업이 정의되고 기술되어 Big Picture로서 프로젝트계획이 수립된다.

🚩계획
: 앞서 그린 큰 그림을 바탕으로 프로젝트를 세세하게 계획한다. 프로젝트 관리계획, 실질적인 범위 기술서, WBS(Work Breakdown Structure), 각각의 액티비티와 우선순위, 기간, 자원할당, 비용산정, 품질계획, 인력/의사소통 관리, 위험관리 등 관리의 추상화 레벨을 내려가며 할 일들을 정리해 나간다. 이 계획들이 빠짐없이 세세하게 구축이 되어야만 프로젝트의 성공률을 끌어올리는 실마리가 될 수 있다.

🚩실행
: 이제 본격적인 활동의 시작이다. 프로젝트 구성원들에 대한 다양한 기초교육을 바탕으로 유관 조직, 기관, 업체들에 대한 선정 내지 작업지시, 본격적인 품질보증 활동을 토대로 도입된 방법론에 따라 지속적이고 점진적인 진행을 시작한다. 어떻게 보면 실행은 전체 프로젝트에서 약 20~30%에 해당하는 단계이다. 나머지 70~80%는 단순하게는 문서 형태로 귀결되는 모든 단계의 활동 산출물들이 담당한다. 근래에 들어 이런 부담을 줄이는 경량화되고 빠른 방법론들이 사용되고 있다. 다만 모든 경우를 포괄하는 것은 아니다.

🚩감시/통제
: 프로젝트의 빅브라더가 해야 할 일이다. 매 단계의 성과를 품질 기반으로 측정하고 진척을 관리한다. 문제가 발생하면 시정조치와 피드백을 받고 그 효과성을 평가하여 프로젝트에 재귀적 반영을 한다. 변경에 민감하며 비용을 통제한다. 위험 유발요인을 집요하게 추적하며 모든 활동을 감시한다. 감시라는 용어가 다소 거부감이 들 수도 있지만 감시가 몇몇 관리자가 하는 행위뿐만 아니라 프로젝트 모든 구성원이 해야 할 일이기에 그렇게 생각할 필요는 없다. 성공하고자 한다면, 성공의 책임은 모든 이해당사자 각각이다.

🚩종료
: 대망의 마무리 단계. 그간의 업무들을 총체적으로 정리, 마감한다. 산출된 결과물들을 고객에게 인도하고 승인을 득하며 프로젝트 전 과정을 통해 배울 것들, Lessons Learned를 문서화하고 공유한다. 점유된 자원들을 하나둘 해제하며 프로젝트는 서서히 끝날 기미를 보이며 종료된다. 완료 평가와 함께 최종 보고를 하고 고객관리 방안과 미결사항 등에 대한 복안을 논하고 오랜 시간의 마침표를 찍는다.


< 프로젝트관리 생명주기 >

관리영역들

업무를 하면서 우리 알고 있는 PDS, 즉 Plan – Do – See와 다르게 프로젝트는 시작과 끝에 따라, 여러 특성과 환경 등에 따라 그 생명주기는 각기 다르다. 그래서 앞선 5가지는 세부적으로 여러 가지 프로세스들로 구성되어 있다. 이는 흔히 PMBOK(Project Management Body of Knowledge, 현재 7판)이나 SWEBOK(Software Engineering Body of Knowledge, 현재 4판)등에 자세히 나와 있다. 프로젝트에서 이것을 모두 활용하기엔 다소 무리가 있고 그중 가장 핵심적인 단계들만이라도 제대로 관리한다면 프로젝트 성공률은 높아질 수 있다. 세세한 내용은 차차 다루기로 하고 여기서 알아 둘 것은 크게 두 가지이다. 프로젝트 목표 달성을 위한 Core 프로세스는 원가, 일정, 범위 단계, 그리고 목표 달성을 위한 수단으로써의 Facilitating 프로세스는 품질, 인력, 의사소통, 위험, 아웃소싱단계가 그것이다.

 

※ 한곳을 향해.
PM은 프로젝트를 성공적으로 완수하고 싶다. 격하게 하고 싶다. 그래서 나름의 넘치는 욕심과 의욕으로 시작하지만 높고 낮은 벽들에 계속 부딪히고 싸우면서 점점 의기소침해지고 소극적으로 변하며 전의를 잃기도 한다. 이때 무엇이 필요할까? 멘털이다. 멘털을 잘 붙들어 매어야 나 자신을 지킬 수 있다. 그리고 이걸 옆에서 지켜보는 구성원들은 PM을 이해하고 지지해줘야 한다. 설사 내부 총질(!?)을 해대는 상황이 발생할지라도 그건 나중 일이다. 팀은 왜 존재하는가?

프로젝트관리란? (프로젝트 성공률 1% 높이기)

프로젝트관리란?
앞서서 프로젝트에 대한 정의를 살펴봤다. 그렇다면 이 프로젝트를 관리한다는 것은 무엇을 의미하는가? 이 지점에서 관리라는 용어도 살펴보고 가자. 관리란 흔히 사람을 통제하고 지휘 감독하는 것이나 여러 시설이나 물건의 유지·개량 따위를 꾀하는 것을 말한다. 이를 프로젝트에 대입해 보면 목표를 세우고 계획을 짜며 일들을 수행하고 목표를 달성해 가는 과정에서 필요한 수많은 자원과 시간 그리고 노력은 프로젝트의 관리 측면이다. 이는 매우 필수적이고 중요하며 프로젝트와 관리가 별개가 아닌 하나로서 인식해야 할 필요성을 느낀다.

그래서 프로젝트관리는 “프로젝트 요구를 만족시키기 위해 지식, 기술, 도구 및 기법들을 프로젝트 활동 중에 사용하는 것“이라 할 수 있다. 다시 말해 프로젝트 요구사항을 충족시키고 만족시키는 것, 이를 위한 모든 요소를 잘 이해하고 관리하여 목적한 바를 달성해 나아가고 더 나아가 프로젝트의 성공적 완료를 가능케 한 자원, 특히 조직의 역량을 확보하고 강화하는 것이 그 이면이라고 본다.

그러면 이러한 프로젝트의 성공률은 얼마나 될까? 다소 오래된 자료이긴 하나 지금까지도 유효한 Standish Group의 2010년 Chaos Summary를 보면 30% 정도의 프로젝트만 성공한다고 한다. 그렇다면 나머지 70%는 실패한다는 이야기인데 그 원인은 주로 1) 요구사항의 부정확성 2) 사용자 환경의 이해 부족 3) 불충분한 자원 4) 비현실적인 사용자 기대치 5) 관리지원의 부족 6) 변경 관리의 미흡 7) 프로젝트 계획의 미비 등이라고 한다. 이는 곧 관리 부재의 결과이고 특정 몇몇 사람이 아닌 조직 전체의 문제로 비친다. 특히 관리의 제약 측면에서 살펴보면 다음과 같다.

 

프로젝트 관리의 3대 제약
프로젝트는 아래 3가지에서 절대 벗어나지 않는다. 이는 프로젝트의 성공과 실패를 구분하는 기준이며 모든 단계의 품질을 좌지우지한다.

● 범위
: 프로젝트에 존재하는 필요와 기대 사이의 요구사항이다. 프로젝트 초반 고객의 요구사항을 제대로 파악하지 못하면 범위는 계속 흔들린다. 상세한 요구사항은 프로젝트의 첫 단추다. 이를 위해 요구사항관리라는 별도의 프로세스를 만들어 놓고 있으며 이를 통해 유기적인 범위관리에 신경을 쓴다.

● 일정
: 프로젝트의 시작과 끝, 그 기간이다. 프로젝트계획 시 범위에 기반한 일정을 수립하지만 철저한 관리가 되지 않는다면 일정은 자연스럽게 지연이 된다. 프로젝트관리자는 일정에 민감해야 한다. 전체 일정과 하루 일정. 진척도는 관리되어야 하며 이슈가 발생하면 전파하고 해결책을 찾아야 한다.

● 원가
: 프로젝트에 할당된 예산은 타당한가? 제대로 된 수요조사와 시장조사를 통해 원하는 사양에 충족한 것들을 선별, 구매했는가? 특히 인건비는 제대로 평가받고 있는가? 예산이 부족하다고 제일 먼저 인건비에 손을 대지는 않았는가? 그래서 실력 있는 개발자들을 외면하고 있지는 않은가? 아니면 한 사람에게 너무 의존하는 것은 아닌가?

 

성공과 실패
모든 프로젝트는 성공하여야 한다. 그 끝을 위해서 모든 이해당사자는 서로 협력한다. 하지만 성공과 실패의 기준이 무엇인가에 대해서는 의견이 분분하다. 알고는 있지만 서로 상대적인 개념 사이에서 위의 3가지 제약은 훌륭한 기준을 마련해준다. 이를 바탕으로 프로젝트를 관리하고 관리의 성공과 실패 여부는 핵심 이해당사자들에게 달려있다.

이해당사자. 이들은 프로젝트와 밀접한 경영진, 개발자, 관리자, 고객 등이 있다. 이 중에서 고객의 요구사항에 얼마나 잘 부응했는가가 성공을 가늠한다. 3가지 기준에 충실한 관리, 그러면서 고객 요구사항의 충족. 성공은 멀리 있지 않다. 그만큼 실패도 성공의 반대편 가까운 곳에 서 있다. 부정확한 요구사항, 사용자의 몰이해, 충분하지 못한 자원들, 비현실적인 기대치와 무관심, 변화무쌍한 상황들의 관리 부재, 이들을 아우르는 계획의 미비. 그렇다고 유명하단 프로세스나 방법론이 모든 문제를 해결해 줄 수는 없다.

프로젝트는 요리와도 같다. 여러 좋은 재료들을 모아 정해진 레시피대로 정성껏 요리하면 맛 좋은 음식 맛을 볼 수 있다. 이 요리에 있어 요리사는 전체적으로 볼 수 있어야 하고 집중하여 관리하며 문제가 발생했을 때 이를 개선하는 노력을 통한 최적화! 나에게 맛 좋은 음식도 중요하지만, 고객의 입맛에 맞게, 원하는 사항들을 충족시키고 더 나아가 미처 모르던 맛까지 제공한다면 프로젝트는 성공이라 말해도 부족하지 않다.

 

이해당사자
프로젝트에는 수많은 이해당사자가 존재하며 이들은 프로젝트의 성공 여부를 결정짓는 매우 중요한 개인 혹은 조직이다. 영어로는 stakeholder. ‘지주를 붙잡는 사람’이라는 뜻처럼 각각의 역할과 책임이 막중하다.

  º 프로젝트관리자: 프로젝트 수행 전반의 책임자
  º 고객: 프로젝트 결과물을 사용하게 될 개인 혹은 조직
  º 기능부서 관리자: 프로젝트팀원이 속한 부서의 관리자
  º 경영진: 프로젝트를 수행하는 조직의 최고 관리자
  º 프로젝트부서: 프로젝트를 수행하는 사람 혹은 조직

이들은 그 특성과 영향력 수준에 따라 분류할 수 있고 각자의 이해 분야가 다르기 때문에 여러 갈등의 양상을 보일 수 있다. 이에 프로젝트관리자는 갈등 당사자 간의 이해의 합의를 구하고 해결책을 제시해야 하고 고객의 입장에서 움직여야 한다. 그래서 조직적인 대응으로 PMO를 구성하기도 하고 프로젝트 조직을 프로젝트 상황, 기업조직구조, 방침 등에 따라 기능 조직, 매트릭스 조직, 프로젝트 조직 등으로 나누어 사전에 결정하고 깊게 운영하여야 한다.

 

 

※ 너는 너, 나는 나
얽히고 섥힌 사람들로 북적이는 프로젝트에서 프로젝트관리자는 너무나도 중요하다. 그런데 요즘은 이런 부담을 떠안기 싫어 도망가는 사람들로 PM을 할만한 사람 찾기가 하늘의 별 따기 수준이다. 저는 개발만 하고 싶어요! 라는 사람들도 업무를 알아야 개발이 될 텐데 하물며 PM은 어떠할까? 세상은 바뀌어도 PM은 가치는 영원하다.

프로젝트란? (프로젝트 성공률 1% 높이기)

프로젝트란?

프로젝트란 무엇인가? 많이 들어보고 흔히 쓰고 있는 말이지만 정확히 어떤 뜻인지 설명할 수 있을까? 이것이 안된다면 사실 모르는 말이라 해도 과언이 아니다. 어떤 일을 하기 전에 반드시 짚고 넘어가야 하는 것 중 하나가 바로 용어의 정의이다. 이것을 간과한 경우엔 많은 혼선과 잡음, 서로 간의 반목과 갈등이 생기기 마련이다.

용어로써의 프로젝트란 사전적 의미로 ‘학습자가 스스로 자기 활동을 선택·계획하고 방향을 설정해 가는, 문제 해결의 학습’을 뜻하기도 하고 ‘연구·사업 등의 계획’으로서 `일감’이나 `연구 과제’를 뜻하기도 한다. 여기선 후자의 뜻인데 다시 말해 프로젝트란 전체적인 목적을 향해서 수행하는 일련의 활동들이나 그 목적의 달성과 관련된 정보의 수집으로서 “유일한 제품, 용역 또는 결과를 창출하기 위해 투입되는 일시적 노력“을 말한다. 즉, 프로젝트는 목적을 가진 사람들의 행위이면서 유한하고 뚜렷한 목표가 있다. 그래서 하나의 프로젝트는 반복되지 않고 일상적이지 않다.

 

프로젝트의 주요 특징
프로젝트는 위에서 언급했듯이 몇 가지 주요한 특징들이 있다. 이를 좀 더 살펴보면 다음과 같다.

● 명확한 목표와 목적

: 흔히들 크게 신경 쓰지 않고 하는 말 중에 목표와 목적이 있는데 목표와 목적은 전혀 다르다. 목표는 흔히들 goal로 이야기하는 실체가 있는 대상이고 목적은 why, 이유이다. 즉, 목표가 있다는 건 프로젝트의 가장 큰 특징 중 하나다. 그래서 목표를 달성하면 프로젝트는 자연스레 소멸한다. 그렇기 때문에 프로젝트 조직이 별도로 구성되었을 때 그 프로젝트의 목표가 이뤄지면 그 조직은 해체된다. 이런 목표는 성과로 산출되고 평가가 된다. 지속해서 피드백되고 목표를 이루고자 하는 목적의식으로 모든 구성원은 함께 나아가게 된다.

● 한시성

: 시간이 정해지지 않았다면 이것은 프로젝트가 아니다. 우리가 잘 아는 140여 년 전부터 시작된 스페인 바르셀로나의 가우디 성당 프로젝트는 그 끝이 언제인가에 대해서 말이 많았지만 아마도 2026년이 되면 이 프로젝트의 마침표를 찍을 예정이다. 이를 이제 프로젝트라고 말할 수 있는 것은 그 목표 시점이 정해졌기 때문이다. 짧은 단위 프로젝트이던 긴 장기 프로젝트이던 프로젝트라고 불리기 위해선 반드시 시작과 끝이 있어야 한다는 것이다. 이것이 한시성이다.

● 유일성

: 그렇다면 목표와 목적, 명확히 정해진 기간만 있다면 프로젝트가 맞는가? 물론 틀리진 않지만 중요한 또 다른 특징 중의 하나는 세상 어디에도 없는 유일함이다. 이는 그 프로젝트 자체, 즉, 환경, 사람, 행위, 내용, 사건, 결과 모두를 고려한 유일성이라 볼 수 있다. 이 때문에 이 프로젝트가 다른 프로젝트와 다르다고 말할 수 있고 선언할 수 있으며 그래서 이 프로젝트에 참여했던 모든 구성원이 흥미와 보람을 여기서 찾을 수 있는 것이다. 어디 가서 경험할 수 없기 때문이다.

● 상세화

: 프로젝트는 매우 치밀하고 구체적이며 그 면면이 상세하다. 그 상세함은 내용을 중시하며 보다 지속해서 점진적으로 구체화한다. 큰 틀에서 큰 그림을 그리고 페이지를 점점 넘길수록 그 내용의 밀도를 더해가는 상세함이 프로젝트를 어렵게 만드는 이유이기도 하지만 이 상세함이 없이는 프로젝트가 제대로 완성될 수 없다. 그래서 이 부분은 많은 시간이 필요하고 풍부한 경험이 중요하게 된다. 즉, 고객 접점의 수많은 이야기가 하나도 빠지지 않고 제대로 써지는 것을 말한다.

 

사례들

우리 주변에 보면 정말 많은 프로젝트가 수행되고 있고 끝이 나고 새로 시작되며 혹은 여러 사정으로 마무리를 짓지 못하고 있다. 흔히들 보는 건축이 그렇다. 우리 동네에 어느 날 갑자기 아파트가 들어선다. 그 공사 현장 입구에 가면 조감도를 비롯하여 여러 사항을 확인해 볼 수 있다. 특히 위에서 이야기한 특징들의 면면을 볼 수 있다. 건축은 아마도 프로젝트가 가장 잘 적용되며 실질적으로 다양한 측면의 기법들이 가장 발달한 분야이기도 하다. (특히 IT는 건축에서 왔다고 해도 무방하다)

신제품 개발도 그렇다. 매년 출시되는 S사의 휴대폰을 한번 보자. 주기적으로 서로 다른 제품군을 선보이고 있으며 이는 향후 몇 년 뒤까지 이미 로드맵으로 설정되어 있다. 수많은 예산과 인력이 투입되며 첨단기술의 향연이 펼쳐진다. 엄청난 수의 부품을 짜인 틀에 최적화시키고 기능을 개선하며 멋진 디자인을 입혀 사용자를 만족시키기 위해선 보통의 프로젝트 기술이 아니다. 그런데도 성공하는 모델과 그렇지 않은 모델들로 흥망성쇠를 보며 기뻐하고 슬퍼할 이해당사자들의 노고를 우린 손에 쥔 자그마한 휴대폰으로 보고 있다.

프로젝트는 운영이 아니다. 굳이 비교한다면 가게를 운영한다고 하지 프로젝트라고 부르지 않지 않는가? 물론 제한된 자원으로 계획을 세우고 일하고 관리하는 일련의 과정은 같지만 이야기한 한시적이고 유일하며 목표한 바가 달성되고 종료되는 것이 바로 프로젝트다. 일을 지속하기 위해 끊임없이 반복하는 것은 운영의 영역이다. 이제 프로젝트가 무엇인지 알았으니 프로젝트 속으로 한 발자국을 내디뎌 다음 단계로 나아갈 차례다.

 

 

※ 용어의 정의!

같은 시각, 같은 장소에서 똑같은 사안으로 의견을 나누고 결정해도 서로 흩어져 각자의 자리로 돌아가 일하다 보면 그때 나뉘었던 이야기들이 모두 달라서 얼굴을 붉히던 적인 한두 번이 아니다. 결국 서로 다르게 이해한 용어에 관해서 확인하지 않은 죗값이었다. 죄를 묻기 싫다면 아는 용어라도 반드시 확인하자. 미팅이 끝날 때 다시 한번 리뷰하는 그 짧은 시간이 아무것도 아닌 것 같지만 돈과 시간을 아껴준다. 사람 사이를 넉넉하게 해준다.

프로그래밍1 (소프트웨어 공학)

프로그래밍 – 구현

설계작업들이 끝나면 시작되는 소프트웨어 프로그래밍은 요구사항에 대한 실질적인 구현행위이다. 특히 분리하여 구현할 수 있는 작은 단위로 나눠 작업을 한다. 프로그래밍의 수행이 상세 설계나 사용자 지침에 기술된 내용과 일치되도록 작업하여야 한다. 이 작업에서 가장 중요한 것은 표준을 정하고 준수하고 이에 따라 정확하게 작성하는 것이다. 소프트웨어의 품질은 결국 이를 얼마나 잘 수행하여 원시 코드에 반영하느냐이다. 따라서 프로그래밍에서는 소프트웨어의 기능구현이 급급한 것이 아니라 요구되는 품질에 얼마나 부합하도록 작업하는가에 대한 관심과 끊임없는 노력이 매우 중요하다. 

※ 코딩과 프로그래밍?
이 용어는 모두 컴퓨터와 상호 작용하고 컴퓨터 시스템을 생성하고 유지 관리하는 데 중요한 기술로 종종 같은 의미로 사용되지만, 프로그래밍 과정 중 코드를 작성하는 구체적인 단계를 가리키며, 프로그래밍은 문제 해결을 위한 전체적인 과정을 의미하기에 사실은 서로 다르다.

  • 코딩(coding): 프로그래밍의 하위 세트 중 하나로 구체적으로 언어의 문법을 따라 컴퓨터가 이해할 수 있는 명령어를 작성(원시 코드)하는 작업으로, 프로그램 로직을 작성하고 알고리즘을 구현하며 문제를 해결하기 위한 코드를 작성하는 활동
  • 프로그래밍(programming): 문제 해결을 위해 컴퓨터에 명령을 전달하는 전체적인 과정으로 문제를 이해, 정의하고 요구사항을 분석하며 그에 따라 적절한 알고리즘과 데이터 구조를 선택한 후 코드를 작성하는 단계와 함께 디버깅, 테스트, 최적화 등의 소프트웨어 개발 과정을 포괄하는 개념으로 컴퓨터 시스템을 생성하고 유지관리하는 프로세스



프로그래밍 원리

앞서 용어 정의와 같이 코딩은 프로그래밍 작업이다. 이러한 구현단계의 목표는 설계 명세에 나타난 대로 사용자 요구를 만족할 수 있도록 프로그래밍을 하는 것이다. 이렇게 하기 위해서는 코딩 단계에서는 전 단계의 문서들을 잘 참조하여야 한다. 특히 무엇보다도 오류가 적은 품질 좋은 프로그램을 작성하는데 그 목표가 있다. 신속성도 중요하지만 견고한 코드를 만들어내는 것에는 많은 연습과 경험이 필요하다. 이를 위하여 수많은 원리와 가이드를 만들고 잘 참고해야 한다.

일반적인 객체지향 코딩에는 다음과 같은 단계가 있다.

  • 원시 코드 스타일의 코딩표준 작성
  • 아키텍처 설계 결과 프레임워크 패키지와 응용 패키지 결정
  • 패키지 내 각 클래스에 대해 요구사항과 상세설계를 반영한 메소드 코딩
  • 클래스 구현 후 인스펙션 실시
  • 클래스 단위 테스트 진행
  • 클래스/패키지를 배포, 통합

이러한 작업을 진행하면서 오류는 프로그래머가 가장 신경 써야 할 부분 중 하나다. 개발과정에서는 특히 많은 시간이 오류를 찾고 해결하는 데 쓰이는데 일정 부분 이상은 흔히 발견되는 오류로 이를 알고 접근한다면 많은 부분의 비용을 절감할 수 있다. 아래는 여러 오류 중 중요한 몇 가지의 예이다.

  • 메모리 누수: 이는 메모리가 풀리지 않고 계속 할당하는 현상으로 보통 가비지 컬렉션이 자동으로 되지 않은 언어에서 이러한 오류가 자주 발생한다. 메모리 누수는 규모가 작은 프로그램에서는 영향이 적지만 대규모 환경에서는 시스템에 매우 치명적인 영향을 줄 수 있으므로 반드시 잡아야 한다.
  • 중복된 해제 선언: 프로그램 내에서는 자원할당 후 사용 후 해제해야 한다. 그런데 해제된 자원을 또다시 해제하는 경우도 매우 심각할 수 있다. 만약 두 개의 해제문장 사이에 메모리 할당 호출이 있다면 이런 오류의 영향은 예측할 수 없다.
  • NULL: null을 포인트하고 있는 곳의 내용에 접근하려고 하면 오류가 난다. 이는 시스템을 다운시키기에 충분하다. 그런데 찾기도 어려운 것이 이것이다.
  • 배열 인덱스 오류: 배열 인덱스의 한도를 벗어나면 예외 오류가 발생한다. 그러므로 인덱스가 음수 또는 한도를 벗어나지 않는지 항시 확인하여야 한다.
  • 수식 예외: 0으로 나눈다거나 변동 소수점 예외 오류 등이다. 
  • 사용자 정의 자료형: 오버플로우나 언더플로우가 특히 많다. 
  • 버퍼 오류: 보안결함에서 많이 발견되는 유형으로 해커들의 잠입 루트가 되기도 한다. 
  • 동기화: 공통된 자원에 접근하는 다수의 스레드가 있는 병렬 프로그램에서 흔하게 발견된다. 이 또한 쉽게 발견되기가 어려운데 시스템에는 막대한 지장을 줄 수 있다. 흔히 deadlock이 여기에 속한다.

구조적 프로그래밍, 이를 위해서 많이 사용하는 제어구조가 있는데 순차, 선택, 반복이다. 이 또한 제대로 된 흐름제어 기준을 정해놔야 한다. 무조건적인 제어의 흐름을 막고 알고리즘을 명확하게 구현할 수 있는 가이드를 제시하고 공유한다. 물론 근래의 프로그래밍 언어들은 이를 고려하여 여러 명령어나 제약을 두고 있으며 필요하다면 비구조적 문형으로 개발을 할 수도 있다.

또한 모든 프로그램에는 항상 도메인에 관한 정보를 다루기 때문에 자료구조가 항시 존재한다. 그래서 특정 정보에 대해서는 정해진 오퍼레이션만 적용된다. 즉 문제 도메인에 있는 아주 작은 정보가 제한된 방법으로만 사용된다는 것이다. 이를 앞서 다뤄본 정보은닉의 원리 적용이다. 정보은닉이란 모듈 사이의 결합을 줄이고 시스템의 유지보수를 쉽게 만드는 장점을 가지고 있고 데이터를 관리하려는 관점과 데이터를 사용하는 관점을 분리할 수 있는 것이다.



코딩 스타일

프로그래밍 스타일이다. 같은 작업을 위하여 여러 사람이 작성한 프로그램들은 문장의 패턴이나 그 구성 등 여러 면에서 다른 스타일을 보인다. 각자의 개성이다. 하지만 이를 방치할 경우 프로젝트는 원하는 목표를 달성하기 어렵다. 그래서 가르치고 학습할 수 있는 공통된 스타일을 만들어야 한다. 물론 여기에서도 기준을 구하기 어려울 수도 있지만 가장 근본은 간결하고 읽기 쉬워야 한다는 것이다. 이를 기준 삼아 코딩 스타일을 만든다.

  • 명명 규칙 예
    • 패키지: 타 사용자들을 위해 패키지 이름 앞에 도메인명을 붙인다. 이를 통해 패키지의 용도와 목적을 잘 나타낼 수 있다.
    • 타입: 클래스(명사)와 인터페이스(명사, 형용사) 등의 명칭 첫 글자를 대문자로 한다. 이는 일반 변수와 구별할 수 있다.
    • 메소드: 타입과 달리 첫 글자를 소문자(동사)로 하고 연속되는 단어의 첫 글자는 대문자로 한다. 이는 메소드 호출과 생성자 호출과 구별할 수 있게 해준다.
    • 변수: 메소드와 같은 형식이다.
    • 상수: 보통 대문자로 구성하며 단어 사이는 밑줄로 연결한다.
  • 포인터와 레퍼런스: 포인터를 매개변수로 사용하지 않고 레퍼런스 타입으로 한다.
  • 자료형: 오브젝트 타임을 돌려보내는 클래스는 특정 타입의 객체를 배출하도록 캐스트 한다.
  • 문장과 수식: 반복 문장이나 수식은 메소드나 클래스로 패키지화하여 사용한다.
  • 오류처리: 오류 데이터 타입 제한, 입력 처리 전 데이터 소스와 인터페이스 하여 사전 확인 등의 방법이 필요하다.
  • 들여쓰기: 코드 블록의 계층 구조를 명확하게 표현할 수 있게 공백 문자나 탭을 사용한다.
  • 주석: 코드 설명을 부가적으로 추가한다. 양의 문제보다는 내용을 정확히 전달하는 것이 중요하다.
  • 코드 문서화: 다른 사람들이 정확하게 사용할 수 있도록 주석을 명확히 하고 문서화도 병행한다.
  • 포맷 도구 사용: 개발 환경 편집기에 있는 기능으로 스타일가이드를 바탕으로 세팅하여 사용할 수 있다. 이를 통해 일관된 스타일 유지가 가능하다.