2008년 11월 18일
성공적인 프로젝트 관리 (How to Make Software Development successful)
소프트웨어 개발 프로젝트를 성공적으로 관리하기란 사실상 매우 힘들다.
프로젝트를 성공적으로 수행하기가 매우 힘드록, 대다수의 프로젝트가 실패함에도 불구하고 대한민국에서 실패하는 프로젝트는 없다. 이는 우리나라의 경우 실패의 경우 데이터 자체가 존재 하지 않기 때문이다. 프로젝트가 실패하는 경우는 매우 많은 요소가 작용을 하는데 실패하는 소프트웨어 개발 프로젝트의 징후 라는 포스트에서 그 일면을 볼 수가 있다.
위의 링크의 포스트의 경우처럼 프로젝트의 성공이 힘들지라도 프로젝트는 성공하기 위해서 수행 되어져야 하며,
컨트롤이 불가능한 외부 요인을 제외한 내부에서 노력할 수 있는 방법에 대해서 이야기 해보자
1. 명확한 요구사항의 파악
프로젝트의 수행은 요구사항 분석, 설계, 구현, 테스트로 나누어 지는데, 소프트웨어의 개발 요청자 조차도 명확하게 자신이 원하는 것을 표현하지 못한다. 최대한 개발 요청자가 생각하는 목표와 분석 담당자가 서로의 거리를 좁혀야 하며, 설령 이렇게 거리가 좁혀진다 해도 개발 진행 중에 변경되는 요구사항은 수없이 많다. 그렇다고 원래 그런거니까 하고 넘어가면 안된다. 가능한한 명확하게 요구사항을 파악하라.
2. 소프트웨어 추정
대부분의 프로젝트가 요구사항정의에 의한 개발 기간의 추정이 아니라, 뜬구름 잡는 개발 요청이 발생함과 동시에 개발일정이 잡혀지는 것이 실정이다 . 설령 요구사항 정의에 의한 개발 기간 추정의 단계를 밟는다. 할 지라도, 1번에서 언급한대로 모든 요구사항을 명확히 정의하고 진행되는 프로젝트는 이세상에 존재하지 않을 지도 모른다. 이를 극복하기 위해서는 watefall model 보다는 spiral model이 성공적인 프로젝트 수행에 적합하다.
3. 팀원의 구성
분석된 요구사항을 수행할 수 있는 능력을 가진 팀원과 인원을 배정할 수 있다면 개발의 최상의 조건일 것이다. 문제는 소프트웨어 개발 자체가 적정인원과 개발 스킬을 가진 팀원을 배정하기 힘들다는 데 있다. 우선 개발 인력 pool 자체를 여유있게 가져가는 경우가 드물 뿐더러, 개별 개발자의 능력이라는 것이 천차 만별이다. 또한 프로젝트를 수행하는데 적절한 기술 매트릭스를 가지고 있기가 힘들다. 프로젝트를 성공적으로 수행하기 위해서는 프로젝트의 관리자가 개발에 요구되는 기술 매트릭스와 개발 인원을 적용하는 것이 필요조건이다.
4. 개발 수행
구성된 팀원으로 이제 실제적인 개발 작업에 들어가야 한다. 이를 수행하는데 몇 단계를 거치게된다.
4.1 개발 해야할 부분을 잘개 쪼갠다.
전체 프로젝트를 먼저 개발해야 할 부분, 공동으로 개발해야할 부분, 후반부에 개발해야 할 부분을 최대한 명확하게 나누어 팀원에게 분배한다.
4.2 공동으로 맞추어야 할 작업을 분리 시켜 최대한 작업자간에 겹치지 않게 한다.
작업이 쪼개지게 되면 팀원간의 공동으로 처리 해야 할 부분이 생기게 된다. 연관된 팀원의 작업이 진척되지 못하게 전체 프로젝트 자체가 lock 이 발생하게 되는 부분이 이부분이다. 또한 이 공동 작업 부분은 많은 커뮤니케이션 비용을 발생시키게 되며, 개발 수행 기간 동안의 프로젝트 성패를 좌우한다. 최대한 공동으로 작업해야 하는 부분을 줄이고, 철저하게 관리 해야한다.
4.3 작업 진척도를 따라오지 못하는 팀원의 관리
모든 개발 작업이 순조롭게 잔행되면 이상적이겠지만, 4.2의 관리를 한다고 할 지라도 공동 개발 부분과 개인 개발 부분에서 진청이 안되는 팀원이 발생하게 된다. 팀원이 개발 진척도를 따라가지 못하는데는 많은 이유가 있을 수 있다.
관리자는 프로젝트의 일정으로 무조건 쪼기 보다는 조언자의 입장에서 그 이유에 대해서 팀원과 대화 해야 한다. 작업을 진척 시키는 팀원의 입장에서는 관리자가 일정을 언급하는 것 만으로도 개발 의욕을 상실 할 수 있는데, 관리자는 팀원을 신뢰해야 하며, 문제 파악과 조언의 관점으로 접근해야 한다.
가) 자신이 개발 해야할 부분을 명확하게 이해하지 못했다. - 관리자는 여러가지 수준에서 팀원에게 이해 시켜야한다.
나) 이해 했음에도 기술 수준이 높아 따라가지 못한다. - 관리자 자신 또는 팀내에서 기술 수준이 높은 개발자로 하여금 돕게 해야 한다. 물론 모든 부분을 코딩까지 해 줄 수는 없겠지만, 이를 팀원 개인의 잘 못으로 본다면, 팀원을 프로젝트에서 제외하는 것 이외에는 해법이 없으며, 이는 성공에 바람직하지 않다. 또한 프로젝트에 적용하는 기술수준의 결정은 팀 전체의 기술 수준 여부에 따라 결정되었어야 할 요소로써, 그 수준을 명확하게 파악하지 못한 관리자에게도 책임이 있기 때문이다. 프로젝트에 적용할 수 있는 기술 수준은 팀전체의 기술 평균으로 부터 적용 되어야 할 요소이며, 최상의 기술을 가진 팀원의 수준에 의해 결정되어서는 안된다.
다) 최고의 팁 , 칭찬을 아끼지 마라 - 개발의 기간내내 종종 개발 결과 물에 대한 리뷰가 진행 된다. 이때, 진행되고 있는 상황에 대해서 파악을 하고 개발 일정에 요구되는 품질 수준이 된다면 칭찬을 아끼지 말고 의욕을 북돋아 주는 것이 필요하다. 일정과 품질에 미치지 못한다면 가)와 나)의 경우인지 살펴 보고 action을 취해야 한다. 개발에 대한 리뷰를 일정 쪼기가 아닌 신뢰를 쌓는 단계임을 명심해야 한다.
라) 그래도 의욕도 없고 진척이 없는 팀원 - 가),나),다)의 방법에도 불구하고 라)의 경우가 발생하게 되는데 이는 방법이 없다. 가)나)다)를 반복한다. 이후에 다른 결정이 필요하다.
* 개발을 성공적으로 수행하는데에는 개발 비용을 줄이는 것이 필수이며 이 비용을 줄이는 방법에 대한 포스트를 읽기를 바란다. 소프트웨어 개발 비용을 줄이는 방법
5. 프로젝트 완료
위의 1~4 단계를 밟아 진행을 했다. 프로젝트의 성공적인 완수에 가까워 졌지만, 아직도 프로덕트에는 개발시 생각하지 못했던 요구사항의 추가와 내부에 있는 버그로 갈등이 발생할 수 있다.
최대한 상냥하게 1~5까지를 Iterate 한다.
6. 명확하게 프로젝트의 끝에 선을 긋는다. - 요구사항은 끊임 없이 발생하게 된다. 이를 다 들어주다 보면 프로젝트는 끝이 나지 않는다. 적절한 시점에 선을 긋는 것 또한 관리자의 임무이며, 추가 개발 요구 사항은 다음 번 개발 스케쥴을 잡는 것으로 마무리 한다.
짝짝짝!!!
축하합니다. 당신은 성공적인 프로젝트를 수행 하였습니다. 고생 많았습니다,
하루 정도는 자신에게 칭찬하면서 휴식 시간을 보내 시길 ^^
# by | 2008/11/18 16:57 | Autobiography | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]