달력

072010  이전 다음

'2008/프로젝트 로그'에 해당되는 글 50건

  1. 2009/10/23 작업(Task)으로 기록하기 힘든 것 (1)
  2. 2008/11/19 SRS(Software Requirements Specification)를 작성할 때 유의할 점 (10)
  3. 2008/11/19 '이슈 트래커' 관련 글은 어디에... (4)
  4. 2008/11/14 프로젝트 내부 세미나 (1)
  5. 2008/11/06 산출물을 영리하게 만들지 못할 뿐, 애꿎은 산출물 탓은 하지 말자 (2)
  6. 2008/10/30 IE와 파일 다운로드 구현
  7. 2008/10/24 기술적인 논쟁, 그리고 ... (4)
  8. 2008/10/23 Non-Goals (2)
  9. 2008/10/20 다시 보는 Published Interface
  10. 2008/10/14 회의시간 절감을 위한 개발팀 회의 프로세스 (2)
  11. 2008/10/06 업무수행능력의 세 가지 차원
  12. 2008/10/02 Agile Context in Development라... 그림 좋네 (3)
  13. 2008/09/30 이슈트래커(trac) 설정 + 마이린(Mylyn) 연결
  14. 2008/09/18 비전문에 꼭 필요한 내용
  15. 2008/08/26 프로세스의 필요성(a.k.a 매뉴얼의 필요성) (2)
  16. 2008/08/08 이슈트래커(trac) + Mylyn의 효용성 (1)
  17. 2008/07/25 도와주세요! 팀장이 됐어요
  18. 2008/07/08 Xper 메일링 리스트 쓰레드
  19. 2008/07/02 [자료] Business Process Maturity (2)
  20. 2008/06/27 소프트웨어 엔지니어링이란? (1)
  21. 2008/06/25 애자일 선언 in Practice (3)
  22. 2008/06/19 뒤늦은 애자일 논쟁 합류 > 다같이 모여서 터놓고 얘기하는 것보다 > 완전 동의 (2)
  23. 2008/06/18 실용주의자 in 형식주의 공화국(?) (5)
  24. 2008/06/14 난데 없는 애자일 논쟁? (2)
  25. 2008/06/14 애자일 진영의 초대 (11)
  26. 2008/06/13 SI 프로젝트에서도 애자일 프로세스는 가능하다 (3)
  27. 2008/06/05 회의에서의 의사진행 기법 (1)
  28. 2008/06/05 회고(Retrospective)를 회고하기 (1)
  29. 2008/05/31 프로젝트 전체 클래스 개수/Loc 등을 헤아리기
  30. 2008/05/23 이터레이션(Iteration)과 진화(Evolution) (4)
* 갑자기 불려가서 하는 회의
* 소프트웨어 업데이트(브라우저 등)
* 조언을 구하는 팀원이나 지인의 메시지에 응대하기
* 회의실을 예약해놓고, 승인을 기다리는 시간 (승인 여부에 따라 공지를 하고, 예약을 다시 해야 함)

이슈 트래커를 통한 작업 관리를 하며... 갑자기 생각나서 메모
단순 인터럽트로 보기 힘든 모호한 작업으로 공수 측정의 헛점
Posted by 영회
SRS(Software Requirements Specification)의 중요성을 보니 떠오르는 게 있어 포스팅합니다. 소프트웨어 공학은 잘 모른다고 해도, 현장 경험을 쌓다보면 수학 문제뿐만 아니라 소프트웨어 개발 역시 문제 속에 답이 있음을 배웁니다. SRS(Software Requirements Specification)의 중요성을 읽고 당장은 '음, 그래' 하고 공감을 한다고 하더라도 실천하는 과정에서는 수많은 시행착오를 거치게 됩니다. 예전에 저는 현장에서 겪는 시행착오를 이런 저런 글로 쓴 바 있습니다. 저 역시 그 안에서 시행착오와 함께 배우고 있습니다. 검색해보니 근 2년쯤 전에 이 정도까지 배웠더군요. 최근에 술자리에서는 이런 말을 한 바 있습니다.

고객은 요구사항을 모릅니다.
그래서, 고객이 정말 원하는 것을 터놓을 때까지 기다렸다가 요구사항을 만들어줬다.

이 내용을 좀 더 일반화시켜서 표현하면 다음과 같습니다.

고객은 무엇이 필요(Needs)한지 알 뿐, 그것을 어떤 형태로 충족해야 할 지(Requirements)에 대해서는 모른다.
요구사항 분석가(혹은 그 일을 하는 개발자, 설계자)는 고객의 니즈를 파악하여 요구사항을 정의해야 한다.

SRS(Software Requirements Specification)의 중요성에서 언급한 것처럼 SRS 템플릿은 매우 중요합니다. 우선 잘 만들어진 템플릿은 그렇지 않은 것에 비해 쉽게 작성할 수 있습니다. 결과적으로는 시간을 아껴주죠. 이를 개발 생산성 향상이라고 표현하기도 하죠. 그러나, 이때도 함정이 있습니다. 표준화라는 이름으로 자칫 일관성을 지나치게 강조하다가 중요하지 않은 것을 강제하는데 시간을 쏟는 경우들이 있습니다. 경험적으로 SRS 작성할 때 혹은 요구사항을 정리할 때 다음과 같은 내용이 도움을 줍니다.

  • 요구사항이 아닌 것을 정의하기(가령, 화면 그리드 기능을 정의한다고 하면, '동적인 컬럼 추가는 배제한다' 등)
  • 위와 같은 맥락으로 요구사항 검증 기준을 수립하기
  • 요구사항이 다양한 추상화 수준을 띄거나 다른 요건에 따라 영향을 받는 다면 혼선을 빚지 않도록 정리하라(사례: 요구사항에 대한 도메인 모델)
Posted by 영회
Trac
Trac과 함께한 2주
이슈트래커(trac) + Mylyn의 효용성
이슈트래커(trac) 설정 + 마이린(Mylyn) 연결
TRAC 0.10.4 Window 설치 정리
Subversion, Trac, SSL 함께 설치하기
Trac, 설정 파일(trac.ini)의 비밀
Trac과 SVN 연동: svn revision -> trac ticket 연동 

mylyn
마일린(Mylyn) 사용 팁
이슈트래커(trac) 설정 + 마이린(Mylyn) 연결
이슈트래커(trac) + Mylyn의 효용성
Mylyn 버전 문제로 인한 로그인 오류
Mylyn 2.0, Part 1: 통합된 태스크 관리
Mylyn 2.0, Part 2: 자동화 된 콘텍스트 관리 (한글)

이슈 트래커 비교
위키피디어 이슈 버그 관리 시스템 비교
이슈 트래커 개발자가 들려주는 이슈 트래커 이야기, Part 1: 무엇을 어떻게 골라쓸까
JIRA와 다른 이슈트랙커 비교 및 관련 정보
15 Useful Project Management Tools

JIRA
Using Keyboard Shortcuts on JIRA
JIRA를 이용한 이슈관리
JIRA Installation
Tomcat 6, MySQL에 JIRA(WAR/EAR 버전) 설치하기
요즘 프로젝트 진행을 JIRA로 보면...

Mingle
Mingle: Team Collaboration and Project Management Made Easy
Posted by 영회
지난 번에 IBM 개발자 수다에 갔는데 SI 개발자들의 지나친 야근이라는 화두가 있어 우리 경험을 들려줬더니 호응이 좋았다. 그래서, 관리자로서 가치 있다고 판단하고 실천하는 과정을 남겨본다.

매주 요일을 정해서 프로젝트 내부 세미나를 한다고 했더니, 지인이 어떤 걸 대상으로 하느냐고 물었다. 그래서 '딱히 정해진 건 아니고, 매주 설계에 관해서 오래 얘기할만한 것들을 모아서 한다'고 답했다. 그랬더니 단순히 업무연장이라고 판단했다. 업무 연장이긴한데 분명 다른게 있다는 점을 말해주려는데 쉽게 설명이 어려웠다. 그래서 동기부터 이야기를 해야했다.

애초에는 프로젝트 팀에 야간에 대학원에 가거나 신혼인 팀원이 있었다. 배려가 필요한 직원들이 최초 동기 부여 요소였다. 프로젝트 관리자로서 딱히 시급한 일이 아닌데 야근을 종용할 수는 없었다. 그러다 보니 흐름을 갖고 논의해야 할 중요한 이야기들을 중간에 그만둬야 할 때가 있었다. 이런 류의 논의는 맥락이 중요한데 그 날 마치지 못한 맥락을 다음 날에 이어가는 것은 많은 노력을 요했다. 종종 시간에 쫓겨 충분히 검토하지 않은 아이디어가 그대로 구현되어 버리는 경우가 발생했다. 그래서, 매주 요일을 정해놓고, 팀원 모두가 합의 하에 설계 리뷰를 하기로 했다. 하지만, 매주 논의할꺼리가 균일하게 쌓이는 것은 아니다. 지난 주에 처음 시행을 했을 때는 평소 수행하는 리뷰 회의와 다른 것이 없었다. 그래서, 두번째는 조금 형식을 바꿨다.

