프로젝트 관리 도구의 사용성

회사에 다닐 때, 몇몇 프로젝트 관리 도구들 – Microsoft Project나 dotproject 같은 웹 기반 도구들을 사용해보았는데, 쓸데없이 너무 복잡하거나, 필수적인 기능이 빠져있는 경우가 많았을 뿐만 아니라, 사용하기가 너무 불편했다.

dotproject

XP 방법론이나 TDD 같은 practice를 보면서, 그러한 방법론에 잘 들어맞는 툴이 없다는 것도 느낄 수 있었다.

예를 들어, XP 방법론에서는 User Story로부터 요구사항을 수집하고 구현해야할 기능들을 찾아낸다. 그리고 이러한 기능들 중, 특정 기간 내에 개발할 기능들을 골라낸다. 기능별로 여러 사람들에게 분배되고, 기능을 구현하면서 또는 사용자의 피드백을 통해 추가적으로 찾아낸 기능들은 다음번에 구현할 기능으로 넣어둔다. 이러한 프로세스를 따라가면서 기존의 프로젝트 관리 도구를 사용해보라. 페이지를 이리저리 왔다갔다 해야하고, 불필요한 수많은 정보들을 입력해야한다. 방법론이 강조하는 프로세스를 따라가면서, 프로젝트 관리자나 개발자가 프로세스 상에서 발생하는 정보를 자연스럽게 입력하고 조회하는 것은 매우 불편하다.

한마디로, 방법론 상의 프로세스와 프로젝트 관리 도구의 사용성은 잘 들어맞지 않는다. 하지만, 복잡한 프로젝트 관리 도구들을 사용하더라도 위의 프로세스에서 발생하는 정보들을 모두 표현할 수는 있다. 그렇다면 무엇이 문제인가?

그 이유는, 여러가지 방법론 사이의 중요한 차이점이 그것들이 가지고 있는 정보가 아니라, 정보가 전달되는 방법과 방향의 특성 – 프로세스에 있기 때문이다. 우리에게는 프로세스의 흐름을 잘 반영하는 도구를 찾아보기가 힘들다. 만약 이러한 요구를 잘 반영한 도구가 있다면, 요구의 반영은 잘 신경써서 만들어진(crafted) 사용자 인터페이스의 형태로 나타날 것이다. 이러한 점에서, 프로젝트 관리 도구의 불편함은, 도구의 기능적인 면과 도구가 다룰 정보에만 치중하고, 사용자 인터페이스 즉, 도구를 다루는 방법은 무시하는 프로그래머들의 일반적인 경향이 반영된 결과일런지도 모른다.

한편, 기존의 프로젝트 관리 도구들은 방법론의 특성을 제대로 반영하지 못할 뿐만 아니라, 그러한 방법론이 실무에 적용되면서 발생하는 변형들도 잘 반영하지 못한다.

프로세스 상의 약간의 변형이나, 필요한 정보 자체의 변형이 발생하는데, 대부분의 프로젝트 관리 도구는 이러한 변형을 잘 반영할만한 유연성을 갖추고 있지 못하다. 반대로, 특정 방법론(이른바 표준 방법론)에 잘 맞춰져있는 도구에 자신들의 방법론을 맞추는 것은 완전히 어불성설이다. (이는 많은 사람들이 저지르는 실수중의 하나이다.) 프로젝트의 환경에 따라 방법론은 적절하게 변형되기 마련이다.

nohmad 옹 최근의 웹 어플리케이션에 관한 글에서 소개된 sproutliner는 작업 관리를 위한 도구다. sproutliner는 자기가 원하는 대로 작업 항목의 필드를 늘리거나 줄일 수 있는데, 위와 같은 프로젝트 관리 도구상의 필요를 반영하는 것이 아닐까. 물론 작업 관리라는 한정된 기능을 수행하고 있고, 정보의 변형에 있어서의 요구만을 반영하고 있어서, 아쉬운 점이 좀 남는다.

sproutliner

