2009년 1월 7일 수요일

하루에 몇 번 커밋하세요?

한 개발자가 하루에서 수도 없이 커밋(Commit)을 하고 있다면 소스코드관리시스템을 백업서버로 쓰고 있을 가능성이 높습니다.
사실 이러한 경우를 매우 자주 봤습니다.

혹시 코딩을 하다가 점심 먹으러 간다고 한번 커밋하고 중간 중간에 수시로 커밋을 하고 있으면 이건 좋은 방법은 아닙니다.
혹시 이런 방법으로 소스코드관리시스템(SVN, CVS, VSS, ClearCase 등)을 사용하고 계신지 확인해보십시오. 본인이 아니라도 이렇게 백업용도로 사용하고 있는 동료나 후배가 없는지 확인해보십시오.

커밋을 하면 소스코드의 Revision이 바뀌게 되는데, 각각의 Revision은 의미를 가지게 됩니다. 
그 의미가 "점심 먹으러 나가면서 임시로 저장" 이렇게 되면 곤란합니다.

각 Revision의 정보는 우리회사 개발의 역사로서 영원히 남게 되는데 그런 쓰레기 정보를 남기면 안되죠.
누군가는 각 Revision에서 바뀐 내용을 알기 위해서 Diff를 해볼 것이고, 이를 이용해서 Merge도 할 수 있고, 원 소스코드 작성자에게 내용을 물으러 올 수도 있습니다.

그래서 커밋(Commit)은 아무 때나 아무렇게나 하면 안됩니다. 각 회사마다 소스코드관리시스템을 사용하는 규칙이 필요하고, 이를 지켜야 합니다.
소스코드를 수정하기 위해서는 항상 버그ID(Issue ID)가 필요하며 그에 따른 수정 내용은 한번에 커밋을 하는 것이 바람직합니다. 그리고 커밋을 할 때는 회사의 규칙에 맞는 형식으로 Message를 남겨주어야 합니다. 이때 버그ID와 수정 내용 및 Peer Review(Desk check 정책을 사용할 경우)를 한 사람은 꼭 기록하는 것이 좋습니다.

이렇게 쌓인 소스코드관리시스템의 History와 마구잡이로 규칙없이 사용한 History는 나중에 그 가치와 활용도가 확연히 차이가 나며 개발 생산성에 많은 영향을 주게 됩니다. 

사소해 보이지만 쌓이면 정말 큰 차이가 나는 중요한 개발 규칙 중 하나입니다.

2009년 1월 6일 화요일

공사판 프로젝트?

가끔 소프트웨어 프로젝트가 공사판 같다는 얘기를 하는데, "공사판"이 들으면 기분 나쁠 수도 있겠습니다. ^^

요즘 빌딩 공사현장을 가만히 보면 깜짝 놀랄 때가 많습니다.
엄청난 규모의 빌딩을 만드는데, 사람을 그렇게 많이 보이지 않고 척척 빌딩이 올라가는 것을 보면 놀라움을 금할 수 없습니다.
모듈화된 건축방식, 자동화된 기계들, 전문화된 각각의 전문가들, 상세한 설계, 체계적이 프로젝트관리.
소프트웨어 개발과 사뭇 비슷하면서도 소프트웨어 개발 프로젝트가 공사판 같았으면 좋겠다라는 생각을 해보게 됩니다.

PS) 사실 소프트웨어 개발의 용어 중 상당부분은 공사 용어에서 왔습니다. 
프로젝트관리의 뿌리도 건축, 건설이죠. 


2009년 1월 2일 금요일

2009년 새해가 밝았습니다. - 개발자에게도 희망의 한해가 됐으면...

소프트웨어 개발자 여러분 무자년동안 수고 많으셨습니다.
기축년에는 하시는 일 모두 잘 되시기 바랍니다.

제가 처음 소프트웨어 개발일에 뛰어 들었을 때는 개발이란 사람들이 잘 모르는 "신기한" 직업 중에 하나였습니다.
재능이 있는 일부 특수한 사람들이 하는 일이 었지요.

그리고 한참 있으니, 20세기 말쯤 되나요? 최고의 선망의 직업이 되었습니다. 꾀죄죄하고 맨날 밤새면서 미래가 불확실해서 결혼을 하려고 해도 여자집에서 반대가 심했는데, 하루 아침에 최고의 신랑감이 되었었지요.

이것도 잠깐, 이제는 3D 직업 중 하나로 인식이 되어서 대학의 학과 중에서도 점점 인기 없는 학과가 되어가고 있는 것이 우리 S/W 업계의 현실입니다.

모든 것에 밝은 곳이 있으면 어두운 곳이 있지만, 20년도 안되는 시간에 참 많은 굴곡이 있었던 업계인 것 같습니다.