우선 프로젝트와 간접적으로 관계가 있으나 프로젝트 참여자가 아닌 사람을 참여시켰다. 그렇게 하자 리뷰에서 다루는 내용은 프로젝트 내용이긴 해도 설명은 다소 일반화 되었다.[각주:1] 그리고, 리뷰 내용은 향후 문서화를 염두해서 준비하도록 했다. 리뷰 준비는 원칙적으로 코드 조각이나 작동하는 프로그램으로 시연을 하는 방식이거나 발표자료 형식으로 준비를 하기로 했다. 토의때 논의하는 내용을 적절히 메모를 해서, 여러 주에 나눠서 연속으로 진행하는 세션은 흐름을 가진 스토리로 향후 문서화 가능하게 하기로 했다.

외부인의 참여로 리뷰 장소도 평소 프로젝트에서 회의하던 공간이 아니라 내방객 참여가 가능한 회의실로 바뀌었다. 이러한 형식적인 변화로 인해 우리의 내부 세미나는 더욱 "세미나"다워(?)졌다. 세미나 결과는 기대 이상으로 좋았다.팀원들은 서로 다른 팀원의 작업을 압축해서 전달받을 수 있었다. 지식 전달 효과가 상당히 뛰어났다. 이러한 효과는 유기적인 준비 과정에서 나왔다. 나는 관리자로써 이번 주 해야 할 일 중에서, 기술 세미나가 최소한의 기준 이상의 효과가 나오는 것을 주요 과제로 삼았다. 생소한 시도일수록 첫 인상이 스테레오 타입으로 남기 때문이다. 지난 주에 팀원 개별적으로 자신의 작업 가운데 발표할 사항을 선정하고 계획하게 했고, 어떤 내용(코드? 문서?)으로 발표할 것인지 확인했다. 그리고, 발표 전까지 적절한 간격을 두고 진척을 확인했다.

프로젝트 팀 입장에서 보면, 기술 세미나를 통해 평소 불현듯 튀어나와 회의 시간을 길게 잡아먹던 잠재 이슈를 상당히 줄일 수 있을 것으로 기대된다. 대개 불필요하게 긴 회의나 논쟁은 고객과 개발팀, 관리자와 개발자, 설계자와 개발자, 서로 다른 개발자 등과 같이 협업 대상 사이에서 '나와 같이 생각하고 있겠지' 하고 묵시적으로 갖고 있던 생각이 다르다는 사실을 인지할 때 시작하는 경우가 많다. 우리가 만일 내부 기술 세미나 상시화를 "정말로" 성공한다면, 적어도 개발팀 내에서는 암묵적인 인식차를 주기적으로 줄일 수 있을 것이다. 이는 오해로 인해 똑같은 이야기를 여러 차례 반복하는 일과 오해가 만들어낸 재작업을 줄여줄 것으로 믿는다.

상시화가 성공한다면, 우리 팀을 위한 다음 스텝도 준비하고 있다. Martin Fowler가 그렇게 한다고 들었는데, 프로젝트 경험을 문서화 해서 인쇄물로 공개하려고 한다. 개인적으로 블로그에 종종 공유하지만, 팀원들과 함께 문서를 작성해본 일은 드물다. 그들에게도 자기 생각을 전달하는 훈련을 할 겸, 나와 다른 생각을 섞어서 공동의 창작물을 만드는 일은 쉽지 않겠지만, 충분히 유익할 것이다.
  1. 지나치게 일반화하면 리뷰 시간이 길어지기 때문에, 목적이 기술적인 논의인 이상 기술적인 백그라운드가 약한 사람의 참여는 최대한 막았다. [본문으로]
Posted by 영회
종종 '산출물 작업'을 고객 때문에 어쩔 수 없이 하는 요식 행위로 보는 경우를 볼 수 있다. 이에 대해 꽤 공감할만한 글이 있다:

프로젝트 산출물을 프로젝트 종료 후에 만들고 있나요?

좋은 내용이지만, 자신의 상황과 연결지을 수 없으면 느낌이 약하다. 문서 작업이 필요하다고 느껴서, 문서 작업을 하다가 위 글이 생각나서 문서 일부를 공유해본다.

사용자 삽입 이미지

얼핏 보아선 그냥 말로 해도 될만한 간단한 그림이다. 그러나, 회의를 통해 위 그림 한 장에 그려진 내용을 전달하다 보면 훨씬 긴 시간을 소모한다. 상황을 재연해보자. 이 그림을 그리는데 혼자서 20분 정도를 사용했다. 내가 위 내용을 공유해야 하는 사람이 4명 더 있다고 치자. 4명에게 일일이 위 내용을 설명하느니 회의를 여는게 났다고 판단해서 회의를 하기로 했다. 위와 같은 그림이 없이 회의를 하면, 아무래도 그림이 있을 때보다 오랜 시간이 걸릴 것이다. 최소 10분만 더 걸려도, 10 * 5 = 50분이 추가로 소비된다. 이해관계자가 늘어나면 그림 즉, 산출물의 위력이 더 커질 것은 두말할 나위가 없다.

역할 변경이 별 거 아니라고 보고 얘기를 안하거나, 꼭 보고를 해야할 대상 즉, 고객이나 상위 관리자에게 단지 '역할이 바뀌었다'라고만 보고했다고 치자. 그럼 어떻게 될까? 역할변화를 반영하지 않고, 일을 진행하는 기간이 생길 것이다. 기존에 홍길동 과장이 하던 업무라 생각하고, 관련한 실무자는 이제는 임꺽정 대리가 할 일에 대해 홍길동 과장에게 문의를 할 것이다. 다들 알겠지만, 이런 일을 일컬어 '의사소통이 안된다'라고 한다.
Posted by 영회
파일 다운로드를 테스트 하는데 공백이 더하기(+) 기호로 다운로드 된다고 한다. 그래서 다음과 같은 코드가 들어갔다. 파이어폭스에서는 잘 된다.

            if ( browserType.indexOf( "MSIE" ) >= 0 ) {
                fileName = URLEncoder.encode( fileName, encode ).replaceAll("\\+", "%20");
            }

확장자가 없는 파일을 올려야 하는 특수한 요청이 있었다. 우리 팀원이 다운로드도 잘 되는지 테스트 해봤다. 파이어폭스는 잘 된다. IE는 파일명을 인코딩 한 형태로 다운로드한다. 그 외에도 IE의 경우는 'content-type'을 "application/octet-stream;"으로 설정해야 한다거나 하는 몇 가지 점검할 사항이 더 있다.
Posted by 영회
우연하게 Annotations: Don't Mess with Java 라는 글을 읽었다. 아래 글은 무비판적으로 애노테이션(Annotations)이란 기술을 익히기 급급했던 나에게 통찰을 주었다.[각주:1]

Annotations are not MetaData . . .

Sun talks of annotations as being an extension to the existing metadata in Java. I disagree. Let’s define metadata. Metadata is data about data. I consider the reflection API as something that expresses metadata. It tells you about classes and their methods. It tells you about the types of arguments in your methods. It tells you about the structure of your pre-existing Java code.

. . . annotations are "DecorativeData"

Annotations tell you nothing about your Java code, they tell you nothing about the instances of your Java classes, methods or fields. However they supply additional properties about your Java classes, methods or fields. They're meant to supply additional data about how the software is to be compiled, deployed or executed. This is not metadata, it’s decorative data.

다시 한번 찬찬히 순서대로 글을 읽어보니, 이번에는 다른 시각으로 보게 된다. Don't Mess, kludge, don't fit, don't need, framework junkies, abused horribly !!

딱 세 줄을 읽었는데 부정적인 어휘들이 줄줄이다. 글이 쓰여진 시점은 2005년, 애노테이션 등장 초기로 보아도 무방할 듯 하다. 당시에 이런 냉혹한 비판이 있었지만, 그간 애노테이션의 보급은 늘었다.[각주:2] 결과가 이렇다 이런 비판이 틀린 것은 아니고, 무의미한 것은 더욱 아니다.

양자택일 구도로 몰지 않는다면, Robin Sharp 지적에서 분명 얻을 것이 있다. 인용한 글만 봐도 그의 말대로 메타데이터란 표현이 애노테이션에 어울리지 않아 보이기도 한다. 그러나, Walter Harley[각주:3]는 다음과 같이 말했고:

Program metadata – decorations on ordinary Java code

애노테이션은 VM 상에서의 메타데이터가 아니다. 다시 말해서 애플리케이션 수준의 메타데이터가 아니라, 프로그래밍 요소를 정의할 시점에서 메타데이터를 의미한다. 이를 고려하면 Robin Sharp의 지적은 다소 빗나간다고 듯 보이지만, 맞고 틀린 결과에만 초점을 고정하지 않고 살펴보면 다양한 국면을 볼 수 있는 눈을 갖을 수 있다.
  1. Annotation Hammer를 읽다보면 메타 데이터의 정의에 대해 혼란스러워진다. 클래스 정의 시점에서 부가적인 프로퍼티를 부여하는 것은 메타 데이터라기 보다는 데코레이션(Decoration)이라는 설명이다. [본문으로]
  2. EJB를 비롯한 Sun의 JEE 스펙을 빼고서 봐도, Spring, Hibernate, JUnit 등을 보라. [본문으로]
  3. BEA의 엔지니어인 그가 elipseCon 2008에서 발표한 'An introduction to Java Annotations'에서 인용 [본문으로]