또, 어떻게 보면, 방법론에 무관하게 유연한 도구를 만들고 싶다는 목적을 달성하기 위해서는, 커다란 단일한(monolithic) 도구가 아니라, sproutliner처럼 서로 통신할 수 있고 조합할 수 있는 작은 단위의 도구들의 형태를 가져야할 지도 모른다.

기회가 된다면, 내 주변의 – 나 자신 또는 나를 포함한 팀의 – 방법론에 잘 들어맞는 프로젝트 관리 도구를 만들어보고 싶다.

프로젝트 관리 도구의 사용성 더 읽기"

Profiling Ruby program

루비 프로그램 맨 위에 다음과 같이 적어주면 된다.
(여기를 참고.)

require ‘profile’

또는 ruby의 command-line parameter로 ‘-rprofile’을 줘도 된다. (역시 profile module을 맨처음 require하는 의미)

이런 방식으로 profiler와 함께 실행시켜보면 다음과 같은 결과를 볼 수 있을 것이다.

%   cumulative   self              self     total
time   seconds   seconds    calls  ms/call  ms/call  name
35.56     0.16      0.16       86     1.86     7.44  Kernel.require
8.89     0.20      0.04       57     0.70     1.58  SubscriptionManager#constructSubscriptionFromRow
8.89     0.24      0.04      203     0.20     0.30  Kernel.puts
6.67     0.27      0.03       23     1.30    10.00  Array#each
6.67     0.30      0.03        7     4.29    12.86  Mysql::Result#each
6.67     0.33      0.03      728     0.04     0.04  Array#[]
4.44     0.35      0.02      407     0.05     0.05  IO#write
4.44     0.37      0.02       18     1.11     1.11  Mysql#initialize
2.22     0.38      0.01       92     0.11     0.11  Kernel.==
2.22     0.39      0.01       80     0.13     0.13  String#==
2.22     0.40      0.01       13     0.77     0.77  Module#attr_accessor
2.22     0.41      0.01       18     0.56     0.56  Mysql#query
2.22     0.42      0.01      119     0.08     0.08  Fixnum#to_s
2.22     0.43      0.01       31     0.32     0.32  Module#attr_reader
2.22     0.44      0.01       22     0.45     0.45  Module#alias_method
2.22     0.45      0.01       57     0.18     0.18  Subscription#initialize

한편, eruby interpreter랑은 좀 이상하게 동작하는 (무한루프) 문제가 있어서, eruby tag를 모두 빼고 테스트해야만 했다. 이 문제는 좀 더 살펴보아야겠다.

Profiling Ruby program 더 읽기"

현업과 상아탑

80년대초 전산실 근무당시 일본NEC 직원이 TV(?) 한대를 가져와
“이게 PC라는건데 10수년후에는 동내 수퍼마켓에도 이걸 쓸거다.”
라면서 자랑했다. 당시 같이근무한 프로그래머들 조차 “아니 그럼
프로그램은 누가 짜서 그걸 돌려 말도않되..”라고 했던 기억이난다.

이상직님삼보 컴퓨터 (2005/5/19 목)에서 발췌

당시에 전산실에서는 PC가 완전히 듣도보도못한 기술이었겠지만 지금 듣고 있는 시스템 엔지니어링 클래스에서 들은 바로는 그 당시 우리나라 연구기관에서도 IBM 칩과 PCDOS를 가져다가 PC를 개발했었다고 한다. 대한민국이 브로드밴드 보급률로 유명해진 것은 얼마되지 않았지만, 시스템 엔지니어링 클래스를 가르치시는 전길남 교수님은 1980년대부터 국내 인터넷의 기반을 닦은 인물이다. 그 외에도 ETRI에 의한 TDX라든가 CDMA 기술의 개발도 우리나라에 보편화되기 훨씬 전부터 연구를 시작했던 것이었다. 요즘 한창 얘기가 많이 나오는 3G나 DMB 기술도 마찬가지다. 전길남 교수님의 랩에서는 수년 후에나 보편화될 가능성이 있는 람다 네트워킹(lambda networking)을 연구하고 있단다.

