새로운 프로젝트 관리 프레임웤 share

today 2010-02-14 face Posted by appkr turned_in Work & Play forum 0

2010년 1월 1일자로, 1년을 떠나 있던 소프트웨어 연구소로 다시 돌아 왔다. 내가 이 회사에 들어 와서 만난, 내 인생의 역할 모델로 삼는 분과 다시 일하게 되었다.

• • •

소프트웨어개발조직 전체의 프로젝트를 한눈에 보고 관리할 수 있는 프레임웤을 좀 다듬었다. 내가 속한 조직에서는 이것을 “기술확보계획”이라고 한다 (이하 ‘계획’이라고 함).

  • 이 계획은 1년간 수행할 전체 프로젝트를 목록화한 장표이다.
  • 이 계획은 (미 확정 프로젝트들까지 포함하여) 목록화 함으로써, 리소스 시뮬레이션을 제공하며, 프로젝트의 제약사항을 미리 확인하고, 적절한 기술확보방법(내부개발, 외주개발, 라이센스-인)을 미리 선정할 수 있도록 한다.
  • 이 계획은 타 조직과의 강력한 의사소통 도구이다.
• • •

프로젝트 수행이 확정되어 ‘계획’에 등재된 항목은 시작할 시점에 자연스럽게 kick-off 되고, 그 후 일반적인 소프트웨어 개발 프로세스–개발계획->설계->구현->검증 및 완료–에 따라 수행된다.

우리 연구소는 매트릭스형 조직으로 운영된다. 리소스매니저, 프로젝트리더, 프로젝트구성원으로 구성된다. 전체소프트웨어개발조직은 리소스풀과 같이 운영되고, 각 하부 조직의 리소스매니저는 소속 구성원들에게 엔지니어로서의 비전을 제시하고 행정적인 업무를 처리하며, 이 ‘계획’을 통해 지정된 프로젝트리더는 프로젝트를 수행할 구성원을 리소스매니저로 부터 할당 받는다. 매트릭스형이 아닌 기능별 조직에서도 이 방법을 적용하여 성공적으로 프로젝트를 수행한 바 있는 검증된 솔루션이다.

이 계획을 통해 타 조직과 수시로 의사소통하며, 입력된 내용을 정리하여 정기적으로 업데이트 되고 배포 된다.

• • •

계획

[그림 유실] “계획”

“계획” 장표는, 의존관계에 있는 외부 마일스톤, 프로젝트 명, 프로젝트 리더, (대략적) 일정 계획 및 마일스톤, 투입 리스소, 리소스 투입율이 표시된다. 엑셀의 그룹 기능을 이용하여, 각 프로젝트 노드별로 확장/축소가 가능하다. 사각형을 음영된 부분에는 각 리소스의 월별 투입량을 입력한다. 하나의 프로젝트에 대한 전체 리소스 투입량 (man * month)는 자동 계산된다.

우리 연구소에서 의존관계에 있는 외부 마일스톤은 SoC(System on Chip)의 일정이다. 소프트웨어를 개발할 하드웨어가 있어야 개발 업무를 수행할 수 있기 때문이다.

향후 1년간 수행될 프로젝트가 모두 나열되어 있으니, 리소스의 충돌을 확인할 수 있으며, 프로젝트의 우선순위를 조율하고, 프로젝트 수행 방법(내부개발, 외주개발, 라이센스)을 미리 선택할 수 있도록 돕는다. 가령, 새로운 프로젝트에 대한 input 을 받았다고 가정해 보자. 리소스 가용성과 가용한 리소스의 역량에 기반한 프로젝트의 수행 가능성을 쉽게 가늠해 볼 수 있을 것이다.

월간 진도는 색깔 점으로 표시한다. 가령, 2월 말에 진도를 체크한다면, 2월 말에 색깔 점이 있으면 on schedule 이며, 2월 말 이전 또는 1월에 색깔 점이 있으면 delayed 를 의미한다. 각 프로젝트에 찍힌 색깔 점들을 선으로 연결하면, 어떤 프로젝트가 중점 관리해야 할 프로젝트인지 한눈에 확인할 수 있다.

Team Load

[그림 유실] Team Load

팀 전체의 업무량과 가동율이 표시된다. 이는 “계획” 장표에 입력된 리소스의 월별 투입량에 의해 자동 계산되며, 과다 할당/과소 할당이 대시보드 형태로 표시될 뿐만 아니라, 그래프로도 표시된다.

이를 기반으로 미래의 적정 인력계획/조직계획/배치계획을 할 수 있을 뿐 아니라, 과거의 리소스 운용 실적에 대한 체크도 할 수 있다. 어느 하부 조직이 로드가 많을 것인지 뿐 아니라, 리소스 유휴가 있을 경우 어떤 역량을 키울 것인지에 대한 역량 확보 계획의 참고자료가 되기도 한다.

하부 조직 별로 프로젝트가 구분되어 있어, 각각 =sum() 함수와 조건부 서식, 엑셀 그래프를 사용하였다.