Posted by 영회
명세서(Specification)를 보는데 Goals라는 절 다음 절 제목이 Non-goals였다. ;)

Non-Goals
Support for Java versions prior to J2SE 5.0
Annotations were introduced in J2SE 5.0. It is not possible to do annotation processing in versions prior to J2SE 5.0. It is not a goal of this specification to define a way of doing annotation processing of any kind for versions prior to J2SE 5.0.

종종.. 'OOO가 아닌 것'을 언급함으로써 설명하려는 내용을 보다 명확하게 할 수 있다.
Posted by 영회
마틴 파울러가 Published Interface를 다루는 일이 쉽지 않다고 할 때 고개를 끄덕였다. 글을 읽는 간접 경험이 아니라 실제 Published Interface를 본격적으로 다뤄야 하는 입장에 서보니 느낌이 또 다르다.

프로그래밍 API가 바뀌는 것에 대해서는 사전에 대비를 했다. 설계 시점에 가변성이 있는 부분에 대해서는 일반화 한 인터페이스를 두었다. 스프링에서 그렇게 했든 3rd party 솔루션 연계가 있는 경우나 기업마다 다른 정책을 갖는 코드, 사용자 컴포넌트 등의 경우는 추상화 인터페이스가 요긴한 곳이다.

한편, 프로그래밍 API가 아니지만 포괄적인 의미에서 API에 대해서도 Published Interface 이슈를 따져봐야 한다.
  • 참조하는 라이브러리 변경
  • 참조 리소스(파일) 위치 및 디렉토리 구성 변경
  • 참조 리소스 내용(JS, JSP 파일 내용) 변경
  • 사전에 정의한 DB 스키마(테이블 이름 등) 변경
위 항목들은 Programming API 와 달리 deprecate 할 수도 없고, 대개의 경우 디버깅도 힘들어 기존 Published Interface 사용자들을 힘들게 할 수 있다 다.


Posted by 영회
프로젝트는 본질적으로 수많은 커뮤니케이션을 요구한다. 커뮤니케이션 수단을 지나치게 회의에 의존하면, 소모적으로 시간을 쓰기 쉽상이다. 종종, 야근이 잦은 프로젝트를 관찰해보면, 일과시간에는 주로 회의를 해서, 일과 후가 실제(?) 근무시간이 되는 경우를 볼 수 있다. 그간 회의에 대해 몇 개의 글을 쓴 흔적이 있구만...

회의에서의 의사진행 기법
지루한 회의? 효과적인 커뮤니케이션
2. 회의 관리자?

이러한 생각의 연장선에서 회의하는 모양새를 튜닝하던 중에 다음과 같은 공지를 올렸다.

회의시간 절감을 위한 개발팀 회의 프로세스
회의시간 절감을 위해 개발팀에서는 다음과 같은 프로세스를 지켜주시기 바랍니다.
1. 회의 주관자는 회의록을 작성하여, 회의의 목적과 결정사항을 분명히 하고, 소요 시간을 명기한다.
2. 회의 주관자는 회의 일정을 공지할 때, 회의록을 첨부하여 참석자가 회의에서 다룰 내용을 사전에 숙지하게 한다.
3. 회의 주관자는 일정에 올린 회의에 대해 참석자에게 공지하여 회의록을 미리 읽어보도록 독려한다.
4. 회의 참석자는 회의록을 미리 보고, 참석하여 주제에 벗어나는 이야기를 하지 않도록 노력한다.
5. 회의 주관자는 시간 내에 회의를 종료하도록 적극적으로 진행하고, 결정사항 위주로 회의록을 갱신한 후 이를 회람하게 한다.

Posted by 영회
Three Dimensions of High Performance 을 보면 공식을 정의하고 있고

Performance = Ability * Passion

패턴을 정의하고 도식화 했다.
http://leadinganswers.typepad.com/.a/6a00d834527c1469e201053549e7e1970b-pi
설명해가는 방식이 효과적으로 보인다.

자세한 내용은 Three Dimensions of High Performance 을 보시라
Posted by 영회

좋아...

http://photos.smugmug.com/photos/384746511_Un8EL-L.gif


이건 한방에 와닿지는 않지만, 경험이 없어서 그런 것 같고...

http://photos.smugmug.com/photos/384746474_PvgoW-L.gif

출처: Agile Product Management: Providing Context

Posted by 영회
사용자 삽입 이미지
Trac에서 사용하는 개념들. 다른 것들에 비해 고민 필요한 속성이 두 가지 있다.

Component - The project module or subsystem this ticket concerns.
Milestone - When this issue should be resolved at the latest. [각주:1]

컴포넌트를 다음과 같이 나눠보았다.

사용자 삽입 이미지
구현 제품의 세 가지 버전을 별도로 관리하지 않고, 컴포넌트로 분류한 것이다.

사용자 삽입 이미지

마일스톤 수립은 트랙 로드맵[각주:2]을 참조해서 정책을 결정했다. 아래 보이는 것처럼 trac의 Admin 메뉴를 통해서 설정을 변경한다.

사용자 삽입 이미지
복수의 버전 정책을 유지하면 여러 개의 시계열을 함께 보기 때문에 복잡하긴 하지만, 전체 버전을 함께 관리해야 하는 소규모 팀에는 이런 방법이 적절할 듯 하다.
사용자 삽입 이미지

이제 마이린으로 연결해보자. 가니메데를 설치하면, 기본적으로 trac connector는 없다. Mylyn Extra 업데이트 사이트에서 trac connector를 찾을 수 있다.


Connector를 설치하고 나서 Task Repositories 뷰에서 Add Task Repository 메뉴를 클릭한다.


이제 Repository type 선택창에서 Trac이 뜬다.



관련글:
2008/08/08 - [프로젝트 로그] - 이슈트래커(trac) + Mylyn의 효용성2007/11/29 - [알립니다/IBM DW 리뷰] - [리뷰] 이슈 트래커 개발자가 들려주는 이슈 트래커 이야기, Part 1: 무엇을 어떻게 골라쓸까
2008/05/02 - [자바 프로그래밍/이클립스 노하우] - Mylyn 버전 문제로 인한 로그인 오류
2008/05/07 - [프로젝트 로그] - 작업(Task) 관리 진화


  1. 설명 출처: http://trac.edgewall.org/wiki/TracTickets [본문으로]
  2. http://trac.edgewall.org/roadmap [본문으로]
Posted by 영회
프로젝트 초반 비전문(vision)을 작성할 때, 구성 즉, 주요 내용에 대해서 고민을 했다. 그런데 실제 비전은 산개해서 표현되는 경우가 많다. 오히려 비전문 보다는 구전으로 전파되는 경우가 흔하고, 사업계획서나 착수보고서에 묻어나기도 한다. 정작 비전문을 Well-formed(?)로 써서 제출해버리고 마는 경우도 종종 있었다. 그럴 바엔 애자인 선언처럼... 짧은 경구가 효과적일런지도 모른다...

여튼.. 다음에 비전/비전문을 기술할 때 참조할만한 내용이 있어 옮겨둔다.

Document the vision with what success is, why it's important, and how you know you've achieved it.

그리고 체크 리스트용 질문

Questions
  • Discussing the vision has led to contentious arguments. Should we stop talking about our vision?
  • Our organization already has a template for vision statements. Can we use it?
  • Our visionary finds it very difficult to communicate a cohesive vision. What can we do when it changes?
  • Can individual iterations and releases
  • Isn't it a risk to reduce the amount of documentation?

출처: The Art of Agile Development: Vision
Posted by 영회
외국물 먹은 분들이 조직을 세팅하면 두드러지게 강조하던 것이 매뉴얼이다. 대학원 랩 교수님도 그런 부류에 속하는 분이었기에, 워크숍 매뉴얼을 만들었던 기억이 있다. 얼마전 TV에서 모리오카 냉면 양산에 성공한 재일동포 사업가를 다루는 프로가 있었다. 냉명회사 사장님은 역시나 매뉴얼을 강조했다. 누가 만들어도 똑같은 맛을 내기 위해서...

zdnet에 프로세스 관련 기사가 올라왔는데 아래 내용이 눈에 띈다. 누가 프로세스 혹은 매뉴얼 작성에 대해 거부감을 나타낼때 참조할만하다.
IT에서는 프로세스가 없는 경우 어떤 현상이 나타날까? 경험에 의하면 프로세스가 없는 IT조직은 다음과 같은 특징을 보인다.
. 신입사원들이 할 일이 없다.
. 요청한 사항이 어떻게 처리되고 있는지 또는 누락이 되었는지 내부에서는 알 길이 없다.
. 새로운 장비가 들어오거나 장애가 발생하면 그제야 바쁘게 움직인다.
. 업무노하우는 IT부서의 고참만이 알고 있다.
. 유능한 직원에게는 전화도 몰린다. 따라서 바쁜 사람만 늘 바쁘다.
. 며칠 동안 열심히 IT 업무를 했지만 그 노력은 어디에도 나타나지(심지어 월간보고에도) 않는 경우가 있다.
. 업무의 시작과 끝이 불분명하여 늘 찜찜하다.
. 다른 팀으로 넘기거나 문의한 업무가, 처리 되거나 피드백이 왔는지 또는 무시되었는지 파악하기가 어렵다.