회사에 다니다보면, 또는 기술에 관련된 웹사이트를 돌아다니다보면, 나를 포함해 수많은 사람들이 동시대의 기술들을 허겁지겁 따라가는 모양새가 문득 눈에 띈다. 반면에, 대학 연구실이나 연구소 사람들은 10년 후에나 보통 사람들이 구경할 수 있는 것(물론, 어떤 것들은 아예 볼 일이 없게되겠지만)을 연구한다. 이건 누구나 알고 있는 평범한 사실이겠지만, 회사를 다니다가 복학해서 그 두가지 광경을 직접 보고 있노라니, 상아탑에 살고 있는 사람들에 대해 살짝 부러운 생각도 든다. 단지, 자신의 생존 조건과 격리된 학문에 대한 어설픈 동경인가. 글쎄.

10년 후에나 보편화될 기술을 연구한다는 것은, 10년 후의 시스템의 초기조건을 형성하는 일이다. 그리고 그 시스템은 초기조건에 민감하다. 자신의 밈(meme)이 영향을 미칠 수 있는 범위가 넓을 수록, 그리고 그 영향에 있어서 중요한 요인이 될 수록 가치있어 보이는 것, 일변 당연하지 않은가.

물론, 현업에서도 그러한 일이 불가능하란 법은 없다. 10년 단위는 아니더라도 신기술을 만들어내는 3-5년 단위의 프로젝트는 어느 정도 대규모의 회사라면 쉽게 볼 수 있고, 그들이 세계에 미치는 영향은 때로 어마어마하다. (예를 들어, 발매되지도 않은 XBOX 360, PS3에 대한 최근의 열풍을 보라.) 따라서, 현업과 상아탑이라는 이분법으로 보기에는 좀 무리가 있을지도 모르겠다.

대다수의 일반인들은 기술을 소비하기만 한다. 특정 분야에서 어느 정도 전문 교육을 받은 사람들은 다른 사람이 생산한 기술을 소비하면서 또 다른 기술과 가치를 창출한다. 그리고, 소수의 사람들이 새로운 기술을 생산해낸다. 이러한 기술 생산과 소비의 (양적이기보다는) 질적인 차이에 따라 생산 위주의 계층으로부터 소비 위주의 계층이 형성된다고 보는 것이 좀 더 현실에 적합할까.

그렇다면 나는 나에게 질문을 던진다. 난 이들 계층 중 어디쯤 위치하고 있을까. 그리고 어디에 위치하기를 원하는가.

현업과 상아탑 더 읽기"

새벽, 꿈

나는 친구와 함께 언덕과 산들로 둘러싸인 녹초지를 걷고 있었다. 매우 외딴 곳이어서, 우리는 겨우 히치하이킹을 할 수 있었고, 운전사 양반은 넉살이 좋아보였다.

언덕을 둘 셋 정도 넘었을까, 우리의 시야에는 강이 들어왔고 (강이라기보다는 바다 같기도 하고), 길은 강의 얕은 목을 가로질러 뚫려있었다. 강바닥에는 모래질의 흙이 투명하게 비쳤고, 마침 해가 질 무렵이라, 강(바다?) 저편은 아름답게 빛나고 있었다. 나 뿐만이 아니라 친구도 운전사도 그러한 경치에 경탄하고 있었고, 우리는 거기에 대해서 이야기를 나누었다.

마침 강을 건너고나서 바로 곁에 있는 높은 언덕에는 커다란 장원이 보였고, 우리는 경치도 구경할 겸해서 쉬어가기로 했다. 그 장원에는 인적이라고는 찾아볼 수 없었고 이상한 분위기가 감돌았다. 우리는 이곳저곳을 돌아다니다가 뒷뜰의 텃밭 정도임직한 곳을 발견했다.

그 밭에서는 코를 찌르는 악취가 났고, 처음에는 봄철의 작물을 심기 위해 거름을 뿌려놓은 것으로 생각했다. 하지만, 가까이 다가가자 반쯤 썩은 수백구의 시체들이 뒤섞여있는 것을 발견할 수 있었다. 나는 친구를 바라보았고, 또 운전사 양반을 바라보았는데, 내 상상인지 진실인지 몰라도, 그 운전사의 표정은 그 장원의 사연에 깊게 관여한 자의 것이었다. 모르는 체 우리를 꾀어 여기까지 데려온 것인가?