Personal Load

[그림 유실] Personal Load

개인의 업무 할당이 표시된다. 역시, “계획” 장표에 입력된 리소스의 월별 투입량에 의해 자동 계산되며, 과다 할당/과소 할당이 대시보드 형태로 표시된다.

리소스매니저와 프로젝트리더들에겐 프로젝트 구성원 개개인의 로드를 조정할 수 있을뿐 아니라, 1년이 지난 시점에서 각 개인들의 업무성과를 되돌아 볼 수 있게 하는 도구가 된다.

조직 구성원 개개인에겐 향후 1년치 투입 프로젝트를 알려 줌으로써, 개인에게 비전을 제시하고, 개인이 해당 프로젝트를 통해 어떤 역량을 키울 수 있는지, 조직에 어떤 기여를 할 수 있는 지, 언제 쯤 업무가 몰리는 지를 시각적으로 예상할 수 있게 한다.

=sumif() 함수와 조건부 서식을 사용하였다.

이 프레임웤의 의미

이 계획은 Action Plan 을 함축하고 있다.

본 계획을 수립하는 과정에서 다양한 이해관계를 가진 서로 다른 조직 구성원들을 모이게 만들고, 서로가 가지고 있는 정보와 의견을 교환하게 만든다. 이 과정에서 구성원들 간에 조직의 비전과 기술적 비전에 대한 Matching 과 Common Framework 를 가지게 한다. 본 계획은 전략적 시사점을 도출하게 하고, Action 을 드라이브 하는 촉진제가 된다.

이 계획은 사업계획과 사업전략 이해에 도움을 준다.

본 계획을 작성하는 과정에서 제품/기술과 사업계획/사업전략간의 연결고리의 이해를 촉진시켜 사업계획을 지지하게 만든다. 사업전략, 로드맵, 본 계획이 각각 블랙박스에서 만들어 진 것이 아니라, 서로 엮어져 있으며 상호간에 학습을 촉진키켜 학습곡선 형성에 도움을 준다.

이 계획은 간결하면서도 충분한 정보를 전달한다.

의사소통을 향상시키기 위해 본 계획은 시각적으로 간결하게 표현한다. 본 계획은 “왜”, “무엇을”, “언제”, “누가”, “어떻게”에 대한 정보를 담고 있다. 시각화 이면에 담긴 정확한 정보(개발범위/항목/성능)를 전달하기 위해, 사내 기간 시스템등에 저장된 개발계획과 개발완료보고에 대한 링크를 제공할 수도 있다.

• • •

 

덧글 2010-01-25

그림 “계획”은 프로젝트 기준으로 각 프로젝트에 투입되는 리소스가 달려 있다. 그리고, 그림 “Team Load” 와 “Personal Load” 는 그림 “계획”을 기반으로 자동 계산되는 장표이다.

이런 요구사항이 있었다. ‘리소스를 기준으로 프로젝트를 배치하라.’ 각 개인이 언제부터 언제까지는 어떤 프로젝트에 투입되고, 그 이후에는 어떤 프로젝트에 투입되는 지 미리 알기 위함이다. 또, 이를 바탕으로 면담을 수행하고, 각 개인에게 한 해 동안의 투입 프로젝트에 대한 계획을 알려 주고, 비전을 심어 주기 위한 것이다.\

매달 업데이트되는 데, 매달 수작업 한다는 것은 말도 안 된다. (2002년 이후) 참 오랜만에 코딩을 했고, 구현해 냈다 휴~. Visual Basic 으로 짠 코드 수준이 공개하기에는 완전 쪽 팔리는 수준이라, 기억을 더듬어 Pseudo Code 만 기록해 놓기로 한다.

Sheets 객체는 다음과 같다: plan, personal

Sub RearrangeData()
  Dim my Value As Variant 'personal' 
  
  ' 시트의 첫 리스소 이름 위치를 Activate 한다.
  myValue = Sheets('personal').ActiveCell.ValuecountAllocation(myValue)
  
  반복문 (countAllocation 번)
    insertRow()
    copyPaste()
    조건문 시작 (countAllocation이 myArray 의 배열 요소 숫자와 같으면)
      myValue = Sheets('personal').Cells.Offset(1,0).Value
      countAllocation(myValue)
    조건문 끝
  반복문 끝
End

SubFunction countAllocation(myValue)
  ' plan 시트에서 인수로 전달 받은 myValue 에 해당하는 리소스 이름의 개수를 반환한다.
  ' 해당 리소스가 있는 셀 번지를 배열 myArray 에 저장한다.
End

FunctionFunction insertRow()
  ' personal 시트의 해당 리소스 이름 아래에 행을 추가한다.
End

FunctionFunction copyPaste()
  ' myArray 에 있는 countAllocation 번째 값을 얻어 plan 시트의 해당 행 전체를 복사하고
  ' personal 시트의 ActiveCell 이 속한 행에 붙여 넣는다.
End 

Function[/code]
comments powered by Disqus
keyboard_arrow_up