프로세스 정의의 본질은 매뉴얼 작성과 다르지 않다.

Posted by 영회
효용성을 내가 혹은 팀이 수고한 만큼 대가를 받느냐 차원에서 얘기해보자. 얼마전 기술이슈에 대한 논의 중에 CI 효력이 크지 않다는 얘기를 한 적이 있다. 물론, 거기에는 상황적인 이유가 있었다. 'CI가 효과가 없다.' 혹은 '있다'고 하는 것을 무턱대고 일반화 할 수는 없다. 이전에도 언급한 바 있지만, CI 환경을 구성하고 프로젝트에 적용하면서 얻은 교훈(Lessons Learned)은 예상과 많이 달랐다. 애초에 의도했던 일종의 진보된 딜리버리 프로세스 구축은 만만하지 않았다. 두드러진 장벽(challenge)를 공유해보면
  • 환경 독립적이고 테스트가 필요한 부분을 효과적으로 테스트하는 것의 어려움(배포 대상 WAS, 배포 IP, 연동이 필요한 경우 상대 서버/클라이언트 정보 등)
  • 의존하는 라이브러리(걔가 또 의존하는 라이브러리, 또 걔가 ...)의 체계적 관리
  • 변경 반영 > 패키징(Packaging) > 릴리즈(Relase) 프로세스 관리와 관계자에 대한 공지
  • 이슈트래커를 통한 작업 관리와 조직/고객사 대상 보고 체계에 따른 작업 관리 수준의 불일치 혹은 일관성 결여
물론, 여기에는 사람의 문제는 아예 뺐다. 새로운 것을 거부하는 사람들을 설득하기 류는...

5개월째 적용하면서 예상치 못하게 얻은 것은
  • 빠른 피드백 루프
  • 요구사항의 정밀한 관리
  • 빈번한 구두 통지 및 불필요한 회의 감소
사용자 삽입 이미지

개인정보 보호 차원에서 잘 안보기에 했지만, 위에보면 이슈 발행한 사용자쪽에서 구체적인상황을 스냅샷처럼 올리니까 회의시간도 줄고, 혼선도 줄었다. 또 위에 보이듯이 이클립스 마이린의 통지 기능에 의해 구두로 다시 알려줘야 하는 일도 현격히 줄었다. 또한, 파일 첨부까지 활용하면 글로 설명하기 힘든 부분의 커뮤니케이션에도 효과적이고, 상시적으로 이러한 방식의 피드백 루프가 돌고 있으면, 별도의 이슈회의를 빈번하게 소집하거나 각종 회의/보고 시간에 관계 없는 사람까지 다 모아놓고 논의를 할 필요도 줄었다. 종이값 아꼈다거나 이런 얘기는 뺀다. ^^

같은 공간, 같은 조직의 내부 팀 커뮤니케이션이라면 이러한 가치가 그리 높지 않을 것이다. 비슷한 산출물을 모두 관리하고, context에 대한 이해나 목적의식이 비슷하기 때문이다. 그러나, 조직이 다르거나 원격에 있다거나 다른 스케줄을 가지고 움직이는 팀 간의 커뮤니케이션이라면 trac + mylyn이 제공해주는 비동기적인 방식이 효과를 발휘한다.
Posted by 영회
TAG Mylyn, Trac
처음으로 프로젝트 관리자를 맡았을 때, 수행 경험을 공유하고 싶은 마음에 책을 써볼까 하는 생각을 어렴풋이 했다. 프로젝트를 성공적으로 마치는 것과 그 내용을 책으로 옮기는 것은 다른 문제다. 결론적으로 도와주세요! 팀장이 됐어요 읽고 나니 책을 쓰려고 시도하지 않은 것이 잘했다는 생각이 든다. 이미 내가 쓰려던 내용을 훨씬 세련되고 통찰력 있게 소화했다.

또 하나 기쁜 소식은 저자인 신승환님 블로그에 유사한 글이 계속 올라온다는 점이다. 신승환님 블로그는 Talk about Software with hani 이다.

도와주세요! 팀장이 됐어요 - 10점
신승환 지음/위키북스

인상적인 구절을 옮겨둔다.

"의사소통에서 생기는 오해 때문에 관계가 나빠지죠. 특히 팀장은 팀원과 다양한 방식으로 의사소통하기 때문에 팀원이 무심코 내뱉은 말을 오해하기 쉽습니다. 이런 오류를 조금이라도 줄이려면 팀원들이 한 말을 성급하게 해석해서는 안 됩니다. 즉, 감정에 휩싸여 팀원이 한 말을 해석하기 전에 정말로 말하려는 것을 파악하려고 부단히 노력해야 합니다." ... 도와주세요! 팀장이 됐어요 103쪽

긍정적으로 말하는 사람이 더 결과가 좋은 이유는 자신이 말한 방향으로 실천하려고 노력하기 때문입니다. 반대로 부정적으로 말하는 사람은 안 되는 쪽으로 행동하죠. ... 도와주세요! 팀장이 됐어요 109쪽

"많은 관리자들이 코칭, 피드백, 멘토링을 잘 구분하지 못하더군요. 피드백은 팀원이 맡은 업무를 제대로 수행하지 않을 때 제대로 수행하게 만드는 업무죠. 멘토링보고 라인이 아닌 자발적인 관계일 때 효과적이죠. 따라서 상하관계가 아닌 선배사원이 멘토가 되어 후배사원을 가르쳐 줄 때 의미가 있습니다. 반면 코칭은 팀원이 능력을 키울 때 도움을 주는 관리자의 업무입니다. ... 도와주세요! 팀장이 됐어요 138쪽
Posted by 영회
제가 예전에 올렸던 글: SI 프로젝트에서도 애자일 프로세스는 가능하다에 대한 쓰레드가 Xper 메일링 리스트에서는 아직도 계속되고 있습니다. 일부를 소개하죠.

강석천: 이상적인 이야기인지 모르겠지만.. The Goal 같은 책의 경우 throughput 을 위해서 리드타임을 돈으로 바꾸려는 시도까지 합니다. 결과적으로 그 편이 최종 이익을 고려했을 때 더 이득이라는 계산에서 입니다.

그러한 점에서 SI 등에의 프로젝트의 경우는 어떨지 궁금합니다. 계약 기간의 연장이나 프로젝트 실패는 곧 리스크이고 손해일것인 데, 좀 더 장기적 안목으로 여러 불확실성이 야기시키는 리스크에 대한 보험으로서 리드타임이 짧은 팀, 혹은 애자일 팀을 끌여들이려는 시도는 없을까요?

----
그리고 조금 질문을 바꿔서, '애자일이 가능하다고 한다면, 구체적으로 무엇이 어떤 모습으로 가능하다는 뜻일까요?' 조금 더 각개 격파(?) 할 수 있지 않을까요? 고객회사와의 빠른 피드백? 실질적인 가치를 매일 전달하는 개발? 유닛테스트 & TDD? 지속적인 디자인 개선? 지속적인 통합? 페어 프로그래밍? 프로세스 개선을 위한 매일매일의 노력? 혹은 이를 가능하게 하는, 변화에 대해 포용하는 사람들의 마인드? 10%의 애자일, 30%의 애자일, 60%의 애자일, 80% 이상의 애자일이 있다면, 각 스펙트럼 대비 모양새들이 어떨지가 궁금합니다. :)

The Goal을 연관시킨 면이 매력적인 발상이었습니다. 또한, 밑줄 친 부분은 매우 실용적인 문제 의식입니다. 그리고 '각개 격파'로 논의하자는 것도 실용적인 발상이죠. 토론프로에서 모호한 논의가 이어질때 사회자들이 끌고 가는 방향이기도 하죠. 그 뒤에 어떤 분이 약간은 모호한 글을 달아뒀길래.. 제가 좀 구체적인 이야기로 쓰레드를 이어갔습니다.

말씀하신 내용이 오히려 실용적이네요. 아래 분이 말씀한 것처럼 방법론을 애자일과 비애자일로 구분해서 넣고 빼는 식이 오히려 더 현실성이 낮아 보입니다. 애자일을 썼다고 대대적으로 공표하면 애자일을 모르는 사람들에게 타겟이 되기 싶고 어떤 일들은 별 효과가 없는 때에 나타나서 '그것봐라 내가 그럴 줄 알았어'라고 할 수도 있습니다. 방법론 이름이야 뭐면 어떻습니까.

저는 실제 SI 프로젝트에서 애자일 선언에 입각한 접근을 행해서 효과를 거둔 바 있습니다. 정확하게는 현재도 거두고 있죠. 그 중에서 하나를 소개하자면 OPPM(One Page Project Management)를 보고 인용한 것인데 프로젝트  계획 시점에서 전체를 다루는 WBS는 고객사 내규가 허용하는한 구체적인 액티비티는 명기하지 않고 목적 중심으로 작성했죠. 그리고, 실행계획은 스프린트라는 반복주기 단위로 처음에는 2주 단위.. 그리고 프로젝트 중반 이후부터는 4주로 했다가 현재는 6 주 단위로 작성합니다.


