Archive for the 'software' Category


인셉션를 보고 생각난 아키텍트에 대한 단상

Wednesday, August 11th, 2010

저도 2주 전쯤인가, 인셉션을 봤습니다. 아이디어는 참 참신한데, 줄거리를 요약하자면 참 간단한 영화죠. 하지만 상영 시간이 무척 길었지만, 시간 가는 줄 모르고 재미있게 잘 봤습니다. 영화를 보고 나서도, 한 1주일 정도 인셉션에 대해서 생각했을 만큼, 생각할 게 참 많은 영화였습니다.

영화를 보는 내내, 전 아키텍트 역할을 맡은 아리아드네에 대해서 많은 생각을 했습니다. 꿈 속의 세상을 창조하기 위해서 현실과 다른 건출물이나 공간이 필요하고, 이런 것들을 독창적으로 창조하려면, 창의력이 넘치는 아키텍트가 필요하다는 논리였습니다. 현실에 존재하지 않는 공간을 만들어 보라는 코브의 요구에, 아리아드네가 세상을 반으로 접는 장면에서 정말 소름 끼칠 정도로 멋있더군요.

도시 계획이나 건축에서 시작과 끝을 결정하는 건, 아마도 아키텍트일 겁니다. 물론 대규모 프로젝트에 돈을 대는 사람의 의견도 중요하지만, 아키텍트가 본질적으로 건축과 도시 계획을 통해서 어떤 철학을 펼치느냐에 따라서, 그 창조물이 달라지겠죠.

예를 들어서, 자신만의 공간을 만들기 좋아하는 아키텍트는 세상과 건출물을 단절시키는 형태로 공간을 창조할 것이고, 자연과 어울림을 중요하게 생각하는 아키텍트는 건축물이 자연과 잘 어울리게 만들겠죠. 아니면 권위적이거나 건축주의 명성을 널리 알리고 싶은 사람은, 상당히 위압적인 스타일로 공간을 창조할 겁니다.

어떤 형태로 공간을 만들든, 그것은 아키텍트의 경험과 철학이 녹아 있는 창조물이고, 그 공간은 아키텍트가 죽더라도 몇 십년 혹은 몇 백년 동안 아키텍트의 정신적 DNA를 후대에 전할 겁니다.

소프트웨어 분야에서도, 말이 참 많은 게 있습니다. 바로 아키텍처와 아키텍트입니다. 최근에는 아키텍처에 대한 용어에 대해서 공통 분모가 많이 생겼는데요. 그래도 아키텍처 그러면 개발자가 어떤 도메인에서 어떤 기술을 사용해서 일했느냐에 따라서, 그 정의가 참 달라집니다.

인셉션에서도 나온 이야기지만, 공간을 만들 때 기억에 의존하지 말고 창의력을 사용하라고 하죠. 하지만 이 이야기는 곰곰히 생각해 보면, 제 경험상 참 어려운 이야기입니다. 예를 들어서 웹 개발에 잔뼈가 굵은 아키텍트가 임베디드 소프트웨어의 아키텍처를 만든다고 하면, 대개 자신이 경험한 웹 아키텍처를 생각하면서 구조를 만들 겁니다. 천재들의 창의력은 잘 모르겠으나, 범인들의 창의력은 대개 자신이 경험한 것을 바탕으로 하기 때문이죠.

어떤 한 분야에서(웹, PC베이스, 임베디드 등) 경험이 많은 아키텍트라도 새로운 분야에서 이전 분야에서 효과적인 아키텍처를 그대로 적용하는 데 한계가 있습니다. 물론 이전 경험을 토대로 공부를 많이 하고 시행착오를 겪으면 다른 사람보다 빨리 새로운 분야에서도 아키텍처를 만들겠죠. 그래서 아키텍트는 장인이 아닐까 하는 생각이 듭니다.

이런 이유로, 이 바닥에서 열심히 일하는 엔지니어는 모두 아키텍트의 반열에 오르고 싶어 하겠죠. 자신의 철학과 경험을 반영한 소프트웨어 아키텍처를 통해서, 자신의 사고 DNA를 세상에 널리 전파하고 싶어하기 때문에요.