팔다리가 서로 뒤엉키고 살점이 반쯤 썩고 뼈가 들어난 시체들 사이에는 갓태어난 듯한 아이의 머리통도 뒤섞여있었다. 나의 머리속은 새하얗게 되어서 아무런 생각을 할 수 없었고, 운전사는 곁에서 무언가를 계속 중얼거렸다. 갑자기, 아이의 머리통이 (시체가?) 울음소리를 내면서 시체 무덤을 헤치고 튀어나왔다. 마치 시체로부터 살아있는 아이가 태어나는 듯이.

모든 게 깜깜해지며 빙글빙글 돌았고, 나는 잠을 깨었다.

새벽, 꿈 더 읽기"

Flickr + 문근영




문근영

Originally uploaded by Joseph Jang.

다른 분들의 Flickr 앨범만 보았을 땐, 단순히 Flash와 DHTML 기술을 활용한, 멋진 인터페이스에만 감탄을 했었는데요. 직접 사용해보니, 더욱 멋진 웹 어플리케이션임을 깨달을 수 있었습니다.
일단, 계정을 등록하고, 바로 업로드 툴을 다운받아 사용해 보았습니다. 간단하면서도 편리해서 큰 어려움이 없었습니다. 드래그앤드랍(drag & drop)을 통한 포토셋(photoset)의 생성과정은 너무나 친근하더군요. (어딜 가나 batch 모드를 빠뜨리지 않는 친절함도요.)
가장 멋진 기능은 지금 사용하고 있는 이 기능, 바로 다른 블로그 어플리케이션과 (각 블로그 어플리케이션 별, API를 사용하여) 연동이 가능하다는 것입니다. 저는 지금 flickr 사이트에서 블로깅 중입니다. 이것이 바로 개발자들이 꿈꾸는 상호 연동되는 웹서비스의 미래가 아닐까요?

당분간 flickr를 애용해주어야 겠습니다.

제 앨범이랑, 포토셋, 그 슬라이드 쇼도 감상해보시죠.
http://www.flickr.com/photos/josephjang/
http://www.flickr.com/photos/josephjang/sets/347410/
http://www.flickr.com/photos/josephjang/sets/347410/show/

Flickr + 문근영 더 읽기"

Peopleware: Productive Projects and Teams

Peopleware : Productive Projects and Teams, 2nd Edition by Tom Demarco, Timothy Lister

소프트웨어 개발 프로젝트는 수많은 요소들이 복잡하게 상호작용하는 시스템이다. 그렇다면 가장 중요한 요소는 무엇일까? 어떤 사람들은 프로세스와 문서라고 얘기하고, 어떤 사람들은 소프트웨어 개발자의 장인정신(craftmanship)에 있다고 생각하고, 또 다른 사람들은 조직이라고 얘기한다. Peopleware에서 얘기하는 것은 바로 사람이다.

Peopleware의 핵심은 소프트웨어 개발 프로젝트에서 개발자들을 행복하게 만들어주어야 한다는 것이다. 기업가나 관리자의 도덕성의 차원에서 이를 주장하는 것이 아니다. 개발자들을 행복하게 해주는 것이, 소프트웨어 개발 프로젝트의 생산성과 품질을 개선하기 위한 가장 중요한 요인 중의 하나라고 주장하고 있다.

이에 대한 중요한 근거 중의 하나는 소프트웨어 개발은, 기존의 제품을 생산하는 일(예를 들어, 치즈 버거 가게)과 완전히 다른 종류의 일이라는 것이다. 소프트웨어 개발은 기본적으로 사람들 사이의 커뮤니케이션이라는 점을 강조한다. 따라서, 치즈 버거 아르바이트생처럼 마음에 안들면 바로 자르고, 다른 사람을 고용할 수 있는 것이 아니고, high turnover – 높은 인력교체율을 경계해야한다고 주장한다.