필연적으로 변할 수 밖에 없는 부분을 조기에 고정하려고 욕심을 부리다가 소모하는 시간이
following a plan 이나 comprehensive documentation에 해당하고 그 시간을 아끼면
working s/w를 만드는데 쓸 수도 있고, 변화할 부분을 고정하지 않았기에 Responding to change에 유리하죠. 계획의 2단 분리는 일정 변경으로 유발할 수 있는 고객사 결제 등을 피할 수 있어서 시간을 벌어주었죠. 비슷한 사례 중의 하나로 요구사항 범위 확정건이 있는데요. 우리는 12주 안에 결과를 만들어 보여줘야 할 일이 있었는데요. 문제는 고객도 잘 모르는 요구사항에 대해서 정의하고 만들어야 한다는 점이었습니다. 그런 상황에서 지나치게 요구사항을 정의하고, 필요한지 어떤지도 잘 모르는 기능을 위해 UI 프로토타이핑이나 다양한 계층의 현업 인터뷰 소집으로 인한 시간 소비가 위험해보였습니다. 하여.. 2주만에 요구사항에 대한 최소한의 검증 기준만 세워두고 모호한 것은 바로 구현에 들어갔습니다. 모호한 것 우선해서 개발을 했죠. 그래서 모호한 것은 대충 구현된 프로토타입(throw-away가 아닌)을 보여주고 컨셉 불일치부터 확인을 했습니다. 그런 후에는 살을 붙이면 되었고, 결국 빠듯해보이던 일정에 무리없이 구현을 할 수 있었습니다.

가장 큰 성공요인 중에 하나가 고객과 다른 생각을 하지 않는다는 점을 주기적으로 확인하는 과정에 있었고 그 매개체는 working s/w 였습니다. 물론, UI나 API요소가 강한 것은 그 부분부터 구현했고, 저장방식이 중요한 녀석은 DB 스키마나 클래스 자료구조부터 구현해서 보여줬죠.

그 밖에도 훨씬 많은 프랙티스가 있습니다. 애자일 프랙티스로 정리된 것 말고... 저희가 실전에서 응용해서 효과를 낸 것들 말이죠. 흥미를 갖는 분이 있다면.. 프로젝트 종료후 자체적으로 제작하는 보고서를 일부 발췌해서 공유할 수 있을 듯 합니다. 일반화 하긴 힘들겠지만, 하나씩 사례가 모이고 발전하다 보면...  :)
Posted by 영회

출처: BPO Maturity (비지니스 프로세스 성숙도) - 추천
Posted by 영회
2년 전에  스승 역할을 해주셨던 분이 있다. 대한민국 최고 학벌에 최고 기업을 골라서 입사하신 후에, 미국으로 건너가 Ph. D하고, 20년을 한 길만 걸어오신 진정한 엔지니어. 최고의 엔지니어이시기에 그 분이 SE(Software Engineering)에 거는 기대 또한 컸다.

하.지.만, 다른 엔지니어링 분야와 달리 SE는 아직 낙후된 상태라는 거. 어찌 보면 삼국지 여포가 그렇듯... 일당백, 일당천이 가능하다.

사용자 삽입 이미지
분명 장인이란 것을 생각할 수 있고, 사실 학교 교육을 통해 가르치는 것은 쉽지 않다. 그보다는 도제 제도를 통해 전수하는 것이 훨씬 실효성있다. 그럼에도 불구하고 엔지니어링으로 끌고 가는 분들은 나름 사명을 갖고 있을 것이다. 모두가 불평하는 노가다는 언젠가 척결해야 하기 때문이다.

슬슬 넘 오바가 아닌가 하는 생각이 든다. Toby의 부추김 때문에 한잔하고 거나한 상태에서 휘갈긴다. 너그럽게 이해해주시길...
Posted by 영회
일민형이 지난 애자일 논쟁[각주:1]을 지켜보다 애자일 선언으로 마무리했다. 한동안 잊고 살았던 애자일 선언을 다시 만나는 순간이었다. 나는 특정 애자일 방법론에 대해서는 잘 모른다. 또한, 애자일 프랙티스에 대해서도 경험이 많지 않다. 그럼에도 불구하고, 애자일 선언을 처음 본 순간 바로 이거다 싶었다. 실무에서 프로젝트를 수행한 햇수가 늘어날 수록 공감하는 지수는 더욱 높아진다.

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

흥미로운 사실은 우리 프로젝트에서도 고스란히 선언문에 적힌 내용을 체험할 수 있었다는 점이다. 짧게 공유하고자 한다.

Individuals and interactions over processes and tools
프로젝트 초기에 나는 CI 환경 구비만 잘 되고, 단위 테스트만 하면 CI 즉, 지속적인 통합이 가능할 것이라고 보았다. 그러나, 툴은 분명 한계가 있었고, 프로세스 실현은 그리 간단하지 않았다. 우리는 이번 프로젝트에서 처음으로 손발을 맞춘 팀이다. 당연히 프로세스가 몸에 밴 팀은 아니다.[각주:2] 프로세스 익히느라 일정을 늦출 수는 없는 일이다.

여기서 나는 해결책이 필요했다. 결국 개개인의 특성 파악으로 들어갔다. 우린 모두 개성을 지닌 존재이다. 프로젝트를 하면 종종 그 사실을 잊어버린다. 우선 각자 자신이 만들어야 할 산출물을 그리고, 해당 산출물을 통한 다른 사람과의 관계를 표현하게 했다. 작업자와 산출물 사이에 선을 그으면 행위가 나타난다. 나는 이를 문맥도(context diagram)이라 칭하면 모두에게 편한 방식으로 그려오게 했다. 흥미롭게도 대부분 관리자인 나와는 달리, 주변 다른 개발자의 관계를 완벽하게 알지는 못했다. 나는 그 부분을 찾아서 그려주었다. 이후에 Individuals and interactions이 정형화된 부분에 대해서는, 이를 프로세스로 정의해서 공유했다. 그 과정을 이미 중간 중간여기 저기공유했다. 개발자들은 다른 사람의 일에 관심이 없던 것이 아니었다. 전체를 볼 수 있는 사람이 서로 협력이 필요함을 알게만 해준다면 문제는 스스로 해결되었다.

Working software over comprehensive documentation
종종 RUP 혹은 CBD를 적용하는 경우 유스케이스 명세서 혹은 유스케이스 기술서를 작성하는 경우를 흔히 볼 수 있다. 빠른 시간 내에 UI 스토리보드를 작성할 수 있는 잘 아는 업무가 아니라면, 유스케이스 목록만 작성하고 UI 설계부터 시작하라고 권해주고 싶다. 우리 프로젝트는 릴리즈를 두 번으로 잡았는데 최초 릴리즈는 프로젝트 착수후 10주만이었다. 짧은 릴리즈 기일 때문에 우리는 최소한의 문서작업만 했다. 결과는 성공적이었다. 그 후 우리는 공식적인 릴리즈를 세 번으로 늘렸고, 하나의 릴리즈 주기 안에서도 또 릴리즈를 했다. 소소한 개선 요청을 반영하는 즉시 릴리즈를 했다.

Customer collaboration over contract negotiation
대표적인 contract negotiation 중에 하나는 요구사항 확정이다. 고객은 잘 모르던 시절(프로젝트 초기)에 정한 것을 바꾸지 못하도록 개발팀이 우는 소리 하는 것이 억울할 것이다. 반대로 개발팀은 프로젝트 막판에 고객들이 제멋대로 요구사항을 확확 바꾸는 것에 가슴이 답답하다. 앞서 언급한 감정들은 사실 터놓고 더 나은 방식으로 협업을 하면 해결할 수 있다.  앞서 언급한 릴리즈 사례를 다시 인용하겠다. 우리는 한번 릴리즈한 프로그램에 대해서, 고객들이 이를 사용하면서, 수시로 요청사항을 올리게했다. 그 내용을 해결한 후 이를 모아서 짧은 주기로(보통 수일 간격) 릴리즈를 했다.

사용자 삽입 이미지

결론, 일상의 협업(Customer collaboration)은 요구사항을 가지고 된다 안된다 하는 긴장감 넘치는 협상(Customer collaboration over contract negotiation)을 점차 없애 버렸다. 프로젝트가 반도 끝나지 않은 지금 고객과 개발팀은 거의 한 팀에 가깝다. 참고로 우리는 발주자와 수행자가 처음만나, 100% 계약관계로 묶인 SI 프로젝트를 수행중이다. :)

Responding to change over following a plan
나는 반복의 중요성을 여러 차례 언급했다. 보통 프로젝트 초기에 복잡다단한 WBS를 작성하는 일이 많다. 더구나 어떤 PMS는 최초에 등록한 사항을 변경하기 어렵게 하는 경우도 있다. 프로젝트는 모험의 연속이다. 모험은 필연적으로 변화를 수반하고, 계획을 변경하기 마련이다. 우리는 반복을 통해 우리가 해결해야 할 문제를 더 잘 알게 된다. 다행스럽게 나는 변경하기 힘든 계획 때문에 고생하는 프로젝트에 승선했던 경험이 많다. 그래서, 처음부터 유연성과 확장성을 고려한 계획[각주:3]을 세웠다. 거장한 형용사를 붙였지만, 고객의 경영진에 보고할 진척의 기준인 WBS는 목표 혹은 마일스톤 중심으로 대략적으로 작성했다. 그리고 각 스프린트(2 ~ 6주 간격)별로 상세한 작업목록을 담은 계획서를 별도로 활용했다. 실제 계획서 양식은 The One Page Project에서 제시한 방법, Scrum의 백로그 등을 몇 차례 개정하면서 만들어 쓰고 있다.