* 꼬랑지: 직업 성격상 다른 조직에서 만든 소프트웨어를 볼 일이 있습니다. 그런데 아키텍처가 없는 조직에서 만든 소프트웨어는, 구성원 가운데 누구도 어떻게 동작하는지 큰 그림에서 그리고 자세하게 설명해 주지 못하더군요. 그런 소프트웨어에 무언가를 추가하는 일은 참 힘든 것 같습니다.

창조의 기쁨: 책쓰기, 앱개발

Monday, July 26th, 2010

가끔 제게 책을 써서 용돈 좀 벌지 않았냐는 질문을 하시는 분들이 계십니다. 저도 속시원하게 용돈 좀 벌었다고 한턱 쏘고 그러면 좋을텐데요, 현실은 그렇지 못합니다. 처음에 책을 쓸 때는 대박이 나서 컴퓨터도 바꾸고, 해외여행도 가고 그런 꿈을 꿨는데, 따뜻한 꿈이 차가운 현실이 되고 보니, 책 써서 돈 벌기가 무척 힘들다는 걸 알게 되었습니다.

아이폰이 도입되고, 안드로이드 폰도 부흥기를 맞이하면서 앱 개발로 대박을 낸 분들의 소식을 들을 수 있었습니다. 요즘 경력사원을 구할 때마다 인사부서에서 흔히 들을 수 있는 이야기는, 쓸만한 사람이 싹 사라졌다는 푸념입니다. 스마트폰 시장이 활성화되면서, 그동안 제대로(?) 대접받지 못한 고급 개발자들을 대기업에서 모두 스카웃하기 때문이라는 원인 분석도 있죠.

개발자 품귀현상은 개발자 삶에 한발을 담그고 있는 사람으로서 기분이 좋습니다. 하지만 혹자는 아이폰 개발이란 백만원 정도의 초기투자를 해서 맥컴퓨터를 사지만 사실 얼마를 벌지 모르는, 애플식  다단계 업이라고 말하기도 합니다. 밀레니엄 때의 IT붐을 말하면서, 스마트폰 개발자 시장도 포화될 것이라는 암울함을 말하는 분들도 있습니다.

부푼 꿈으로 시작한 책쓰기나 대박을 꿈꾸면서 시작한 스마트폰 개발의 끝이 미약하게 끝나는 건 그다지 유쾌하지 않습니다. 하지만 이런 돈벌기 관점에서 한발 물러서면, 자신이 좋아하는 걸 한다는 순수함이 있습니다.

수중전, 지상전, 공중전, 우주전쟁까지 겪어본 성숙한 사회인이 순수한 즐거움을 느낀다는 건, 부자가 천국에 가는 일처럼 어려운 일이 아닐까 합니다. 그렇게 즐겁게 좋아하는 일을 하다 보면, 언제가 글쓰기의 즐거움과 개발의 기쁨말고 다른 것을 얻을 때도 있겠죠.

SW프로젝트 성공하고 싶다면, 간트차트를 버려라!

Wednesday, March 31st, 2010

간트 차트의 문제 - 정확하지 않지만 정밀하다

SW프로젝트나 일반 프로젝트를 해 본 분들이라면, 누구나 간트 차트를 들어 보셨거나 만들어 보셨을 겁니다. SW프로젝트를 시작할 때, 프로젝트에서 할 일을 잘게 쪼갠 WBS를 작성하고, WBS에 있는 일들의 인과관계를 고려해서 대개 MS 프로젝트를 사용해서, 예쁜 멋진 간트 차트를 작성하죠. 이렇게 간트 차트를 작성하면 놀랍게도 프로젝트가 몇 월, 몇 일, 몇 시에 끝날지 알려 줍니다.