내려갈 만큼 내려갔으니 이제 올라가는 일만 남지 않았을 까요? 
한번에 좋아질 수는 없고, 또 옛날 같이 버블을 다시 기대할 수는 없습니다. 
맨날 밤새서 생활을 망가뜨리기보다는 정상적으로 일하는 방법을 익히고, 개발자로서 꾸준히 성장하는 방법을 배워야 겠습니다. 여러명이 모여서 효율적으로 프로젝트하는 법을 익히고, 훌륭한 개발문화를 다져가는 것이 길입니다.


제 블로그를 꾸준히 보고 계신 개발자 여러분, 감사합니다.
올해는 더욱 내실 있는 글로 여러분과 꾸준히 만날 수 있도록 하겠습니다.

2008년 12월 30일 화요일

소프트웨어는 소프트하지 않다.

소프트웨어는 손쉽게 수정할 수 있다고 생각하기 쉽습니다.
특히 고객이나 개발을 잘 이해하지 못하는 Sales part에서는 소프트웨어가 대단히 Soft해서 쉽게 주물떡 주물떡 해서 변경이 가능할 것으로 생각합니다.

하지만 무엇이 언제 수정되냐에 따라서 소프트웨어는 절대로 소프트하지 않습니다.
프로젝트 막바지에 요구사항이 변경되면 요구사항 분석 시 반영된 것에 비하여 수십배의 비용을 지불해야 합니다.

소프트웨어가 소프트하다고 생각하는 것은 비단 고객이나 Sales만이 아닙니다.
개발자들도 그런 생각을 하는 것을 종종 볼 수 있습니다.

개발자들은 자신이 뚝딱뚝딱 만들어 보고는 수정이 쉽다고 생각할 수 있습니다.
하지만 이는 간단한 프로토타입에 불과하고 실제 프로젝트나 제품을 만들 때는 사정이 달라집니다.
요구사항이 바뀌면 아키텍처가 바뀌어서 전체를 다 뜯어 고쳐야 할 수도 있습니다.

빌딩을 지을 때는 뼈대를 다 올리고 나서 이거 저거 뜯어 고쳐달라고 하지를 않습니다. 하지만 소프트웨어를 개발할 때는 다 개발해 놓고도, 부담없이 고쳐달라고 하는 경우가 비일비재합니다.

SW분리발주법이 이러한 부작용을 줄여 줄 수 있는 좋은 제도이나 아직 형식적인 가이드에만 그치고 있고 기업들은 얼마든지 이를 피해갈 준비가 되어 있습니다. 이렇게 후진적인 마인드가 결국 소프트웨어 업계를 공멸하게 만들어가고 있는데, 이 기형적인 소프트웨어 산업 구조는 쉽게 바뀌기가 어려운 상황입니다.

소프트웨어가 소프트하지 않다는 것을 우리 모두 인식할 때 조금씩 희망이 보이지 않을까요?

2008년 12월 26일 금요일

공든 탑을 쌓는 것은 수년, 무너지는 것은 한 순간



소프트웨어 개발 문화가 한 회사에서 제대로 정착하려면 수년이 걸립니다.
3년이 걸리기도 하고 5년이 걸리기도 합니다.

하지만 이것이 무너지는 데는 불과 몇 개월이 걸리지 않습니다.
손바닥에 올려 놓은 모래가 손가락 사이로 줄줄 빠져나가는 것처럼 허물어지는 것은 순식간입니다.

대부분의 이러한 개발 문화 와해는 경영층에서부터 시작됩니다.
 CTO를 잃거나, 회사의 경영방침이 완전히 단기적인 매출지향으로 바뀌면서 이러한 일들이 일어나곤 합니다.

수년간 키워온 남녀간의 사랑이 한 순간의 실수로 깨져버릴 수 있고, 이를 다시 회복하는 데는 오랜 시간이 걸리듯이 이렇게 와해된 개발 문화는 다시 일으키기가 쉽지 않습니다.

그만큼 소프트웨어 회사에서 경영층의 마인드가 미치는 영향은 큽니다. 
개발을 이해하지 못하거나, 이해하지 않으려고 하는 경영자는 단기적인 성과는 가능할지 몰라도 장기적 또는 Global한 성과는 기대하기 어려울 것입니다.

개발 문화는 쌓는 것만큼 지키는 것도 중요합니다.

이미지출처 : Microsoft Office Online

2008년 12월 24일 수요일

Agile에 대한 단상