관련글: 스크럼(Scrum) 적용 일지

The One Page Project - 8점
클라크 A. 캠벨 지음, 안진환 옮김/을유문화사


  1. 오고간 이야기만 놓고보면, 애자일 논쟁이라고 할 수 있을지는 의문이다. [본문으로]
  2. 대부분의 SI 프로젝트에서 동일한 개발팀이 지속적으로 손발을 맞추는 일은 흔치 않은 현실은 뻔히 알면서도 CMMI 측정은 왜 그리 열심히 할까? 일단 성숙도 측정부터 하고 나서, 다음에 개선하려할까? [본문으로]
  3. 보통 시스템에나 가져다 붙이는 말을 접붙여봤다. [본문으로]
Posted by 영회
비록 그다지 성의나 깊이가 없는 글을 쓰기는 했지만, 침묵하던 이들이 타이핑을 하게 한 것은 성과다. '귀찮다'며 하고 싶은 말을 참던 일민형도 마치 박재성씨의 글쓰기 과정을 스캐닝한 듯한 글을 내놓았다. 박재성씨가 '애자일 프로세스'이라고 표현한 것이 과연 무엇을 의미하는지부터 해서 오해할만한 사람들을 위한 해설서를 쓰더니만, 막판에는 난데없이 애자일 선언(Agile Manifesto)을 옮겼다. 평소 그의 장문으로 미루어보아 이쯤에서 뭔가 더 정리하려다가 그만 둔 것 같다. 이를 반증하는 증거는 다음에 올린 요 글인데, 대박이다. 원숭이도 나무에서 떨어진다고 IT 번역으로 꽤나 유명한 박재호씨가 오역을 했다. over라는 전치사 하나 잘못 옮겼을 뿐이지만, 의미가 완전히 반대가 된다. 애자일 선언이 대비 구조를 통해 의미를 명확하게 한 것이란 점을 몰랐던 모양이다. 일민형 글은 좋지만 지독하게 느리고 불편한 워드프레스에 실려서 읽기가 힘들다. RSS 리더가 있어 다행이지만, 나의 댓글을 두 번이나 먹어버렸고,  Ext.js와  맞물려 응답속도는 항상 인내심 테스트 수준이다.

또, 내가 어제 다음과 같은 글을 썼는데...

우리가 무언가를 나누어 이익을 취할 수 있는 경우는 구분하는 대상의 초점이 명확히 달라서, 분리하는 것이 의사소통에 도움이 될 때가 아닌가 싶다.

마치 모범답안인 양 포스트가 올라왔다. 포스트 작성자는 어제 '니 블로그에 왠 애자일 타령이냐?' 라고 문의했었다.

아마 다 같이 모여서 터놓고 이야기했다면, 오해로 소비하는 에너지도 없고 흥미진진한 이야기가 나왔을텐데...

라고 했더니만, 토비 said: 다같이 모여서 터놓고 얘기하는 것보다

완전 동의한다. 사실 '다 같이 모여서 터놓고 이야기했다면'의 진의는 굳이 동일한 시간에 같이 모여서의 의미는 아니었다. 재성씨와 온라인으로 글을 주고 받는 사이에 있었던, 메일링 리스트의 글, 구글챗으로 말을 걸어온 게임분야 1인, 횟집에서의 논의, 스카이프로 말을 걸어온 토비 등등의 논의가 모두에게 전달되지 못하는 것이 아쉽다는 의미였다. 그렇다고, 박재성씨 얘기때문에 메일링 리스트나 구글 그룹스를 개설할 수도 없고.. ^^

그래서 결국, 게임1인의 내용을 블로그에 옮겼고, 메일링 리스트 링크도 걸었고 나머지 두 사람은 직접 글을 써서 시차를 두고 산발적으로나마 공유가 된 사실이 좋았는데.. 막판에 저 말이 사족이 된 꼴이다.

오히려 준비해서 이야기하는 것보다 상대의 견해에 대해 시간을 두고 생각하고, 마음이 움직일 때 글을 쓸 수 있는 블로그의 비동기 의사소통 방식은 토비형 말대로 매우 유용하다.

Posted by 영회
다소 극단적인 어휘들로 글을 써보자. 별 것 아닌 글이 살아날 수도 있다. 나는 여름이 되어도 타이는 착용을 강제하는 직장에 다닌다. 고객에 대한 마음자세를 위한 훈련이라지만, 사실 거부감을 떨쳐버리기가 힘들다. Neal Ford서울 방문기를 보면, 회사의 입장을 이해할 수는 있다. 200 여명의 CIO가 모인 디너에서 정장이 아닌 사람은 딱 둘 뿐이었다니까. Entrue Developers Conference 참석차 왔다니, L사 산하의 컨설팅 업체와 관계된 행사였나 보다. 이런 곳에 Neal Ford가 오다니 우리나라 컨설팅 업계에도 '실용주의 바람이 불었나' 했다. 하지만, 서울 방문기를 읽으면 금방 답을 알 수 있다.

그가 서울에 대해 흥미롭게 말한 것은 소주와 사람, 그리고 IT 인프라다. 우리 핸드폰은 자기가 살던 곳에 비해 한 단계 위에 있다고 말하고 있다. 그리고, 호텔 인터넷 라인은 평생 경험한 가장 빠른 속도란다. 우리가 IT 강국이라고 불리는 국민의 정부의 성과물이다. 요즘 소주 브랜드 경쟁이 치열한데, 처음처럼 마시고 참이슬 이미지 올리지는 않았기를 바란다. ^^

반면, 그가 서울에 초대받은 이유인 기술적인 교류에 대해서는 다소 부정적인 인상이었나 보다. SOA에 대해 지나치게 구체화 하여 실현 불가능한 (논리적) 프레임워크를 만든다거나 동적 언어에 대해서는 아예 들어본 일이 없다거나... [각주:1]

아마 우리나라에서 SOA가 뜨는 이유는 돈이 되기 때문이다. 4년 전에 나는 EA/ITA 프로젝트가 성황인 시절에 관련 프로젝트에 잠시 참여한 일이 있다. 프로젝트를 만든 팀장은 추친 동기를 설명하며, '바람'라는 단어를 얼핏 사용한 일이 있다. 그리곤, '바람을 타야한다'라는 표현을 자주 쓰더니만, 프로젝트 진행 중에 바람처럼 사라졌다. SOA가 스쳐가는 바람인지, 필수 코스인지는 모르겠다. SOA 자체를 잘 모르는 입장에서 왈가왈부할껀 없다.

SOA로 고민하는 사람들은 많은데 왜 SOA로 구현을 하는 사람들은 없을까? 시장에서 오랫동안 CBD를 고민해왔는데 객체 지향으로 구현된 시스템을 보기 힘든 것과 같을 듯하다. 어차피 역사는 돌고 도니까. Neal Ford는 무슨 생각을 가지고 이 땅을 떠날까?

생각을 접고 다른 일을 하려는 찰나에 마무리를 하라는 의미인지 어떤 상황이 떠오른다. 조정에서 대신들은 이 참에 청나라를 치자고 격론을 하고 있다. 우리는 군사 숫자도 적고, 무기도 대적할 상황이 아닌데 말이다.

  1. 영어와 번역 문제도 있지만 그건 빼놓겠다. [본문으로]
Posted by 영회

난데 없는 애자일 논쟁에 휩쓸렸는데...

SI 프로젝트에서도 애자일 프로세스는 가능한가?라는 글을 보고 애자일에 관심이 많은 사람들의 공통적인 지적은 '애자일이 SI에서 출발했다'는 내용이다. 하지만, 재성씨가 말하는 SI 프로젝트는 국내 열악한 환경을 지적하는 것이었다. 일민형이 '술자리에 씹었다'는 표현을 써서 도발을 했는데, 술자리의 이야기는 이렇다.

선배는 재성씨처럼 개발자에게 영향을 줄 수 있는 사람이 그러한 넋두리를 한다는 것에 대해 실망했다는 내용이다. 나 역시 수도 없이 넋두리를 하며 살아왔다. 하지만, 솔직히 재성씨의 글은 반박을 불러일으키는 그런 글이었다. 댓글을 달아놓은 일민씨도 뭐라고 하려다 말았다 했고, 나 역시 재성씨의 진심을 알기 때문에 달래는 글을 썼다. 하물며 재성씨를 모르는 사람이 저 글을 보면 어떠했을까?

선배는 나름 치열하게 열악한 전장의 일선에서 아주 천천히 개선을 만들어왔다. 그 일을 좋아하고, 앞으로도 그렇게 살 것이다. 나 역시 그렇고, 어제 술자리에 모인 사람은 모두 그런 점을 공유하고 있다. 나는 대부분의 프로젝트에서 부정적인 관행에 의존하는 사람과 치열하게 싸웠다. 글쎄 그게 과연 치열했는지는 자신없지만, 대개는 나보다 훨씬 경험이나 영향력이 있는 이들이더라도, 물러서지 않고 신념을 지켜왔다. 그렇게 했을 때 아주 조금 대가가 주어졌다.