간트 차트가 몇 월, 몇 일, 몇 시에 끝날지 알려줄 있는 이유는, 핵심 경로(Critical Path)를 계산해 주기 때문이죠. 그런데 간트차트의 비극은 바로 이 핵심 경로에서 시작하죠. 사실, 간트 차트가 알려주는 완료일은, 현실 세계에서 수많은 완료일 가운데 하나일 뿐입니다. 대개 프로젝트와 멀리 떨어진 경영층이나 관리자들은 간트차트가 알려주는 완료일을 진짜 완료일이라고 생각하는 경향이 있습니다. 일정이 간트 차트를 따라서 진행되지 않으면, 관리자들은 프로젝트에 무슨 문제가 있다고 확신하고 PM에게 압박을 가하죠.

일정에 쪼들리지 않을려고, PM이나 팀원들은 일마다 버퍼를 두게 되고, 이 때문에 핵심 경로는 늘어나고 결국 프로젝트 전체 일정은 늘어나게 되죠.* 뭐 이렇게 일정이 늘어난다고 해서 경영층이 그것을 묵과하지 않습니다. 엄청난 노력을 들여서 99%의 정확성이 있는 일정을 작성해도(가능한 일인지 모르지만요), “일정 좀 줄여 봐!”라고 경영층 한 마디면 프로젝트는 침몰하게 되는 마당에, 버퍼가 잔뜩 들어 있는 일정을 경영층이 쉽게 봐주지도 않습니다. 뭐 이런 저런 이유로, 간트 차트를 두고 일정을 늘릴려는 팀원과 일정을 줄여 보려는 경영층 간의 힘겨루기가 일어납니다.

간트 차트를 사용할 때 마인드 - 모든 것을 예측하려고 한다

사람은 예측을 잘 하지 못합니다. 마트에 가서 1주일 먹을 것을 잔뜩 사오거나, 도서관에서 오늘 공부할 교재를 가방 가득히 넣어 가거나, 회사에서 오늘 할일 목록을 LCD 모니터만큼 채우는 것을 보면, 우리는 정말로 낙관적이거나 예측을 잘 하지 못하는 생명체라는 생각이 듭니다. 그런데 길게는 12개월 후나 짧게 6개월 후의 프로젝트 일정을 TV편성표처럼 작성한다는 게 정말로 올바른 일이거나 가능한 일일까요? 12개월 후에 테스트라는 업무를 할 것을 예측할 수 있지만, 하루 단위로 어떤 기능을 테스트한다는 계획을 세운다는 건, 신이 아닌 이상 불가능합니다. 그런데, 우리는 간트 차트를 사용하면, 전지전능한 신이 된 듯이 예측을 합니다.

간트 차트는 누구의 것?

프로젝트 계획을 세울 때, 일반적으로 팀원들은 프로젝트 계획을 프로젝트 관리자가 알아서 할 것이라고 생각합니다. 관리자들도 프로젝트 계획을 세우는 일은 자시만이 할 일이라고 생각하죠. 그리고 프로젝트 관리자는 이런 인식을 토대로 프로젝트 계획을 마이크로소프트의 프로젝트를 활용해서 멋진 간트 차트로 만들어 팀원들을 모아놓고 일정을 설명합니다.

스크린에는 관리자가 심혈을 기울려 만든 3레벨짜리 WBS가 흘러갑니다. 팀원들은 팔짱을 끼고 의자에 기대어 관리자가 만든 프로젝트 계획을 묵묵히 바라봅니다. 팀원들은 왠지 저대로 하면 프로젝트가 성공할 것 같다는 생각도 들고, 한편으로 참으로 빡빡하게 일정을 짜놓은 팀장의 세심함에 가슴이 답답해집니다. 그리고 원인 모를 좌절감 내지 죄책감을 느낍니다. 계획 과정에서 적어도 뭔가를 했어야 하지 않았을까 하는, 그런 느낌 말이죠.

From 겸손한 개발자가 만든 거만한 소프트웨어