초과근무(overtime)나 일중독(workholic)에 대해서도 마찬가지다. 개발자 자신이 원하든 원하지 않았든, 초과근무는 대체로 개발자의 삶을 행복하지 못하게 만들고, 따라서, 높은 인력교체율의 원인이 된다는 것이다. 그리고, 장기적으로 높은 인력교체율는 소프트웨어 개발 프로젝트 또는 기업의 비용을 증가시킨다는 것이다.

품질(quality)에 대해서는 매우 재미있는 생각을 보여주고 있다. 현실적으로 품질은 다른 중요한 비즈니스 요소(예를 들어, time-to-market)에 의해 희생될 수 있는 요소임을 인정하지만, 품질이 개발자를 행복하게 만들어줄 수 있다는 면에서 불필요한 품질을 적절하게 추구해야할 필요성이 있다고 얘기한다.

파킨슨의 법칙(Parkinson’s Law) – 어떤 일이든 그 일에 대해 할당된 기간을 채운다, 즉, 기간을 촉박하게 잡을 수록 생산성이 높아진다는 생각은 회사를 다닐 때에도 관리자나 같은 개발자들을 통해 자주 접할 수 있었던 생각이었다. DeMarco는 이번에는 실험 데이터를 통해서 이를 정면으로 반박한다. Parkinson 은 과학자가 아니었고, 그의 법칙도 어떤 근거가 있는 것이 아니라는 것이다. time-to-market이 중요한 요소일 경우에 어느 정도의 필요성은 인정하지만, 항상 적용하는 것은 어딘가에 문제가 있는 것이라고 지적한다.

여기까지가 Part 1의 중요한 내용들이다. Part 2에서는 지난 번에 부분적으로 언급했던 사무실(office) 환경과 개발자의 생산성과의 관계를 얘기하고 있고, 그 이후로는 주로 팀 빌딩(team building) – 어떻게 좋은 팀을 만들 수 있는가를 얘기하고 있다. 이 내용들 또한 실제로 내가 회사를 다닐 때 체감했던 내용들이고 또, 중요한 내용들이라고 생각한다. 기회가 된다면, 이 내용들에 대해서도 차후에 따로 다루어보겠다.

흥미로운 것은 많은 1987년에 처음 쓰여진 이 책이 최근에 유행하던 XP와 같은 방법론의 생각도 어느 정도 담고 있다는 것이다. (예를 들어, 40-hour week practice) 즉, XP는 어느날 갑자기 누군가의 머리로부터 튀어나온 것은 아닌 것이다. DeMarco와 Lister는 그들의 컨설팅 경험을 이 책에 집약해놓았고, 내 경험에 비추어보더라도, 현업의 개발자들이 항상 체감하고 있으면서도, 자신의 환경을 바꾸려고 시도해보지는 않은 그런 내용들을 담고 있는 것 같다. 모든 관리자들이 이 책을 읽고 개발자들에게 기업과 개발자가 모두 행복해질 수 있는 바람직한 환경을 제공해주면 더할나위 없이 좋을 것이다. 하지만, 모든 개발자들이 이 책을 읽고 관리자에게 자신이 필요한 것을 요구하는 것이 그러한 날을 더 앞당길 수 있는 방법이 되지 않을까.

 

Peopleware: Productive Projects and Teams 더 읽기"

"해리 포터와 불의 잔" 영화 트레일러

역시 크리스마스 시즌에 개봉할 “해리 포터와 불의 잔”트레일러(mov)가 나왔군요. 좀 더 성숙한 엠마 왓슨의 모습입니다. 애들은 빨리 크는군요.

영화 나오기 전에 해리 포터 동화책 버전도 읽어봐야하지 않을까 하고, 알라딘을 뒤적거리다, 그만두었습니다. 그냥 영화만 볼렵니다. 시간도 없고, 돈도 없고, 결정적으로 별로 안 당기는군요. 그 시간에 딴 책을 읽는 게 낫겠습니다.

"해리 포터와 불의 잔" 영화 트레일러 더 읽기"

Rich Internet Application 기술

인터넷 어플리케이션의 세상을 살아가는 소프트웨어 개발자로서, 놓칠 수 없는 흐름이, RIA(Rich Internet Application) 기술의 흐름이다. ActiveX가 기술적으로 좋은 선택이 아님에도 불구하고, 우리나라에 ActiveX 기술이 보편화된 것은, 바로 RIA 기술에 대한 요구의 반영이라고 볼 수 있다.