그것은 고작 HR0002222, HR00002223 등으로 작명하자는 원칙을 의미있는 작명으로 만드는 일일 때도 있었고, 프로젝트 관리자가 WBS 작성이나 반복계획서를 밑에 사람들에게 위임해서 입으로만 프로젝트를 하는 행동에 대한 대항이기도 했고, 깊이 고민하지 않고 '내가 오랫동안 그렇게 했다'라고 설계 결정을 내리는 사람과의 투쟁이기도 했다.

이쯤에서 밝히면 나는 애자일이 도무지 뭔지 모르겠다. 그간 수차례 애자일이란 말을 내멋대로 써온 것이 뜨끔하다. 나는 여러 업체에서 모여든 100여명의 팀원이 성공적으로 프로젝트를 이행하기 위해 아침에 수행을 하고 오는 스승을 만난 일이 있다. 그 분이 프로젝트 현장에 있을 때는 갈등이 줄어들고, 사람들이 돌연 협력적으로 바뀐다. 이런 뚱딴지(?)같은 이야기는 접어두자. 나도 그런 것들을 실천할 엄두같은 것은 나지도 않으니까. 내가 애자일이란 말조차 잊어버리고 살 즈음인 요즘에 프로젝트에서 하는 일이 과거에 내가 '애자일'이란 말로 인식했던 것을 실천하고 있다. 그러기 위해서 '자기 일'만 몰두하는 팀원들에게 다른 팀원과 자신의  관계를 설명하는데 많은 시간을 사용하고 있다. 물론, 돈과 시간이 넉넉하다면, 김창준씨를 불러서 컨설팅을 받아도 좋겠지만, 무턱대고 페이 프로그래밍을 하고 TDD를 하자고 해서 팀원들이 그걸 따를 리가 있는가? 새벽에 올린 메시지의 파트너 역시 게임회사에서 '애자일'을 위해 파티션을 제거하고 욕을 먹고 있다 한다. 이러한 활동은 어떤 상황에서 어떤 위치에 있더라도 실천할 수 있다.

Posted by 영회
술자리에서 박재성씨의 글에 실망한 이바닥 선배의 말에 공감을 하고 집에 왔는데 뜻밖의 메일이 와 있었다. 애자일 컨설팅의 대표 김창준씨가 메일링 리스트에 커멘트를 달아 달라는. 사실 그룹스에 논하는 사람들처럼 이해도나 관심이 높지 않아 그다지 할 이야기가 없긴 했지만 반가웠다. 와중에 토비형이 말을 걸어서 채팅을 막 끝내는 찰나... 알고 보니 지인이었던, 게임업계에서 애자일 적용을 위해 노력하신다는 어떤 분의 메시지를 받았다.

OOO: SI에서는 왜 Agile이 불가능하다고 생각하는지 잘 모르겠습니다.
OOO: 갑-을 문제는 한국 사회 전반의 문제이지, SI만의 문제라고 보기에는 아닌가 싶어서요.
안영회: 그 글은.. 논지가 이상한 글일 뿐이라고 생각하는데 저와 가까운 사람이라 완곡하게.. 글을 쓴건데.. 너무 완곡해서 메시지가 약했죠
OOO: 예, 그런 것 같습니다. 게다가 제가 SI를 몰라서요.
안영회: si가 계약구조가 안좋은건 애자일하고 상관도 없고, 다른 산업도 똑같죠.
안영회: 도리어.. si가 좋을지도 모르는데 이쪽 일 하면.. 다른 곳에 문외한이 많습니다. 재성씨도.. 포탈에서 일하고 있고, 원래 경험이 SI의 메인 스트림은 아닌 것 같은데, 일반화 해서 얘기하는게 적절하지 않죠.
OOO: 그러게나 말입니다. 뭐, 시초가 거기이니, practice를 바로 가져다 쓰기가 쉽긴 하죠. 사실 game쪽도 비슷한 이야기가 많거든요? 그거 SI(혹은 Web)이나 가능하다~라던지... game쪽의 최초의 도입 사례가 console이다보니 Online은 달라요.
나중에 online으로 작게나마 성공 사례를 만들고 보니,
휴대용 콘솔을 개발하는 프로젝트에서는, console은 달라요. 제가 보기에는 그냥 핑계인 것 같아요.
 
안영회: 저도.. OOO씨가 si 모르듯이 게임쪽은 전혀 문외한이지만, 대충.. 메시지만 봐도 맥락은 알 수 있겠네요. 지금 제가 하는건.. 그룹사 표준 프레임워크를 만드는거고
저희 회사도.. 개발자만 몇 백 명인 사이트에서 애자일 프렉티스의 일부라도 써서.. 비용대비 효과를 보려고 여러명이.. 몇년 전부터 일상처럼 노력하고 있습니다.
간접적으로라도 그런 경험을 해본 적이 없다 보니 맞지 않는 이야기를 쓴 것 같습니다.
개념없는 계약에.. 열악한 구조와 애자일 프로세스를 엮는 것 자체가 모순이죠.

OOO: 김창준 님의 표현대로 "상상력의 빈곤"이라고밖에는.


안영회: OOO씨가.. 그 분야에서... 나름 적용에 성공했다고 하시는게
안영회: 하루하루 일상의 노력이었을테고
 
OOO: 그냥 성공시키기 위해서 발버둥치는 거죠.
 
안영회: si에서도 도구나 방안을 실현하는 모습이나 그게 조금 다를 뿐 조금만 추상화 해서 보면 완전 같죠.
 
OOO: 예.
 
안영회: 신문으로 배포하던거 웹으로 바꾸는거에 비교할수도 있을만큼.. 사실은.. 그리
대단하게 개념화 할 일도 아니란게, 제 급진적인 생각이긴 합니다..ㅋㅋ
 
OOO: 저도 동감입니다.
사람들이 하기 싫으면 벼라별 핑계를 다 대는 거 같아요.
요는 그냥 하던대로 하고 싶다는 거죠.
저희 회사도 굉장히 척박합니다.
애자일이라는 말에 반발이 있을까봐, 애자일은 물론 거기서 나온 용어조차 그대로 사용하질 않아요.
 
안영회: 후후... 실무자 냄새가 확나네요.
그쵸.. 그걸 제대로 적용하기 위해
이름을 숨기는건.. 여기나 거기나 같네요..ㅋㅋ
전형적인 전술

OOO: (그럼요. "이름없이 실행하기" 패턴)
OOO: N사에 초청받아서 발표도 했고, 개발본부 전체를 대상으로 강연도 했는데,
반대하는 사람들의 패턴은 동일한 거 같아요.
1. 현재도 문제 없는데 왜 바꿔야 하냐?
2. 그거 하면 100% 성공 보장 되냐?
3. 우리랑은 안맞는다.
거참, 떡먹여 달라는 건지...;;;;
OOO: SI에 대해서 댓글(?)을 달려다가, 제가 SI에 대해서 잘 몰라서 여쭤봤습니다.
 
안영회: 제가 대신해드리죠..ㅋㅋ
이 대화를 제 블로그에 올려도 될까요?

OOO:
(헉)
(음)
(제가 누군지는 밝히지 말아주세요.)
 
안영회: 물론... 좀 거칠긴 하지만.. 거절하시면 그만두죠

재성씨가 보면 충격받을 일이지만, 단기간에 만난 분들의 반응이 재성씨 블로그 댓글과는 상당히 달라서 모험이지만 올려봅니다. ^^
 
충동적으로 글 한번 썼다가... 애자일 진영의 초대를 받았다. 최소한 그 분들이 얼마나 본인들의 하루하루 노력하는 바에 대해 중요하게 생각하고 있는지 알 수 있었다.
Posted by 영회
내가 박재성씨를 도와 KSUG/자바지기 공동 주체 세미나를 진행한 이유는 언젠가는 'SI 프로젝트에서도 애자일 프로세스를 적용할 수 있는 방안'을 논의하고 싶어서였다. 나는 소규모 팀 프로젝트이지만, SI 프로젝트를 수주해서 애자일 프로세스로 프로젝트를 진행 중이다. 6개월 프로젝트에서 13주차를 진행했고, 얼마전에 이미 1차 릴리즈를 해서 결과물을 고객과 공유했고, 7월 중순에 2차 릴리즈를 할 예정이다. 하지만, 우리가 만든 결과물을 고객들이 수시에 사용해보고 피드백을 주기 때문에 내부적인 릴리즈가 별도로 있다. 편의상 우리는 이를 리비전 배포라고 부른다. (아래 그림 참조)

이러한 진행을 하면서 나는 몇 가지 노하우를 익힐 수 있었다. 전형적인 애자일 프로세스는 당장은 그리 유용하지 않다는 점이다. 최초에 우리는 2주마다 스프린트를 계획하고, 회고를 하고 백로그를 사용하는 유형으로 진행했다. 최초 릴리즈를 하고 국면 전화이 있으면서 우리는 이러한 프로세스를 변경했다. 다음 릴리즈까지의 7, 8주 기간을 하나의 사이클로 계획했다. 여기서 우리는 애자일 프로세스를 현장에 맞게 적용할 수 있는 인력이 필요함을 알 수 있었다. 공교롭게 번역을 하게 된 글에, Iteration Manager 라는 이름으로 그런 영향을 잘 정리되어 있다. SI 프로젝트에서도 애자일 프로세스를 적용한다면 상황파악과 대인기술이 뛰어난 동시에 기술적인 이해도 충분한 전문가가 필요하다. 그를 Iteration Manager라고 하든, 애자일 코치라고 하든.. 뭐라고 부르든.. 여튼 프로젝트 규모에 따라 기존 관리자와는 성격이 다른 일선 개발자와 함께 하면서 관리층에 개발자의 언어를 관리자의 언어로 전달할 수 있는 사람이 반드시 필요하다.

