본문 바로가기

독서는 마음의 알콜

소프트웨어 프로젝트에서의 리스크관리

Tom DeMarco / @parkh37t
 
 프로젝트에서 성숙(mature)이라는 것은 발생할 가능성이 있는 나쁜일(Risk)들을 체계적으로 기록하고 대책을 세워 나가는 자세를 보이는 것을 말한다. 그러나 IT업계에서 흔히 이야기하는 '성숙(maturity)'과는 의미가 다르다. 소프트웨어 개발자들은 '성숙'을 기술적인 숙련(proficiency)과 동일시 한다 그런 관점에서 성숙도를 5단계로 평가하는 CMM(Capability Maturity Model, 능력 성숙도 모델-초기-반복-정의-관리-최적화)이라 부르는 체계 까지도 가지고 있다.
 
 소프트웨어 프로젝트의 불확실성
1. 요구사항(requirement) : 정확히 무엇을 하기 위한 시스템인가?
2. 정합성(match) : 사용자 및 다른 관련 시스템과 어떻게 연계할 것인가?
3. 환경 변경(changing environment) : 개발 기간 중에 요구와 목표들이 얼마나 변경되는가?
4. 자원(resources) : 프로젝트를 위해 필요한 핵심 기술을 가진 사람을 확보할 수 있는가?
5. 관리(management) : 관리 조직에게 생산성이 높은 팀을 구성하며 사기를 유지하고, 인원 변경을 최소화하면서 관련 업무간의 복잡한 관계들을 풀어 나갈 능력이 충분히 있느가?
6. 공급망(supply chain) : 다른 관련 조직들이 기대대로 대응해 줄 것인가?
7. 정치(politics) : 현실을 호도하여 프로젝트의 궁극적 성공과는 상충되는 제약들을 부과하는 경우 어떤 영향이 있을까?
8. 상충(conflict) : 다양한 이해 조직 간의 상호 양립할 수 없는 목적들을 어떻게 다룰 것인가?
9. 혁신(innovation) : 이 프로젝트에만 적용된 기술이나 접근 방식이 최종 결과에 어떤 영향을 미칠 것인가?
10. 규모(scale) : 과거에 경험하지 못한 큰 규모가 프로젝트 성과에 어떤 영향을 미칠 것인가?

리스크 관리는 리스크를 해금한다. 즉, 리스크 관리를 위해서는 제한적으로 '할 수 없다' 식의 사고가 허락 될 수 있어야 한다.

리스크라는 것을 관리할 수는있지만 제거할 수는 없다. 리스크가 현실화 되지 않게 한다는 생각에 기반을 둔 '성공 지향 관리' 방법은 리스크가 현실화 되었을 때 프로젝트를 재난으로 몰고 간다.

일이 잘못 될 수는 있다. 그러나 불확실한 것은 용서할 수 없다.

소프트웨어 프로젝트 작업에서는 승리를 위한 무언가를 시도하는 것 보다는, 실패의 크기를 제한하는 것이 평균적으로 볼 때 더욱 중요하다.

소프트웨어 관리자들은 대부분 '해야만 하는' 일에 대해서는 합리적인 예측을 하지만, '해야 할지도 모르는' 일을 예측하는 데는 매우 취약하다.

어제의 문제가 오늘의 Risk 가 아니라 오늘의 문제가 어제의 Risk 다.

1. 리스크를 회피한다.(avoid)
- 리스크를 회피 하는 것은 아예 프로젝트를 그만두거나, 리스크를 수반하는 프로젝트의 일부분을 하지 않는 것이다. 이처럼 리스크를 회피하는 경우 자연스럽게 리스크를 수반하는 일에서 얻을 수 있는 이익을 잃게 된다.

2. 리스크를 수용한다.(contain)
- 리스크를 수용한다는 것은 그것이 현실화 될 때를 대비해서 충분한 시간과 돈을 확보해 놓는 것이다. 실제로 리스크 하나를 수용하는 것은 의미가 없다. 대신 전체 리스크를 수용해야 한다. 일부는 현실화 되고 나머지는 그렇게 되지 않는다. 리스크 수용 전략 하에서는 현실화 될 수 있는 리스크를 상쇄하기 위해서 평균적으로 충분한 자원을 확보한다.

3. 리스크를 완화한다.(mitigate)
리스크를 완화한다는 것은 궁극적인 리스크 수용 비용을 줄이기 위해 그것이 현실화되기 전에 대응하는 것이다. 선택한 수용전략이 전이 기간 동안에 수행될 수 있도록 하기 위해서는 사전 대응이 몇 단계 요구 된다.

4. 리스크를 모면한다.(avade)
리스크를 모면한다는 것은 위의 3가지 중 어느 행동도 취하지 않지만 리스크가 별 말썽을 일으키지 않는 경우다. 리스크가 현실화되지 않는다는 것이다. 즉 현실화 되지 않는다는 것인데, 리스크를 모면하기로 결정했다면 그 다음은 운에 맡기는 수 밖에 없다.