간트 차트의 다른 문제점으로, 프로젝트 일정을 팀원들이 자신이 것이 아닌 PM의 것으로 생각하게 합니다. 회의실에 팀원들을 모아놓고 MS 프로젝트를 사용해서 일정을 작성하는 걸 생각해 보죠. 프로젝터에는 PM의 노트북 화면에 있는 PM 프로젝트가 보일 겁니다. 팀원들은 회의 탁자에 둘러 앉아서 팔짱을 끼거나, 업무 수첩에 낙서를 하거나, 동료와 잡담을 하면서, PM이 MS 프로젝트에 입력하는 걸 ‘구경’할 가능성이 높습니다.

PM은 팀원들의 이야기를 들어가면서 WBS를 만들고 작업 사이를 연결하는 걸 자신의 역할이라고 생각하겠죠. 그리고 팀원들도 프로젝트와 관련된 중요한 작업을 하는 것 같은데, 당장 자신이 타이핑을 하지 않기 때문에, 자신의 역할이 아니라고 생각합니다. 즉 회의실에 모여 앉아서, PM이 MS 프로젝트를 사용해서 일정을 작성할 때, 그 일정은 팀원의 것이 아닌 PM의 것이라는 인상을 심어줄 수 있습니다.

그래서? 어떻게 하라고?

전 앞에서 설명 드린 이유로, SW개발 프로젝트를 할 때, 특히 명확하지 않은 것을 개발할 때 간트차트를 활용하는 걸 좋아하지 않습니다. 하지만 할 일이 명확하고 몇 번 경험이 있는 프로젝트는 어느 시점에 어떤 인력이 무슨 일을 할지 예측할 수 있기 때문에, 간트 차트가 도움이 될 수 있습니다. 즉 처음부터 어떤 일을 할지 거의 대부분 알 때에만, 간트 차트를 활용합니다.

이런 경우를 제외한다면, 프로젝트에는 불확실하게 지나치게 많기 때문에, 불확실성과 변화를 포용하려고 연동 계획하기(Rolling wave planning)과 포스트잇을 활용한 일정잡기를 사용하죠. 이 두 가지 방법은, 매니지 잇에서 자세하게 설명되어 있습니다. 상세한 내용을 원하시는 분들은 책을 참조하세요.

연동 계획하기는 앞으로 4주간의 상세한 일정만을 작성하는 계획하기입니다. 4주 이상 넘어가는 일정은 불확실한 게 많기 때문에 정확도가 떨어집니다. 따라서 일단 4주간의 일정 계획을 세운 다음, 1주일이나 2주가 지난 뒤, 프로젝트가 진행되고 나서 경험이 쌓였을 때, 다시 4주간의 일정을 세우는 방법입니다. 이런 계획을 세울 때, PM 혼자서 타이핑을 하는 MS 프로젝트를 이용해서 일정을 수립하지 않고, 모든 팀원이 참여해서 계획을 세울 수 있는 포스트잇 일정잡기를 이용하죠.

연동 계획하기를 할 때, 팀원들을 모두 모이게 한 다음, 손바닥만한 포스트잇을 나눠 줍니다. 벽 한면에 A1 종이를 붙이거나 화이트보드를 계속 사용할 수 있다면 화이트 보드에, 중요한 마일스톤을 표시하죠. 그러고 나서, 팀원들에게 포스트잇 한장에 필요한 업무를 적어서 종이나 화이트보드에 붙이라고 부탁합니다. 그러고 나면 정말로 멋진 일이 일어나죠. 팀원들이 처음엔 어색해 하다가, 포스트잇에 일정을 써서 붙이면서 서로 작업 사이에 연관 관계는 어떤지, 어떤 위험이 있는지, 목표는 명확한지 토론을 합니다. 이렇게 일정을 세우면, 팀원들이 직접 참여했기 때문에 MS 프로젝트 간트 차트보다, 프로젝트를 자신의 일로서 여기게 됩니다.