두번째는 도구는 프로세스에 비하면 참 사소한 문제고, 프로세스 역시 사람을 움직이지 못하면 말장난이 된다는 단순 명제를 실천해내는 것이다. 박재성씨가 SI 프로젝트에서도 애자일 프로세스는 가능한가? 에서 계약 문제를 아주 크게 다뤘지만, 내 생각은 좀 다르다. 본질적으로 계약과 개발 프로세스는 완전하게 연결되어 있는 것은 아니다. 나도 2년 전에 비슷한 취지의 글을 쓴 일이 있다. 조직의 구매, 인력 조정, 조달 등의 프로세스는 유연하지 못하기 때문에 계약 때, 이를 고려하는 것은 매우 중요하다. 그러나, 계약이 잘못되었다고 애자일 하지 못할 이유는 없다. 방법론자의 입장에서 정의하는 '애자일 프로세스'가 있겠지만, 실무자 입장에서야 '애자일'이라고 부르는 행위의 내용이 중요하니까. 내가 최초에 Continuous Integration을 적용하려 할 때는, 좋은 툴과 이를 활용하는 프로세스 자체에만 관심을 가졌다. 그러나, 막상 적용해보면 그것 자체는 그리 어려운 일이 아니었다. 정말 핵심은 팀원들이 내가 하는 일과 유관한 작업을 하는 누군가에 대한 배려를 하면서 지속적으로 통합하는 과정이었다. 툴, 프로세스보다는 팀이 Continous Integration 하는 것이 훨씬 중요하다는 산 경험을 얻었다.

아직 정리되지 않은 생각을 피력하게 된 계기는 재성씨의 글에서 볼 수 있는 열정과 희망에 대한 응원이다. 지금 SI 현장에서 애자일 프로세스 자체가 아니라, 거기서 얻을 수 있는 가치를 실천하려고 노력하는 사람들이 있다는 사실을 말해주고 싶었다.

사용자 삽입 이미지
Posted by 영회
프로젝트를 진행하면서 단순 개발자를 벗어나 요구사항을 수렴하는 역할에 이르면 회의를 진행해야 한다. 회의는 요구사항 수집을 위한 인터뷰일 수도 있고, 결과물에 대한 검토가 목적이거나 이슈사항에 대한 결정을 위한 것일 수도 있다.

경험이 많지 않은 팀원들이 회의를 진행하는 것을 관찰해보면 전해줄 수 있는 노하우를 알 수 있다. 후배에게 이를 설명해줄 때 가장 먼저 떠오른 것은 스페인에서 Continuation(?) 설명을 위해 Bruce Tate가 차용한 메타포였다. 바로 게임의 Save/Load 기능이다.

요구사항을 결정한 후 시간이 흐르고 나서, 분석/설계 과정에서 구체화 된 모습을 고객과 검토하는 자리를 갖는다고 해보자. 그 간격이 한달 정도였다고 가정하자. 개발자는 매일 그 내용을 고민해왔기 때문에 앞뒤 생략하고 본론을 말하고 싶을 것이다. 실제로 우리 팀원은 마치 어제 나와 협의했던 것을 다시 언급하는 것처럼 앞 뒤 자르고 본론을 말했다. 고객들의 표정은 밝을 리가 없다. 그가 이야기를 다 끝마친 후에야 회의가 시작했다.

고객들이 협의한 사항은 한 달 전의 기억으로 뇌 어딘가에 저장되어있다. 이를 꺼내오는Load 과정이 필요하다. 아무리 게임을 하고 싶다고 해도, Load 하지 않으면 진행할 수 없다. PC를 기동할 때 참을성을 요하는 것처럼 고객이 나와 같은 상황인지가 될 수 있도록 초기 진행을 해야 한다.

좀 더 효율적인 회의 진행을 돕기 위해 다음과 같은 단계를 알려주었다:
  • 목적 환기(왜 회의를 하는지?) ... 이슈나 결정사항 위주로 발언
  • 문맥(context) ... 맥락이 되는 상황 정보 공유
  • 형식(protocol) 합의 ... 자료를 준비했다면, 어떤 형식으로 볼 수 있는지
  • 의사진행 ... blah~ blah~
  • 결정사항 확인


Posted by 영회
3번인가 회고를 진행하다가 중요한 시점에 다다르자 회고를 빼먹었다. 마침 InfoQ에 올라온 기사의 내용을 보니 동병상련의 마음이 들어 간단히 정리해본다. 대부분의 내용이 공감이 가지만, 두드러진 두 개를 뽑자면


회고라는 이름으로 형식을 갖춰서 얘기를 하다 보면 주로 공자님 말씀이 나온다. 서로 막역하지 않은 팀인 경우에는 감정적인 요소보다는 이성적인/분석적인 내용을 주로 논의한다. 프로젝트 초반 다방면에서 브레인스토밍이 필요한 경우에는 유용했다고 하더라도 시간이 지나면 소재가 고갈한다. 이제는 진행과정에서 부딪히는 문제들을 주로 논의해야 하는데 감정적 사안들은 대부분 섣불리 다루려 하지 않는다. 그럴 때면 차라리 회고보다 회식이 나아 보인다. 회식자리와 같은 이야기가 나올 수 있는 회고 분위기는 어떻게 만들 수 있을까? 그리고 술을 싫어하거나 야근을 기피하는 팀원이 다수인 경우라면 또 어찌 할 수 있을까?
Posted by 영회
관리를 하다 보면 종종 발생한다. 많은 경우 사람이 직접 헤아리기도 하는데... 방금 그런 일을 해야 할 필요가 있었다.

[리뷰] 사람을 위한 자동화: Eclipse 플러그인으로 코드 품질 높이기 (한글)을 쓰면서 자연스레 전에 쓰던 Metrics 플러그인이 생각났다.

사용자 삽입 이미지

클래스 갯수, 메소드 갯수, 평균 라인 수 등등의 다양한 통계치가 나온다. 도리어 너무 항목이 많아서 필요한 정보를 찾기 어렵지만, 눈으로 갯수를 세는 일을 할 필요는 없어진다.
Posted by 영회
생각해보면 너무나도 당연한 일이거늘 대단한 것을 터득한 양 정리해두고 싶었다. 막상 정리를 시도해보니 뻔하고도 뻔한 말이다. 배움에는 끝이 없고, 새로운 것이란 존재하지 않는다는 말이 과연 진리인 모양이다. 현재를 지배하는 상황과 원칙을 고수하면서, 조금씩 개선하는 것이야 말로, 이터레이션(Iteration)의 요체다. 그것은 봄이 오면 싹을 틔우고, 자라나는 자연의 양상을 따라 하는 것에 지나지 않는 활동일 뿐이다. 또한, 식물이 자라나는 것이 거져 얻는 산물이 아닌 것처럼, 자고 일어나면 자연스레 향상되는 것은 아니다.

우리는 명확히 현재를 이해 아니, 우선 인정하고 이를 토대로 다음을 향해 걸음을 떼야 한다. 우리의 감각기관이 너무나 발달해선지 이런 단순한 사실을 실천하기엔 수많은 정보가 온몸으로 들어온다. 물론, 그에 앞서 스스로를 모르면 어디로 걸음을 떼야 하는지도 알 수 없지만...

각설하고, 여튼 이터레이션(이를 반복이라고 하든, 스프린트라고 하든 혹은 다른 뭐라 부르든)을 통해 팀이 실제적인 도움을 받기 위한 몇 가지 팁은

1. 계획을 짧게 가져가고 뒤를 돌아보란 것이다. (했던 일을 회고하거나 코드를 리팩토링 하거나...)
2. 팀의 작업을 항상 유기적으로 고려하라. (누군가 무슨 일을 하게 되면, 영향을 받게 되는 다른 사람과 그가 하는 일을 함께 고려해라)

이 두 가지만 팀의 현재 상황에 맞게 잘 적용할 수 있다면, 이터레이션은 강력한 무기가 될 수 있으리라 확신한다.

뜬 구름 잡는 이야기로 글을 시작했으니 조금 구체적인 이야기로 마무리를 해본다. 몇 주전까지 우리 팀의 작업 관리는 WBS의 작업목록과 아침 회의, 그리고 간헐적인 진척 확인에 의해 이뤄졌다. 작업(Task) 관리 진화를 이룬 지금 시점에서는 Mylyn + Trac 같은 도구를 활용하여 빠른 작업지시와 진척 확인이 가능해졌다. 아직은 전체 작업지시의 20 ~ 30% 수준이지만, 점진적으로 확대할 생각이다. 적어도 4주 후에는 대부분의 작업지시에 적용할 것이라 짐작할 수 있다.

자매(?) 글: 반복의 중요성을 반복해서 거론하다
Posted by 영회