올 여름 휴가 차 미국에 방문 했을 때 나의 오랜 친구이며 소프트웨어 개발 동지인 Eddy를 만났습니다. 
그 친구는 UC버클리에서 컴퓨터 사이언스를 전공하고 실리콘밸리에서 오랫동안 잔뼈가 굵은 친구인데, 같이 소프트웨어 공학에 대해서 토론을 하게 되었습니다. 그때 대뜸 "Agile을 아냐"고 물어보더군요. 그리고는 현재 미국에서 Agile이 얼마나 인기가 있는지 장황하게 설명을 해주더군요. 이때 저는 한국의 열악한 소프트웨어 개발 실정을 적나라하게 설명해 줬습니다. 이 친구 역시 한국 업체와 몇 번 일을 해본 경험이 있어서 이해를 하더군요.

지금 한국에서도 Agile에 대한 관심이 참 높은 것 같습니다. 저는 Agile을 헐뜯을 의도는 전혀 없습니다. 하지만 소프트웨어 개발에 꼭 필요한 기초조차 갖추지 못한 회사라면 Agile방법론을 시도한다고 해서 문제가 해결될 수는 없을 것입니다. 과거에 나왔던 수많은 방법론처럼 또 이를 맹신하고 따른다면 과거와 똑같은 실패의 경험을 또 하게 될 것입니다. 또하나의 Silver bullet이 될 수도 있습니다.

소프트웨어 역량평가표를 올린 적이 있습니다. 여기서 10점 이하의 하위 점수를 받는 회사라면 먼저 기초를 갖추고 개발자들의 역량을 끌어올리는 일이 우선이라고 생각합니다. 그리고 나서 Agile이 되었든, 무슨 방법이라도 효과를 발휘할 수 있을 것입니다.

2008년 12월 23일 화요일

사업부가 소프트웨어 조직에 미치는 영향

주변 소프트웨어 회사에서 사업부 형태의 조직을 접하는 것은 어려운 일이 아닙니다.
사업부라는 조직 구조가 꽤 인기를 끈 것은 사실입니다.
사업부란 특정 시장에 집중하고 시장의 요구에 빠르게 대응하기 위해서 만든 특수한 형태의 조직입니다.
보통 사업부는 상당히 많은 독립권을 가지고 있고 대부분의 결정을 사업부 내부에서 독립적으로 할 수 있습니다.
하지만 작은 회사를 사업부로 나눠서 각 사업부에 독립적인 책임과 권한을 주게 되면 득보다 실이 더 많아집니다.
하지만 사업부가 가지고 있는 단기적인 성과에 대한 욕심 때문에 사업부 조직 형태에 현혹이 되곤 합니다. 하지만 장기적으로는 잃는 것이 더 많을 수 있습니다.
사업부는 장점도 가지고 있는 조직 구조이지만 다음과 같은 단점들을 가지고 있습니다.

  • 사업부 간에 지식과 정보가 서로 공유하기 쉽지 않다.
  • 사업부 간에 인력을 공유하기가 어려워져서 한쪽 사업부의 인력이 모자라도 인력을 공유하는 등의 효과적인 인력활용이 어렵다.
  • 사업부 간에 기반시스템이 달라지고 개발 표준이 상이해져서 전사적인 개발 효율이 떨어지고, 미래에 다시 통합을 하려고 해도 쉽지 않게 된다.
  • 영업 위주로 개발을 하게 되어서 제품의 아키텍처가 점점 취약해진다. 버그가 많아지고, 시간이 흐를수록 신규 개발보다는 유지보수에 시간을 많이 소비하게 된다.
  • 단기적인 성과에 집착하여 개발자들의 역량 향상에 소홀해지고 장기적으로는 개발 생산성이 떨어진다.
  • 각 기능 조직의 인원이 분리되어 사업부끼리 기능이 중복되고 각각의 전문성도 떨어진다.
  • 사업부의 이익과 회사의 장기적인 이익이 서로 일치하지 않을 수 있다.

사업부를 시행하기 적당한 조직의 크기는 몇 백명 단위가 아닙니다. 몇 천명, 몇 만명의 조직 정도의 규모가 되어야 사업부를 시행할 수 있는 조직이라고 할 수 있습니다.
조직규모가 대단히 크거나 특수한 시장 상황에 대응하기 위한 특별한 목적이 있는 경우라면 상관이 없지만, 회사의 규모가 몇 백명 이하라면 개발조직은 한 조직에 속해서 관리되는 것이 좋습니다.
이미 사업부를 시행하고 있는 조직이라면 각 사업부의 개발 및 기술 전체를 통제할 수 있는 조직이나 CTO가 필요합니다. 그리고 가능하면 개발 조직은 하나로 합쳐서 전사적인 개발조직으로 움직이는 것이 좋습니다.
사업부 조직으로 인해서 개발조직이 이미 통합이 어려운 상태라면 개발 조직을 쪼갤 때보다도 몇배의 배용을 치뤄야 합니다.
따라서 개발조직은 장기적인 안목으로 신중하게 다뤄야 합니다.