짧은 글에서 제가 생각하는 간트 차트의 문제점과 대안을 이야기했는데, 제가 인지하지 못한 간트 차트의 장점이 있을 수도, 제가 말씀 드린 방법의 문제점이 있을 수도 있습니다. 다만, 우리가 더 나은 것을 꿈꾼다면, 지금의 사용하는 방법은 교리가 아닌 여러 갈랫길 중 하나일 뿐이라는 걸, 더 나은 길이 있을 수 있다는 걸 말씀 드리고 싶었습니다. :)

* 이것을 해결하는 방법으로 TOC도 있습니다. 상세한 내용은 골(The Goal)을 읽어보세요.

[서평] Rework

Wednesday, March 17th, 2010

37Signals를 처음 알게 된 건 레일즈를 번역할 때였습니다. 그때는 web2.0 바람이 거세게 불었죠. 레일즈를 만든 데이비드 하이네마이어 한스(David Heinemeier Hansson)씨가 이 회사의 프로그래머이고, 37Signals의 서비스를 레일즈를 사용해서 만든 탓에, 이 회사는 유명세를 탔죠. 저도 이 회사에서 만든 서비스를 이용해 봤는데, 그 느낌이 참 간결하고 필요한 것만 있는 게, 딱 제 스타일이었습니다.

그리고 몇 년이 흘렀습니다. RSS 리더기에 37Signals 블로그를 등록해 두고 글을 읽었는데, 최근에 블로그를 통해서, 37Singals에서 Rework라는 책을 발간했다는 걸 알게 됐죠. 몇 년 전에도 Getting real(한국어 번역본)이라는 책을 이 회사에서 냈습니다. 상당히 간결한 책이지만, 이 회사의 철학을 잘 말해주는 듯했고, 참 재미있게 읽었습니다. 그때의 경험 탓인지 이번엔 어떤 이야기가 있는지 궁금해서, 아이폰 킨들로 접속해서 바로 구매해서 읽었습니다.

Rework

짧은 분량이기도 하지만, 내용이 재미있어서 금방 읽었네요. 에릭 싱크의 소프트웨어 비즈니스(Eric Sink on the Business of Software)라는 책이 있죠. 인터넷에 무료로 공개되어 있고, 국내에도 번역된 책입니다. 소프트웨어 비즈니스는 독립 소프트웨어 벤더(ISV, Independent Software Vendor)라는 1인 소프트웨어 기업을 창업하고 성공적으로 운영하는 방법을 소개한 책입니다.

소프트웨어 비즈니스도 재미있게 읽었는데, 한가지 아쉬움 점은 돈을 버는 방법이 다소 국내 실정과 맞지 않단 점이었습니다. 이 책에서 말하는 방법으로 사업을 운영하려면 국내에서 불가능하기 때문입니다. 당시만 해도 국내에서 소프트웨어를 돈을 주고 산다는 개념은 희박하기 때문이죠(물론 이 점은 이 책의 한계라기보다, 국내 환경 때문입니다).

앱 시장이 열려기 때문에 지금은 많이 달라졌습니다. 그렇다고 모든 개발자가 대박이 날 수 없지만, 그래도 앱 시장이 열리기 전보다 비약적으로 좋아졌습니다. 에릭 싱크의 소프트웨어 비즈니스는 내용이 방대해서 ISV의 A부터 Z까지 알려주는 반면, Rework는 소프트웨어 비즈니스만큼 상세함이 없지만 혼자서 뭔가를 시작해 보고 싶지만 용기가 부족하거나, 사업은 뭔가 거대하고 대단한 것으로 생각하시는 분들에게 비즈니스란 그렇게 심각하지 않아도 된다는 점을 알려줍니다. 그리고 이 책에서 말하는 건 꼭 소프트웨어 분야에만 적용되지 않습니다. 사업이라면 모두 해당되는 이야기죠.

이 책에 대한 번역을 제가 맡고 싶어서 국내 출판사에 판권을 알아 봤는데, 이미 다른 출판사에 팔렸다고 합니다. 아쉽지만 실력있는 분이 좋은 번역서로 만들어 주시길 바라면서, 이 책을 읽고 난 제 마음을 잘 표현한 사진 한장으로 서평을 마칩니다.

thumbs up