DHTML이나 Gmail에서 도입된 후 유행하고 있는 ajax, Flash 등도 모두 이러한 흐름의 한 갈래라고 볼 수 있다. (nohmad님의 flickr-throws-flash-adopts-dhtml 참고)

또한, 이러한 frontend 기술들을 backend 기술과 조합한 RIA 솔루션을 제공하는 회사들도 있다. (일전에 #perky 채널에서 rapzzard님이 알려주신 것들을 정리해보았다.)

Rich Internet Application 기술 더 읽기"

UML Fever

얼마전에, ACM Queue에 올라온 Death by UML FeverUML Fever: Diagnosis and Recovery를 읽었다.

UML을 사용하면서 발생하는 여러가지 부정적인 현상들을 UML Fever라고 표현하고 있다. 이 글을 쓴 Boeing Company의 Alex Bell은 UML Fever의 궁극적인 원인은 그 기술이나 프로세스를 선택하고 적용해야하는 개인의 경험 부족에 있다고 본다. 쓸데없이 메타포를 남발해서 읽기가 굉장히 힘들지만, 요약하면 다음과 같은 현상들로 나타낼 수 있다.

  • 자신의 프로그램에 어떠한 기술과 프로세스가 적합한지 평가하는 것이 아니라, 다른 사람이 다른 프로그램에서 사용한 것들 그대로 받아들이는 행위.
  • UML 다이어그램만 있으면 자동적으로 소프트웨어를 개발할 수 있고, UML이야말로 모든 소프트웨어 공학의 해결책이다라는 생각.
  • UML artifact를 많이 가지고 있을 수록 가치가 증가한다는 생각.
  • 쓸데없이 너무 많거나 상세한 UML artifact를 만들어내는 것을 소프트웨어 개발 프로세스나 프레임워크 혹은, UML 그 자체의 탓으로 돌리는 행위.
  • 생산성의 향상을 이유로, 자신의 프로세스에 맞지도 않는 비싼 UML 툴을 구입하는 행위.
  • 이미 불필요해진 UML artifact를 버려서는 안된다고 생각하고, 비용을 감수하면서 관리하려는 경향.
  • 아무런 목적이 없이 UML을 만드는 행위.
  • 세분화된 기능적 decomposition을 use-case로 만들려는 경향. (모델을 단순화하려는 목적을 잃고, 오히려 더욱 이해하기 힘들게 만든다.)
  • UML 다이어그램을 극단적으로 상세하게 만드려는 욕구. (어떤 것이 중요하고 중요하지 않은지 판단하기 위해서는 코딩 경험이 중요하다.)
  • 상세한 디자인 요소들을 포함하는 거대한 UML 모델을 만드는 행위. (코드 없이, 모든 정보를 표현할 수 있다는 생각.)
  • UML 디자인 모델과 코드로부터 reverse-engineer한 구현 모델의 차이를 인지하지 못하는 것
  • 모든 프로젝트 구성원들이 경험에 상관없이 교환가능하다는 생각.
  • 전문적인 기술이 없는 사람을 그 기술이 필요한 position에 기용함으로써, 조직 전체가 그 사람의 practice를 best practice로 여기게 되는 현상.
  • 간단한 디자인 툴이나 언어 문법에 대한 클래스에 사람을 보내고서, 전문가로 될 것이라고 기대하는 행위.

UML Fever의 여러가지 현상은 단지 UML에 한정되는 것이 아니라, Software development에서 사용하는 모든 기술, 더 나아가서는 모든 기술에 적용된다고 생각한다. 어떤 기술에 대한 제대로 된 지식이나 경험의 부족은, 그 기술이 어떠한 해결책에 적합한지를 제대로 평가하지 못하게 만들고, 그 기술에 대한 맹신이나 잘못된 적용을 낳는 것 같다. 이와 비슷한 얘기를 삼색볼펜초학습법과 소프트웨어 엔지니어링이란 글에서도 언급을 했었다.

UML Fever 더 읽기"