위의 1~3까지는 돈이 들어간다. 회피를 하면 이익이 줄고, 수용을 하려면 리스크에 대비한 예비비(reserve)가 필요하고, 완화를 할 때도 수용비용을 줄이기 위한 사전 대응을 위해 어떤 형태로든 비용이 들어간다. 오직 리스크 모면만이 공짜다.(http://www.systemsguild.com/riskology/)

[모든 소프트웨어 프로젝트에 공통적인 리스크]
1. 원래 일정의 결함
2. 요구사항의 확대(시간에 따라 요구사항이 조금씩 늘어나는 것)
3. 인원의 교체
4. 설계 명세 붕괴(specification breakdown)
5. 낮은 수행 능력(under0performance)
위의 내용 중 맨 마지막이 관리 또는 수행능력과 관련된 것이며, 나머지 4개는 당신이 얼마나 열심히 일하는가? 그리고 얼마나 경쟁력이 있고 능숙한가와는 거의 무관하다.

프로젝트 시한이 다 되어 갈때 모든 것들이 변한다. 그떄가 되면 경영층이 개입하여 모든 시스템을 합의한 날에 한번에 전달하는 대신 소프트웨어가 단계적으로 인도될 것이라고 선언한다. 약속한 날짜에 1단계 산출물이 새로운 사용자들에게 전달되지만, 전체 시스템에 대한 인도는 4단계가 지나든 9단계가 지나든 간에 완료 되지 않고 1달이 지나고 1년이 지나도 마찬가지다. 이런 선언을 통해 지연으로 인한 고통을 달래려는 것이다. 왜냐하면 원래 예정일에 적어도 무언가는 인도할 수 있기 때문이다. 그렇다면 그 무언가란 무엇일까? 적어도 한국의 프로젝트 문화에서 보면 내부/외부 감리라는 프로세스가 있다. 하지만 여기서도 공통적이고 실망스런 답이라는 것은 납기일이 얼마남지 않았으니까, 1단계 산출물은 우리가 이미 만들어 놓은 것이 되어야만 한다. 라는 것 밖에는 없다는 것이다.

프로젝트에서도 자신 없는 것을 먼저 하는 것이 낫다. 그렇게 하면 처음에는 주도권을 잃게 되고 사건들이 터지면서 일은 어려워질 것이다. 그러나 일찌감치 그렇게 함으로써, 힘을 축적하게 되고 재기하여 주도권을 다시 되 찾을 수 있다.

납기일자가 중요한 프로젝트는 일찍 시작하는 것이 진정한 리스크 완화이다. 하지만, 일찍 시작하려는 그 계획 자체가 비용이며 일정에 아주 중요한 관련이 있다.

ROI = 기회비용/비용

IT의 가장 큰 리스크가 기술적(제품관련)이거나 사회적(프로젝트 관련)인데 반해 기업의 가장 큰 리스크는 가치오 ㅏ관련되어 있다. 낮은 가치의 프로젝트에서 낭비되는 노력, 그리고 높은 가치의 프로젝트를 놓치는 데 따른 기회 비용이 그것이다. 이익이라는 잣대를 통해 공격적인 리스크 관리의 태도를 통제해야 한다. 얼마나 많은 리스크를 감수할 것인가는 얼마나 많은 이익을 기대할 수 있는가에 달려 있다.

미래의 시장 불확정 구간은 이햐기하기는 쉽지만 이를 과거 사실에 근거하여 제시할 수 있는 사례는 거의 없다. 비지캘크(VisiCalc)는 명백히 시장 불확정 구간이 끝나기 전에 제품을 출시 했다고 하지만, 로터스 노츠(Lotus Notes)는 어떻게 설명할 것인가? 그리고 스프레드시트에 대한 모든 시장 불확정 구간은 엑셀(Excel)이 나오기 이미 오래전에 끝난 것으로 생각 되었다. 엑셀이 시장을 주도하는 스프레드시트가 되었다는 사실은 매우 혼돈 스러운 일이다. 그리고 구글(Google)은 이미 아주 한참이나 시장 불확정 구간을 놓쳐 버렸기 때문에 결코 주도적인 검색엔진이 되지 못했어야 했지만, 어쨌든 주요 검색 엔진이 되었다. 가치가 리스크를 상쇄한다.

죽음의 행진(Death-March Project)에서는 모든 프로젝트 인원 개개인에게 불굴의 희생정신을 요구한다. 사생활을 포기하고, 잔업을 계속하고, 사무실에서 주말을 보내고, 가족과 떨어져 지내야 하는 것 등을 요구한다. 프로젝트에 대한 헌신 이외에는 받아들여지지 않는다.

우리의 경험상 죽음의 행진 프로젝트의 공통적 특징은 기대치가 낮다는 것이다. 이들 프로젝트는 마치 기념비적으로 하찮은 제품을 내놓는 것을 목표로 하는 것 같다. 족음의 행진에 대한 진실은 가치가 너무 낮아서 보통의 비용을 들여 프로젝트를 했다가는 효과보다 더 많은 비용이 들어갈 것이라는 것이다. 오직 영웅적인 노력이 있어야만 돼지조차도 날 수 있도록 만들 수 있다. 죽음의 행진 프로젝트의 둘째 특징은 회사의 이익을 위해 개인의 생활을 희생하도록 호도한다는 것이다. 그들은 그렇게 하는 것만으로 모두가 납득 할 수 있는 아주 적은 비용으로 작은 가치의 노력이나마 정당화할 수 있다.고 믿는다. 죽음의 행진 프로젝트의 셋째 특징은 모든 사람들이 무기력과 분노를 느끼게끔 아무 결과도 내지 못한 채9보통은 평군 이상의 비용이 소요) 항상 대 실패로 끝나 버린다는 것이다.