검색어 개발프로세스에 대한 글을 관련성을 기준으로 정렬하여 표시합니다. 날짜순 정렬 모든 글 표시
검색어 개발프로세스에 대한 글을 관련성을 기준으로 정렬하여 표시합니다. 날짜순 정렬 모든 글 표시

2013년 10월 17일 목요일

부실한 공유문화를 지배하는 개발자의 심리 (개발문화 시리즈2)

본 글은 CNet 코리아에 기고한 칼럼입니다. (http://www.cnet.co.kr/view/25939)

본격적으로 소프트웨어 개발 문화에 대해서 얘기해보자.  첫번째는 ‘공유의 문화’다.

 회사마다  차이는 있지만  소프트웨어  회사에서  부실한  공유 문화는  많은  부작용의  원천이다. 여러 사람과 정보를 공유하는 것에 따른 장점은 여러가지다.  다양한 시각을 가진 이들의 의견이 반영되면서 프로젝트 리스크가 감소되는 건 물론 개발자는 자신이 해왔던 과거업무의 속박에서 벗어날 수 있다.

반대로 공유문화가 부실한 회사는 왜곡된 의사결정으로 프로젝트 리스크가 커지고, 아키텍쳐나 제품은 뒤죽박죽이 되는 경우가 많다. 개발자는 자신이 과거부터 해온 일들에 발목이 잡혀 고참이 되도 유지보수에 바쁘고 신참에게 일 시키기도 어렵다. 본인 스스로 고급개발자로 성장하기 어려운 구조라고 하겠다.

개발자가 수백명, 수천명인 회사나 개발자가 10명인 회사나 효율적인 공유없이 각자 일하는 것은 매한가지이다. 개발자가 수천명인 회사내부에서는 팀이 수백개가 아니고 회사가 수백개 있는 것 같은 현상이 벌어지기도 한다. 팀 내부 인원끼리는 서로 내용을 좀 아는데 다른 팀과는 공유가 매우 어렵다. 이를 개선하고자 개발 프로세스를 점점 복잡하게 만들기도 하지만 문화와 균형을 이루지 않은 개발 프로세스는 형식적으로 작동해서 효율도 떨어지고 개발자들에게는 짐이 될 뿐이다.

 겉으로는 공유를 주장하면서도 속으로는 공유를 꺼리는 개발자가 은근히 많다. 개발 내부의 아키텍처 문제나 골치 아픈 이슈들을 숨기고 시한폭탄으로 놔두는 경우도 있고, 바쁘다는 핑계로 또는 다른 사람은 이해하지 못할 정도로 어렵다는 이유를 대고 정보를 꼭 쥐고 있는 경우도 있다.

 전반적으로 공유문화가 부실하게 된 것은 현재 개발자들의 책임은 아니다. 원래 문화라는게 우리의 선조, 선배들이 만들어 놓은 것을  따르면서 아주 약간씩 바뀌는 것이다. 개발문화도 그렇다. 지금까지 선배들이 그런 환경에서 그렇게 일해 왔기 때문에 그런 문화가 형성되었고 우리도 거기에 적응해서 일하고 있는 것이다.

 문화가 바뀌기 어려운 이유는 나 혼자 노력해서는 안되기 때문이다. 다른 사람들은 공유를 위해서 노력하지 않고 나 혼자 애를 쓰면 나만 두배로 손해를 본다. 이는 ‘죄수 딜레마’와 비슷하다.

두 명의 사건 용의자가 체포되어 서로 격리되어 심문을 받으면 서로 간의 의사소통은 불가능하다. 이들은 자백 여부에 따라 다음의 선택이 가능하며 용의자들은 이를 알고 있다.

둘 중 하나가 배신하여 죄를 자백하면 자백한 사람은 즉시 풀어주고 나머지 한 명이 10년을 복역해야 한다.
둘 모두 서로를 배신하여 죄를 자백하면 둘 모두 5년을 복역한다.
둘 모두 죄를 자백하지 않으면 둘 모두 6개월을 복역한다.
 이 경우 서로를 믿고 협동하면 서로 이익이 되지만 대부분 서로 배신을 선택함으로써 나쁜 결과를 초래한다. 공유문화도 마찬가지다. 혼자서 공유한다고 애를 써도 다른 사람이 공유를 하지 않으면 혼자 고생만 하는 것이기 때문에 결국 서로 공유를 하지 않음으로써 서로 손해를 보는 결과를 선택한다는 것이다.

 공유문화는 소프트웨어 개발에 너무 중요하기 때문에 포기할 수는 없다. 그렇다고 노력하지 않고 효율적인 공유문화를 가질 수는 없다. 그냥 흘러가는 대로 놔두면 ‘죄수딜레마’는 어김없이 찾아온다. 개발자 입장에서는 능동적이고 주도적으로 공유문화를 만들어가기 어렵다. 일단은 습관이 되지 않은 상태에서 공유를 하려면 매우 어렵고 혼자만 공유를 잘하면 개발에 있어서 자신에 대한 의존도가 떨어지기 때문에 고민을 하기도 한다.

반대로 공유를 안하면 자신에 대한 의존도는 높아지지만 본인이 한 일에 발목이 잡혀서 성장이 어렵다. 여기까지 생각하는 개발자는 그리 많지 않다. 경영진이나 개발자나 모두 서로를 위해서 필요성을 깨닫고 제도적으로 의식적으로 오랫동안 각고의 노력을 해야 한다. 일단 문화가 자리잡고 나면 의식하지 않아도 저절로 공유를 하게 된다.

그러면 이제부터 많은 사람들이 왜 노력을 해도 공유에 실패를 하는지 2% 차이는 무엇인지 알아보자.

 첫째, 말로 하는 것보다 글로 적는데 익숙해져야 한다.

말로 대화하면서 개발하는 것이 더 효율적이라고 믿는 사람이 많지만 필자는 글로 적는 것이 더 효율적이라고 믿고 있다. 말은 오해도 많고 매번 다른 사람에게 다시 설명해야 하고 시간이 지나면 잊어버린다. 글로 써야 많은 사람에게 공유가 되고 리뷰가 가능하며 도움을 받을 수 있다. 글로 하는 커뮤니케이션은 기본적으로 공유의 준비가 다 되어 있는 것이다.

대화는 가장 비싼 수단이며 휘발성이 강하다. 대화가 아니면 해결하기 어려운 꼭 필요할 때와 대화가 가장 효율적일 때만 사용해야 한다. 글을 쓰는데 익숙하지 않은 개발자는 무조건 장황하게 쓰거나 개발자만 아는 어려운 용어를 사용해서 다른 사람이 이해하기 어렵게 만든다. 또 외계인의 언어처럼 도저히 이해가 안되는 문장구조를 사용하기도 한다.

처음부터 글쓰는 것은 거부하기도 한다. 개발문서는 소설처럼 감동을 줘야 하는 것이 아니기 때문에 잘만 훈련하면 개발자도 충분히 잘 쓸 수 있다. 신입 때부터 문서를 작성하는데 익숙해지면 된다. 그런 기회 없이 이미 고참이 되었다면 지금이라도 시작하면 된다. 깨닫는 것이 어렵지 지금이라도 노력하면 충분히 가능하다.

 둘째, 과도한 프로세스는 오히려 독약이다.

 대기업에서 많이 벌어지는 일인데, 현재 역량이나 문화수준을 훨씬 뛰어넘는 과도한 시스템과 프로세스를 도입해서 강요하곤 한다. 이런 경우 겉으로는 규칙을 지키고 비싼 시스템을 착실히 쓰는 것 같지만 속을 보면 형식적으로 따르고 흉내만 내서 효율은 오히려 더 떨어진다. 이런 일이 벌어지는 이유는 스스로의 역량이나 문화 수준을 과대평가 하기 때문이기도 하다.

제대로 된 CTO의 부재도 한몫 한다. 실전 경험이 부족한 SW 프로세스팀은 밑져야 본전 식으로 프로세스를 복잡하게 만들고 많은 문서를 요구하곤 한다. SW 프로세스팀도 이렇게 밖에 할 수 없는 많은 고충이 있다. 많은 문서 중에서 프로젝트에 실질적으로 필요한 문서는 한두개에 불과한 경우가 대부분이지만 회사에서는 나머지를 쉽게 포기하지 못한다. 이러다 보니 개발자들은 문서 따로 개발 따로 진행을 하고 문서는 개발에 별 도움도 안되고 공유의 목적으로도 의미가 없게 된다. 이런 식으로 문제가 발생하면 프로세스를 더 복잡하게 만드는 악순환이 진행된다.

 해결책은 스스로의 역량과 문화 수준을 정확하게 진단하는 것이다. 그리고 거기에 걸맞는 시스템, 프로세스를 도입해야 한다. 역량에 비하여 프로세스가 단순한 것은 큰 문제가 안되지만 반대의 경우는 더 비효율적이다. 지금처럼 과도한 프로세스를 계속 발전시키면 악순환에서 벗어나지 못하고 결국에는 10배 비효율적으로 개발을 해야 한다. 결코 프로세스로 모든 것을 해결할 수 없다는 것을 명심하자.

 셋째, 개발자 보고 알아서 잘 해보라고 하면 안된다.

 풀뿌리식으로 개선이 될 수 있는 사안이 아니다. 시스템과 프로세스도 필요하고 경영진의 의지와 후원이 절대적이다. 가장 중요한 것은 공유문화를 이끌 리더가 필요하다는 것이다. CTO급의 인물이 있어서 흐지부지 되기 쉬운 공유 문화 개혁에 꾸준한 추진력을 실어줄 수 있어야 한다. 역량 수준에 따라서 여러가지 시스템도 필요하다.

이슈관리시스템, 형상관리시스템, 코드리뷰도구, 위키, 지식관리시스템, 정보포털 등 여러가지가 있지만 모두 필요한 것은 아니다. 그리고 꼭 비싼 제품이 좋은 것은 아니다. 회사의 규모와 개발하는 소프트웨어의 성격에 따라서도 적절한 시스템이 다르다.

전문가의 도움을 받아서 가장 효율적인 프로세스와 시스템을 도입하는 것이 좋다. 프로세스와 시스템이 있다고 다 되는 것은 아니다. 임직원들의 마인드를 바꾸기 위해서 노력도 해야 하고 공유에 익숙하지 않은 직원들에게 효율적인 공유방법을 꾸준히 교육을 시키고 코칭을 해야 한다. 이는 매우 오래 걸리는 일이고 그래서 내부에 공유 문화 리더가 필요한 것이다.

 넷째, 나중에 몰아서 공유하면 실패한다.

 일기를 몰아서 쓰듯이 공유도 몰아서 하면 실패한다. 공유를 위해서 문서를 만들고 시스템에 기록을 하는 것이 목적이 되면 안된다. 이것들은 소프트웨어를 개발하는 과정이고 이렇게 개발을 해야 가장 빨리 효율적으로 개발할 수 있기 때문에 문서를 만들고 공유를 하는 것이다.

공유를 위해서 숙제를 하듯이 정리를 해서 시스템에 지식을 올리고 공유하는 것보다 매 순간 필요한 것들을 즉시 등록하는 것이 좋다. 공유할 것, 물어 볼 것, 의논해야 할 것들을 일단 적당한 시스템에 올려 놓고 진행을 하는 것이다. 그러면 자연스럽게 과정이 공유가 된다. 즉, 공유는 개발의 과정이고 일부이지 산출물, 부산물들이 아니다.

공유를 위해서 산출물을 만들어야 한다고 생각하는 순간 공유는 실패하고 산출물도 제대로 만들어 질리가 만무하다. 이렇게 만들어진 문서는 나중에 유지보수 시에도 활용도가 뚝 떨어진다. 공유목적으로도 실패한 것이다. 개발과정이 자연스러운 공유의 과정이 되도록 해야 한다.

 다섯째, 모든 사람이 다 너무 바쁘면 안된다.

 모든 개발자가 호떡집에 불난 것 같이 바쁜 회사가 많다. 가끔은 신입 개발자는 한가하고 고참들이 더 바쁜 경우도 있다. 이런 회사는 대부분 공유에 실패한다. 불 끄느라고 정신이 없어서 나머지는 눈에 들어오지도 않는다. 시니어 엔지니어가 될수록 시야도 넓어지고 생각도 많이 하고 여기저기 관여도 많이 해야 하기 때문에 정신없이 바쁘면 안된다.

손이 바쁘면 뇌는 느려진다. 코딩하느라고 바쁜 신입 개발자는 많아도 큰 문제가 없지만 고참들은 창의적인 생각도 많이 하고 타부서의 프로젝트도 파악하고 회사의 비즈니스도 알아야 하기 때문에 충분한 시간적 여유가 있어야 한다.고참 개발자는 공유를 가장 많이 하기도 하고 공유의 수혜자이기도 하다. 모든 사람이 모든 정보를 다 알 수는 없다. 자신의 레벨에서 공유하고 알아야 할 정보가 다르다. 고참 개발자의 손이 한가해지려면 이전에 공유를 잘 해왔어야 한다. 즉, 공유의 선순환이 필요하다.

 여섯째, 보안보다 공유가 우선이다.

 소프트웨어는 설계도면이 핵심이 아니다. 구성원들의 지식 공동체가 핵심이며 문서, 시스템, 경험, 지식의 복합체가 소프트웨어 회사 기술의 실체이다. 대부분의 SW회사는 HW분야에서 설계도면 빼돌리 듯 기술을 빼돌릴 수가 없다. 우리나라에서는 빈약한 공유문화 속에서 소수의 개발자가 거의 모든 정보를 독점하기 때문에 종종 기술을 빼돌리는 일이 벌어진다. 이런 상황에서는 보안을 아무리 강조해도 기술이 새나가는 것을 막을 수는 없다.

드물게 보안이 더 중요한 SW회사도 있기는 하지만 극소수에 불과하다. 보안에 대한 과도한 우려 때문에 공유를 너무 불편하게 하는 회사가 의외로 많다. 보안이 별 이슈도 아닌 회사도 공유에 거부감이 있는 직원의 주장에 넘어가서 공유를 포기한 회사도 많다. 훌륭한 오픈소스가 판치는 마당에 소프트웨어 회사에서는 숨길 것이 그렇게 많지 않다. 특수한 분야의 몇몇 회사를 제외하고는 모든 직원에게 모든 정보를 오픈해도 별 문제가 안된다. 보안을 과도하게 강조하여 공유에 제약을 가하기 시작하면 공유는 반쪽짜리가 되어서 효율은 엄청나게 떨어지게 된다.

 공유문화라는 것이 단어는 다들 잘 알고 있으면서 잘 안되는 대표적인 개발문화이다. 경험해보지 않으면 무엇을, 어떻게, 얼마나 자세히, 누구에게 공유하는데 잘 감이 잡히지 않는다. 위 여섯가지 가이드도 실전 적용을 해보고 자세히 들어가보면 아리송한 부분들이 많을 것이다. 그래도 시작이 반이라고 일단 시작을 해보자. 너무 큰 욕심은 경계하자.

회사에서는 꾸준히 투자를 해야 하며 처음에는 제도적으로 시작을 했다가 점점 습관화를 해 나가야 한다. 오래 걸리는 일이니 너무 근시안적으로 보지 말고 꾸준히 노력해야 한다.

2008년 12월 8일 월요일

우리 개발자는 뭐든 뚝딱 잘 만들어요.

소프트웨어를 개발하기 위해서는 기본적으로 갖춰야 할 인프라스트럭쳐시스템(Infrastructure System, 기반시스템)에 대해서 이미 본 블로그에 글을 올린 적이 있습니다.

그런데 여러 회사를 만나보니 이러한 시스템 중에서 일부를 직접 만들어서 사용하려는 경우를 종종 접하게 됩니다.

이런 회사를 "Tool company"라고 부릅니다.

자신들의 주력 제품이 아니고 개발하기 위해서 필요한 툴들을 만들어서 사용하려는 회사를 말합니다.
물론 워낙 특수한 형태의 툴로서 세상에 존재하지 않거나 구할 수가 없는 예외적인 경우도 있습니다.
하지만 개발 프로세스에 일반적으로 필요한 시스템들은 직접 만들어서 사용한다는 것은 큰 문제입니다.
특히, 버그관리시스템이나 프로젝트관리시스템을 만들어서 사용하거나, 만들려고 시도하는 회사가 많습니다.
그런 회사들은 이렇게 말합니다.

  • 우리회사는 다른 회사와 다르다. 우리는 임베디드 소프트웨어를 개발한다. 우리는 금융회사다. 우리는 게임회사다. 우리는 포탈이다. 이유도 많습니다.
  • 상용제품의 우리회사만의 요구사항을 만족할 수 없다.
  • 우리가 만들면 사용제품보다 더 잘 만들 수 있다. 
  • 우리 입맛에 딱 맞게 만들 수 있다. 그리고 필요할 때 언제든지 수정해서 사용할 수 있다.

특히, 개발자들이 이런 주장을 하는 경우가 흔합니다. 개발자들은 이런 것을 만드는 일을 만만하게 보는 경우가 많습니다. 경험이 적은 개발자들은 단순히 코딩해서 동작하도록 구현하는 것만 생각하는 경우가 흔합니다. 그 뒤에서 수십배의 일과 문제가 기다리고 있다는 것은 잘 모릅니다.
당장 원하는 기능의 툴을 만드는 것은 어려운 것이 아닙니다.
일단 툴을 만들어서 사용하기 시작하면 개미지옥에 빠져든 개미처럼 점점 빠져들며 헤어나오기 어려워집니다.
이렇게 만들어진 툴도 하나의 소프트웨어로서 유지보수가 필요해집니다. 기존의 버그도 잡아야겠고, 사용하다가 불편하면 계속 수정사항을 요구합니다. 
만들 때는 간단해 보였는데, 쓰면 쓸수록 손 볼일이 많아집니다.
본연의 개발업무에 집중해야 할 개발팀이 내부 툴 유지보수 하느라 시간을 낭비하고 쓸수록 기능도 만족스럽지 않다는 것을 알게 됩니다.

일단 우리회사는 다른 회사와 다르다고 생각하는 것은 좁은 시야와 경험의 부족에서 오는 착각입니다. 그리고 상용제품이 우리회사의 요구사항을 만족할 수 없는 것이 있다면 회사가 바뀌는 것이 좋습니다. 이 경우 회사의 프로세스가 잘못되어 있을 확률이 99%이상입니다. 사소하게 보아 넘기는 기능 하나하나에 깊은 의미가 있다고 생각하고, 좋은 툴이라면 거기에 맞추겠다는 생각으로 회사의 프로세스나 조직, 문화 등을 먼저 다시 생각해보는 것이 좋겠습니다.  

좋은 툴을 도입하는 것은 단순히 비용을 절약하는 것을 떠나서, 회사의 개발 프로세스까지 선진화된 형태로 바꿀 수 있는 힘이 있습니다. 반대로 말하면 이러한 툴이 없이 제대로 된 개발 프로세스로 개발을 하는 것이 불가능하다는 의미이기도 합니다.

이러한 것을 만들어서 쓰려는 "Tool Company"가 되어서는 안되고 좋은 툴을 찾아서 전사적으로 사용하면서 선진적인 개발프로세스와 문화를 받아들이는 자세가 필요합니다.

2008년 10월 29일 수요일

책소개 - 소프트웨어개발의모든것(All of Software Project)



이번에 집필한 책입니다.

소프트웨어 개발의 전반에 대한 기초에 대해서 다루고 있습니다.
코딩을 어떻게 하느냐하는 내용이 아니고 소프트웨어 회사라면 당연히 갖춰야 할 기반시스템, 조직, 프로세스 등에 대해서 현실적이고 체계적으로 정리를 했습니다.

책을 쓰면서 가장 어려운 점은 가능하면 많은 소프트웨어 개발자들이 볼 수 있도록 난이도를 조정하는 것이었습니다. 어차피 책이라는 것이 모든 사람의 눈에 맞출 수는 없으니까요.

그리고 너무 자세한 내용을 기술하지 않은 이유는 그러기에는 수천페이지도 모자를 수 있고, Detail한 내용은 또 많은 경로를 통해서 얻을 수도 있고 일부는 스스로 공부를 하거나 훈련을 해야하는 것이라고 생각했습니다.

그래서 소프트웨어 개발 및 프로젝트를 전체적으로 볼 수 있는 책으로 구성을 했고, 추후 쓰게될 책이나 블로그를 통해서 점점 디테일에 접근을 해나가려고 합니다.

책을 읽으신 독자분이나 그렇지 않은 분이나 블로그를 통해서 소프트웨어 개발에 관한 어떤 얘기도 의견을 주고 받고 싶습니다.

책 소개를 한번 보시죠. 





 책소개
대한민국 소프트웨어 분야 권위자인 김익환 대표와 전규현 수석이 제시하는 소프트웨어 개발 필드매뉴얼! 
실리콘밸리의 GE, SUN Microsystems와 안철수연구소의 CTO 등을 거치며 소프트웨어 개발 분야의 야전사령관으로 활동해 온 김익환 대표와, ‘한글과컴퓨터’ ‘안철수연구소’ 등을 거치며 현장을 리드해 온 전규현 수석이 제시하는 ‘소프트웨어 개발 실행 지침서’이다. 

많은 소프트웨어 개발자들이 프로젝트 진행에 대해 제대로 배울 기회를 갖지 못한 채, 과거부터 해오던 방법을 그대로 답습하고 있다. 그런 상태로 매일 프로젝트에 투입되다 보니, 야근에 야근을 거듭해도 프로젝트가 언제 끝날지 모르는 상황에 빠져들곤 한다. 이 책은 그간의 이 같은 문제를 해결하고 소프트웨어를 성공적으로 개발하기 위해 반드시 알아야 할 ‘조직’ ‘프로세스’ ‘문화’ ‘기반시스템’ ‘방법론’에 대한 현장 실무 위주의 전략을 제시한다.
      
 
 
 저자 및 역자 소개
저자 : 김익환
소프트웨어 컨설팅 회사인 ABC Tech의 대표이자 카이스트 소프트웨어 전문가 과정 겸직교수. 서울대학교 공과대학을 졸업하였고 미국 산호세 캘리포니아 주립대학에서 전산학 학사, 스탠포드 대학에서 전산학 석사를 취득하였다. 미국 실리콘밸리의 GE, Sun Microsystems등에서 약 16년간 소프트웨어 실무경력을 쌓고 세계 150여 개 기업에 인터넷 통합 메시지 솔루션을 제공하는 ‘스탠포드 소프트웨어’를 설립하여 제품을 개발하고 회사를 운영하였다. 2000년 귀국 후에는 소프트웨어 분야 컨설턴트로 활동하며 ‘안철수연구소’의 부사장 및 최고기술경영자(CTO)로 근무하였다. 저서로 『대한민국에는 소프트웨어가 없다』, 역서로 『세상을 바꾼 32개의 통찰』이 있다.

저자 : 전규현 (Ray)
ABC Tech의 수석 컨설턴트이자 프로젝트관리전문가(PMP, Project Management Professional)이다. 연세대학교 공과대학을 졸업하고 ‘한글과컴퓨터’를 시작으로 ‘안철수연구소’에 이르기까지 약 15년간 수많은 소프트웨어를 개발하였고 Programming Engineer, Project Leader, Project Manager, CTO 등 소프트웨어 개발 분야의 다양한 역할을 두루 경험했다. 현재는 소프트웨어 개발 컨설턴트로서 소프트웨어 회사의 개발에 관한 문제들을 해결하는 일을 하고 있다.

 
 
 목차/책속으로
• 목차보기
 
Part1 소프트웨어 개발의 기초 
1. 기반시스템 
기반시스템이 잘 구축된 사례┃기반시스템이 잘 구축되지 않은 사례┃소스코드관리시스템┃빌드시스템┃버그관리시스템┃테스트관리시스템과 테스트 자동화툴┃프로젝트관리시스템┃요구사항관리시스템 
2. 조직 
프로젝트 구성원의 역할 ┃조직체계 
3. 개발방법론과 프로세스 
소프트웨어 개발방법론┃소프트웨어 개발 프로세스 
4. 사람 
인재 확보┃문서 작성 기술 
5. 문화 
동료 리뷰┃연구┃공유┃품질 우선┃규칙 준수┃장기적인 관점으로 보기 

Part2 소프트웨어 개발을 성공으로 이끄는 법 
6. 생애주기 모델을 제대로 선택하라 
폭포수 모델┃반복 모델┃XP 모델┃사시미 모델┃발전적 프로토타이핑 모델 
7. 개발 단계별 계획을 수립하라 
개발의 각 단계┃단계별 인원 투입┃단계별 일정 분배 
8. 프로젝트 활동을 확실하게 관리하라 
프로젝트 성공 기준 마련┃개발 계획┃일정관리┃요구사항 분석┃설계┃구현┃품질관리┃리스크관리┃인력관리┃의사소통관리┃원가관리
• 책속으로
 
이 책에 담긴 내용은 소프트웨어 개발 프로젝트에 직접적으로 참여하는 사람들뿐만 아니라 소프트웨어 회사의 경영자, 프로젝트관리자, 개발자, 상위관리자 등 모든 사람들이 알아야 할 내용 모두를 포함한다. 여기서 말하는 소프트웨어 회사는 소프트웨어 제품만을 개발하는 회사를 지칭하지 않는다. 팩키지 소프트웨어를 만드는 회사나 SI회사는 물론, 장비에 탑재되는 임베디드 소프트웨어를 만드는 휴대전화 개발사나 복사기 제조사, 방대한 전산 시스템을 가지고 있는 은행이나 증권사 등 소프트웨어를 개발하고 유지보수하는 모든 회사가 여기에 해당한다. 
--- p.10 

소프트웨어 프로젝트는 그저 열심히 수행한다고 해서 성공할 수 있는 것이 아니다. 회사와 직원들 모두에게 기초가 갖춰져 있지 않은 상태로 진행하는 프로젝트는 모래성 위에 쌓아 올린 탑과 같다. 아무리 훌륭한 프로젝트관리자라 하더라도 소스코드관리시스템이나 버그관리시스템도 없고, 테스터도 없고, 개발자들이 서로 리뷰를 해본 적도 없다면, 이들을 이끌고 프로젝트를 성공시키기란 기적이나 다름없다. 반면 기초를 잘 갖추고 진행하는 프로젝트는 튼튼한 탑과 같이 견고하다. 
--- p.24 

시중에는 수많은 소프트웨어 개발방법론이 넘쳐난다. 지금까지 알려진 방법론만 100가지가 넘는다. 인터넷에서 이에 대한 설명만 보고 Template을 복사해 와서 회사에 적용한다는 것은 기적에 가깝다. Template과 Sample만 보면 방법론을 적용하여 선진 개발 방식을 따라 할 수 있을 것 같지만, 착각이다. 제대로 된 방법론을 잘못 오해하여 적용하거나 특정 부분에 집착하여 전체를 놓치는 경우가 많다. 
한 가족이 살기 위한 집을 짓는데 고층 빌딩을 만드는 방법을 적용하면 안 되고, 그렇다고 개집을 만들 때처럼 대충 지어서도 안 된다. 개집을 만들 때는 대충 만들어도 되고, 안되면 다시 만들면 된다. 그러나 빌딩을 만들 때는 한 치의 오차도 없이 정확하고 정교한 방법을 사용해야 한다. 
--- p.118 

SRS는 이 책 전체에서 소개하는 많은 문서 중에서 가장 중요하다. 프로젝트를 성공으로 이끄는데 가장 중요한 핵심이기 때문이다. 만약 소프트웨어 프로젝트에서 문서를 딱 하나밖에 만들 시간이 없다고 하면 SRS를 만드는 것이 좋다. 
--- p.220 

개발자들은 가장 먼저 
● SRS를 작성해야 한다고 생각하고, 
● SRS를 작성하면서 모든 관련자와 철저히 리뷰를 하고, 
● 프로젝트관리자는 개발자들과 함께 1, 2일 단위의 상세 일정을 작성하고, 
● 테스트팀은 SRS를 보고 테스트 Suite를 만들기 시작하고, 
● 개발 리더들은 화이트보드나 종이를 펼쳐놓고 아키텍처에 대해 토론을 하며, 
● 구현 시 모든 소스코드는 당연히 리뷰를 하고, 
● 개발자는 매일 스스로 일정을 업데이트 하고, 
● 소스코드 작성은 일일빌드가 깨지지 않으면서 이루어지며, 
● 소스코드관리시스템과 버그관리시스템을 효과적으로 사용하며, 
● 알파, 베타 단계 별로 모든 프로젝트 관련자들이 유기적으로 움직이며, 
● 일정에 맞춰 완성도 있는 품질의 제품을 출시한다. 
위와 같은 활동들이 당연하다고 생각되고 몸에 배어야 한다. 이러한 것들을 규칙만으로 통제를 해서는 달성하기 어렵고 한꺼번에 모두 다 습득하기도 어렵다. 하나씩 익혀서 몸에 배었을 때 소프트웨어 프로젝트를 성공하는 원리가 보이기 시작하고 좋은 제품을 만들 수 있을 것이다. 
--- p.318
 
• 출판사 리뷰
 
경영자에서 개발자까지, 
소프트웨어 회사에서 반드시 알아야 할 핵심 노하우 

이 책 『소프트웨어 개발의 모든 것』은 소프트웨어를 성공적으로 개발하기 위해 반드시 필요한 기초에 대해 설명하고, 그러한 기초를 확실하게 활용하고 실행하기 위한 저자들의 노하우를 제시한다. 여기서 제시하는 내용은 회사가 크냐 작으냐에 따라 달라지지 않으며, 어떠한 형태의 제품을 만드느냐에 따라서도 달라지지 않는다. 
1부 ‘소프트웨어 개발의 기초’에서는 소프트웨어 회사에서 기본적으로 갖춰야 할 5가지, 즉 기반시스템, 조직, 프로세스, 기술, 문화에 대해 설명한다. 이 5가지는 우리나라 현실에 맞지 않는 딴 나라 얘기가 아니며, 실제 경험을 통해 가능하고 유용한 것들만 모아 놓은 것이다. 당장 이 5가지를 한꺼번에 갖출 수는 없겠지만 회사의 실정에 맞게 차근차근 모두 다 도입해야 하는 것도 분명하다. 
2부 ‘소프트웨어 개발을 성공으로 이끄는 법’에서는 개발방법론의 선택과 도입방법 및 절차를 설명하고, 소프트웨어 프로젝트의 기둥이라 할 수 있는 SRS(Software Requirements Specification) 작성의 중요성을 설명한다. 더불어 소프트웨어 개발의 각 단계별 계획 수립 방법과, 프로젝트 전반을 확실하게 관리하기 위한 저자들의 노하우를 제시한다. 
추천평
이 책은 단순한 소프트웨어 공학 책이 아니다. 저자의 25년 소프트웨어 개발 경험과 이론이 응축된 결과물이다. 이 책에는 미국의 실리콘밸리, 한국의 대표적 소프트웨어 회사 안철수연구소의 개발 프로세스와 개발 인프라를 만들고 발전시킨 경험이 담겨 있다. 소프트웨어 개발자나 프로젝트 관리자는 물론 개발 부서장, 기획자 등 소프트웨어 개발에 관련된 모든 사람들이 반드시 읽어봐야 할 책이다. - 강은성 (SK커뮤니케이션즈 커뮤니티개발실장)

소프트웨어를 구현하고 개발을 관리하면서, ‘어떻게 하면 여러 명이 이 일을 함께 잘 할 수 있을까?’ 하고 늘 고민해왔다. 결론은 ‘기본에 충실’이다. 이 책은 실용적인 도구, 프로세스, 문화에 대한 설명을 통해 어떻게 소프트웨어 개발의 기본에 충실할 수 있는 지를 알려준다. - 조재희 (휴맥스 혁신실 부장)

소프트웨어 개발을 직업으로 준비 중인 모든 신입 개발자들에게 가장 추천할 만한 입문서다. 이 책을 읽으면서 떠오른 한 가지 생각은, ‘우리나라 소프트웨어 개발자 중 과연 몇 명이나 이 책에 수록된 지식들을 숙지하고 있을까?’ 하는 의문이다. 국내 모든 소프트웨어 개발 종사자들이 꼭 한번 확인해보아야 할 책이라고 생각한다. - 민상윤 (KAIST 겸임교수, 솔루션링크 대표)


독자서평:

2014년 6월 6일 금요일

SW업계에는 망치를 만드는 사람이 많다

누군가 빌딩을 만드는데 망치도 못도 다 만들어 쓴다고 하면 어떤 생각이 드는가? 빌딩을 만드는 사람은 망치와 못은 사다가 쓰는 것이 훨씬 낫다는 것을 누구나 알고 있다. 하지만 소프트웨어 업계에서는 망치와 못을 직접 만들어서 쓰는 사람들이 매우 많다. 소프트웨어 업계에도 망치와 못을 전문적으로 만드는 회사가 꽤 많지만 우리나라에서는 장사가 잘 안 되는 것이 현실이다. 

이같은 상황은 흔히 NIH(Not Invented Here) 신드롬이라고 불리기도 한다. 우리나라의 경우 더 심한 경향을 보이고 있고 이유도 매우 다양하다. 기업간에 협업이 잘되어야 망치회사도 흥하고 망치를 사다 쓰는 회사도 직접 만들어 쓰는 것보다 훨씬 효과적으로 소프트웨어를 개발할 수 있다. 망치 회사가 흥해야 망치를 만드는데 필요한 툴을 만드는 회사도 흥해서 덩달아 여러 회사가 잘되게 된다. 그런데 왜 우리나라에서는 이렇게 기업간의 협업이 잘 안 되는 것일까?

나는 여러 소프트웨어 관계자를 만나는데 엔진, 라이브러리 류의 소프트웨어를 개발하는 회사들은 국내 시장의 특수성에 대해서 하소연을 한다. 자신들의 솔루션이 국내 소프트웨어 회사들에게는 별로 인기가 없고 해외에서는 찾는 사람이 많다고 한다. 국내에서는 특히 조심을 하는 것이 기업들은 가격을 후려치려고 하고 데모를 보여주면 그대로 흉내 내서 만들기도 한다는 것이다. 물론 엉터리로 흉내는 내는 것이지만 이런 식으로 국내에서는 별로 비전이 없다고 한다. 

기업들은 자신들의 전문 분야에 집중하고 전문 분야를 개발하는데 필요한 툴이나 시스템은 다른 기업과 협력을 하는 것이 좋은데 이런 협력이 잘 안 되는 이유를 한번 살펴보자. 

첫째, NIH(Not Invented Here)신드롬이다. 

자신들이 최고라고 생각하면서 자신들이 직접 개발하지 않은 것은 배척하는 현상이다. 이런 개발자들을 인터뷰해보면 자신들이 개발하는 것은 너무 어려워서 자신들, 자신의 회사에서 밖에 개발하지 못한다는 얘기를 한다. 이와 똑같은 현상이 여러 기업에서 벌어지고 있으므로 똑똑한 사람들은 여기 저기 많이 있으며 외부의 창의력과 좋은 아이디어도 받아들일 마음가짐이 되어야 한다. 

세계적인 3D 설계 소프트웨어를 개발하는 오토데스크(Autodesk) 사는 진작부터 3D그래픽엔진은 테크소프트3D(TechSoft3D)사 엔진을 사용하고 있다. 그래픽관련 부분은 전문업체에 맡기고 자신들은 설계 애플리케이션에 집중하기 위해서다. 

둘째, 근시안적으로 비용을 절약하려는 경우다. 

요즘은 오픈소스 소프트웨어가 넘쳐나서 외부의 도움을 받을 수 있는 라이브러리, 툴, 컴포넌트 등이 많지만 여전히 상용 소프트웨어의 도움이 필요한 분야도 많다. 때로는 오픈소스와 상용 소프트웨어 사이에서 저울질을 해야할 때도 있다. 라이선스 계약에 따라서 제품을 팔 때마다 몇 % 또는 얼마의 비용이 계속 발생하기 때문에 커다란 결정이 아닐 수 없다. 

상용 소프트웨어를 활용하면 라이선스 비용 외에는 커다란 추가 비용이 없이 본연의 개발에 집중할 수 있다. 하지만 라이브러리, 툴, 엔진류를 직접 개발하면 개발 비용이 꾸준히 들어가게 된다. 오픈소스를 이용할 경우에도 이를 학습하고 유지하기 위해서 상당한 비용이 들어간다. 소프트웨어는 아기처럼 한번 탄생하고 나면 먹여주고 재워주고 비용이 계속 들어간다. 

초기 개발 비용의 수십배, 수백배가 들기도 한다. 상용 소프트웨어를 구매하는 비용은 명확하게 비용으로 보이지만 직접 개발하는데 들어가는 비용은 초기 개발비용만 고려해서 우습게 보는 경향이 있다. 하지만 대부분의 경우 직접 개발하는데 드는 비용이 상용 소프트웨어를 사다 쓰는 비용보다 훨씬 많이 들어간다. 게다가 더 큰 문제는 회사에서 본연의 제품에 집중하지 못하고 망치 만들고 못 만드는데 노력이 분산 된다는 것이다. 심지어는 망치를 잘못 만들어서 집을 제대로 만들지 못하기도 한다. 

물론 무조건 상용 소프트웨어를 써야 한다는 것은 아니다. 직접 개발을 하거나 오픈소스를 활용하는 것이 좋은 경우도 아주 많다. 여기에 들어가는 비용을 절대로 사소하게 생각하면 안된다는 것이다. 상용 소프트웨어라 하더라도 협력하기에 따라서 표준 제시 가격보다 획기적인 라이선스 조건으로 계약을 하는 것은 아주 흔한 일이다. 서로 윈윈할 수 있는 조건만 잘 맞는다면 가격은 그렇게 큰 장애물이 아니다.

셋째, 우리는 다르다고 생각하는 것이다. 

개발에 필요한 기반시스템을 구축해야 하는데 회사의 프로세스가 다른 회사들과 달라서 사다 쓰지 못하고 직접 개발을 해야 한다고 주장하는 경우를 많이 보았다. 한 예가 이슈관리시스템이다. 버그추적시스템이라고도 한다. 자신들의 회사는 개발 프로세스가 일반적인 경우와 달라서 거기에 맞추느라고 직접 개발을 해서 쓴다고 한다. 

하지만 대부분의 경우 우물 안의 개구리 같은 생각이다. 예외적인 몇 가지 경우를 제외하고는 자신들의 프로세스 자체가 잘못되거나 비효율적인 경우다. 그런데 그런 프로세스가 옳고 이에 맞는 시스템이 없다고 착각을 하고 있는 것이다. 시중에는 Mantis, Redmine, Jira 등 좋은 이슈관리, 버그추적 시스템이 많이 있고 이런 툴을 제대로만 사용한다면 좋은 개발 문화도 덤으로 얻을 수 있다. 자신들의 프로세스가 이런 툴과 맞지 않는다면 툴을 직접 개발하기 보다는 프로세스를 툴에 맞추는 것이 나을 가능성이 훨씬 높다. 

넷째, 상용 소프트웨어에는 없는 기능이라서 직접 개발해야 한다고 주장하는 경우다. 

여러 상용 소프트웨어 또는 오픈 소스를 조사해봐도 99%는 만족하는데 1% 기능이 부족해서 사용하지 못하는 경우도 많다. 그런데 예상외로 상용 소프트웨어를 만드는 회사들은 추가 기능 개발 요청에 상당히 적극적인 경우가 많다. 그런데 그런 시도를 해보지도 않고 그냥 포기를 하고 직접 만든다고 하곤 한다. 

당장 오늘 내일 필요한 것이 아니고 기획단계에서부터 검토를 할 경우 수개월의 여유기간이 있고 이 기간 동안에 추가 기능을 개발할 회사는 얼마든지 찾을 수가 있다. 하지만 이렇게 계획적으로 개발을 하지 않고 당장 필요하다고 하면 외부 업체와 협력할 시간적인 여유는 없게 된다. 급하다고 직접 만들기도 하는데 이는 새로운 문제의 시작일 가능성이 높다. 

영어 또한 상당히 큰 장벽이다. 이런 것을 조사하고 추가 개발을 요청하고 협력 방안을 조율하려면 어설픈 영어 가지고는 부족하다. 영어도 잘하고 소프트웨어 업계가 어떻게 돌아가는지도 잘 알아야 하기 때문에 그냥 영어만 잘하는 사람 가지고도 안 된다. 그래서 영어 실력이 부족하다 보니 시도도 못해보거나 시도를 해보다가도 매끄럽게 협력이 잘 안되는 경우가 많다.

소프트웨어 회사들이 다양한 소프트웨어를 개발하고 서로 협력해서 서로 키워가는 것은 전체 소프트웨어 생태계의 성장에 중요한 역할을 한다. 그런데 빌딩을 만드는데 집중할 업체에서 망치를 만드는데 신경을 쓰고 망치 업체는 망하고 이런 일이 반복되면 소프트웨어 생태계는 점점 쪼그라들고 만다. 

개발자들도 문제다. 기술을 잘 모르는 경영자들은 이런 판단을 직접 할 수는 없다. 개발자들에게 망치를 만드는 것이 좋은가, 사다 쓰는 것이 좋은가 물어볼 때 위에 제시한 이유들을 들어서 직접 개발해야 한다는 주장을 하는 경우가 압도적으로 많다. 잘못된 판단으로 빌딩을 만드는 회사는 망해도 개발자에게는 망치를 만드는 기술이 남았다고 생각할지는 몰라도 망치 전문업체의 기술에 비하면 “새발의 피”에 불과한 기술일 뿐이다. 

각 기업에서 이런 잘못된 판단이 이루어지는 이유 중 하나는 CTO의 부재 때문이다. 이런 결정은 회사의 미래에 매우 중요한 결정이기 때문에 개발자 한 명의 의견을 들어서 결정하는 것도 위험하고 회사의 기술을 책임지는 CTO가 결정을 해야 한다. 

소프트웨어 개발은 개인간의 협업도 중요하지만 기업간의 협업도 매우 중요하다. 내 것이 최고라는 생각을 버리고 서로 협력을 할 때 전체 소프트웨어 생태계가 좀더 나아질 것이다.


이글은 ZDNet Korea에 기고한 칼럼입니다.

2009년 5월 22일 금요일

악순환 vs. 선순환

지난번 글 (이 바닥을 못 벗어 난다.)의 추가 글입니다.
회사가 Risk가 큼에도 불구하고 Domain 지식이 점점 더 매달릴 수 밖에 없는 이유와 선순환을 하려면 어떻게 해야 하는지 좀더 현실감 있는 예를 보여주려고 합니다.

회사마다 상황이 모두 다르기 때문에 각자의 상황과 1:1로 다 일치하지는 않지만 참고하실 수는 있을 겁니다.

그럼 악순환과 선순환에 대해서 알아보죠.


Domain 지식에 점점 매달리게 되는 악순환의 고리
  • 주먹구구식 개발
  • 개발자에 의존한 코딩 중심의 개발 주도
  • 없거나 빈약한 개발 프로세스 및 개발 문서
  • 회사의 지식은 개발자 머리 속에 보관
  • 개발자 간 지식의 공유가 어려움
  • 후배 개발자들에게 지식 전달이 잘 안됨
  • 프로젝트가 커질수록 협업이 점점 어려워짐
  • 점점 더 경험 많은 개발자에 의존하게 됨
  • 경험 많은 개발자는 계속 더 바빠짐
  • 경험 많은 개발자들도 체계적인 개발은 꿈도 못 꾸고 매일 밑바닥 개발에 매달림
  • 개발자들이 Domain 지식은 점점 늘어가는데 소프트웨어 공학지식은 잘 늘지 않음
  • 회사에서는 신규 직원을 뽑아도 같이 협업이 잘 안되므로, 동일 Domain의 경험이 많은 개발자를 선호하게 됨
  • 경험 많은 개발자들이 퇴사를 해서 회사가 큰 타격을 입기도 함
  • 또 고참 개발자들이 퇴사할 까봐 전전긍긍하게 됨
  • 회사에서는 개발자들의 머리 속에 있는 지식을 공유하고 체계적으로 개발하고 싶으나 방법을 모름
  • 이에 대한 개혁을 해보려고 해도 번번히 고참 개발자들의 방해로 무산됨
  • 점점 더 경험 많고 Domain 지식이 풍부한 개발자들에게 의존하게 됨
  • 규모 있는 개발을 못하고 인원수에 의존한 개발을 하게 됨
  • 회사는 성장을 못하고 정체하게 됨
  • 고참 개발자들은 성장을 못하고 매일 밑바닥 코딩과 문제 해결에 매달리게 됨
  • 또 주먹구구식, 가내 수공업식 개발을 반복하게 됨

프로세스 중심의 선순환의 고리

  • 회사가 소프트웨어 개발에 필요한 적절한 프로세스와 인프라스트럭처 시스템을 갖추고 있다.
  • 개발자들은 프로세스 중심으로 개발이 되도록 잘 훈련 되어 있다.
  • 프로젝트 진행 시 꼭 필요한 스펙 문서와 설계 문서를 적절하게 만든다.
  • 문서와 코드에 대해서 적절히 Peer review가 이루어져서 지식의 전달이 잘 되고 결함이 사전에 제거된다.
  • 고참 개발자들은 코딩 보다는 주로 아키텍처와 비즈니스에 대해서 고민하고 해결한다.
  • 잘 작성된 스펙 문서와 설계 문서를 보고 후배 개발자들이 코딩하고 테스트 팀이 테스트를 진행한다.
  • 고참 개발자들은 오랜 개발 경력으로 Domain 지식도 풍부하지만 소프트웨어 공학 지식 및 경험도 풍부하다.
  • 후배 개발자들은 Domain 지식은 부족하지만, 설계 문서를 보고 인프라스트럭처 시스템을 활용해서 프로세스에 따라 개발하는데 별 문제가 없다.
  • 신규 개발자를 뽑아도 교육이 용이하고 바로 실무에 투입하기가 쉽다.
  • 고참 개발자들이 퇴사를 해도 상당히 많은 지식이 문서화 되고 이미 후배들에게 전파가 되어 있으므로 회사의 타격이 상대적으로 적다.
  • 퇴사한 고참 개발자들은 이직이 용이하고 더 높은 연봉으로 타 회사로 옮길 수 있다.
  • 회사에서는 Domain 지식이 너무 매달리지 않고, 실제로 Software 공학 지식이 뛰어나고 Software 개발 자체를 잘하는 인재를 선호하게 된다.
  • 회사가 성장하고 개발 규모가 커져도 문제 없이 대응할 수 있다.

그럼 악순환에서 선순환으로 바뀌는 방법에 대해서 의문을 가질 수 밖에 없습니다.

이는 참 어려운 숙제입니다.

운동을 안한다. -> 몸이 무거워진다. -> 운동을 더 안한다. -> 몸이 더 무거워진다.

이런 악순환의 고리를 끝는 것은 무엇을 까요? 일단 운동을 시작한다? 99%는 실패할 겁니다.

운동은 습관도 안들어 있고, 제대로 운동하는 방법도 모르고, 또 귀찮아지면 언제든지 포기하고, 잘못된 운동 방법으로 다칠 수도 있습니다. 그러면 운동에 대한 나쁜 기억만 쌓이고 다음번에는 더욱더 운동을 시도하지 않게 될 겁니다.

그래서 악순환의 고리를 끝는 것을 쉽게 얘기를 할 수 있어도 현실적으로 가능한 방법을 제시하는 것은 쉽지 않습니다. 물론 가장 적절한 방법도 회사마다 다릅니다.

하지만, 악순환의 고리를 끝는 방법 중에서 필수 요소는 경영자의 의지입니다. 경영자가 이러한 상황을 전혀 이해 못하고 있거나 의지가 없다면 그냥 계속 악순환의 고리를 돌면서 영업이나 잘하는 수 밖에 없습니다.

개발자들이 으쌰으쌰해서 점진적으로 개혁을 해보려는 시도는 매우 더딜뿐만 아니라 다양한 도전 및 방해로 무산될 가능성이 큽니다. 그래도 그런 과정에서 개발자들이 본인 스스로 공부는 될 수 있겠네요.

경영자가 의지만 있다면, 조직, 시스템, 프로세스적인 다양한 측면에서 효과적이고 적절한 개혁을 시도하여 회사를 바꿔나가서 점점 선순환의 고리로 옮겨 갈 수 있습니다. 

2012년 8월 27일 월요일

주먹구구식 개발이 통하는 이유

우리나라의 많은 소프트웨어 회사들은 주먹구구식 개발에 대한 환상이 있다.
특히, 첫번째 시스템을 주먹구구식으로 개발을 해서 성공했는데 지금은 좀더 체계를 갖췄는데 더 개발이 잘 안된다면 과거 진짜 주먹구구식으로 개발할 때를 그리워하고 그 때로 돌아가고 싶어 한다.

여기 이와 관련된 과거 글이 있다. 

주먹구구식으로 개발을 하다가 현재 체계를 갖추려고 노력하고 있다면 아직은 불완전할 뿐더러 반쯤은 주먹구구인 것이다. 그럼 주먹구구식 개발은 어떤 것인지 정의를 내려보자. 크게 5가지로 설명할 수 있다.

첫째, 스펙/설계 없이 개발을 하는 것이다. 또는 기능명세서, 시방서 등의 문서에 기능만 정리하여 개발하는 것이다. 이 방법은 프로젝트 전체 범위를 알 수 없을 뿐더러 좋은 아키텍처를 만들 수도 없고, 개발자들이 효과적으로 일을 나눠서 개발할 수도 없으며 프로젝트 진척상황을 거의 파악할 수 없다. 일정 지연은 일상이고 그야말로 끝나봐야 아는 것이다.

둘째, SVN, Git 등의 소스코드관리시스템과 Jira, Mantis, Redmine 등의 이슈관리시스템 없이 개발하는 것이다. 둘중 하나라도 사용하지 않으면 심각한 문제이다. 일단 쓰기만 하더라도 다행이지만 제대로 쓰는 것은 정말 어렵다. 대부분은 10% 정도의 기능밖에 사용하지 못하지만, 100% 기능을 활용해야 한다.

셋째, 혼자 북치고 장구치고 다하는 것이다. 일을 전문적으로 나눠서 하는 것이 아니고, 혼자서 기획, 분석, 설계, 코딩, 테스트, 빌드 등등 다 하는 것이고 이런 개발자가 여럿이고 서로 중복되서 일을 하기도 한다. 첫째에서도 언급했듯이 스펙이 제대로 작성되어야 일을 효과적으로 나눌 수 있는데 스펙이 없거나 부실하면 이런 현상이 벌어진다. 또, 회사의 조직이 소프트웨어 개발에 알맞게 효과적으로 구성되어 있지 않아도 이런 일이 벌어진다. 소프트웨어는 전문가들이 협업하여 개발하는 것이다.

넷째, 프로세스 없이 대충 개발하는 것이다. 흔히들 프로세스는 개발을 더 느리게 만든다고 주장하곤 한다. 그러면서 회사에서 프로세스를 만들려고 하면 반대 주장을 펼친다. 과거에 개발하던 방법을 서로 암묵적으로 알고 있다가 대충 개발을 하고 서로 이심전심으로 문제를 해결해 나간다.

다섯째, 리뷰, 공유 없이 개발하는 것이다. 가끔은 대충 기능목록 작성해서 마케팅이나 영업, 경영진과 리뷰를 하기도 하지만 제대로 된 리뷰는 아니다. 개발자를 제외하고는 지금 어떤 제품을 만드는지 정확하게 파악이 안된다. 심지어는 개발자들도 잘 모른다. 다 만들어봐야 어떤 제품을 만들었는지 알게 된다. 그러니 만들기 전에는 무슨 문제가 발생할지 몰라서 만드는 도중에 수많은 문제가 발생하고 재작업은 수시로 이루어 진다. 심지어는 80%쯤 만들었다가 아키텍처가 잘못된 것을 발견하고 다 버리고 다시 만들기도 한다.

정도의 차이는 있을 수 있다. 다섯가지 중에서 하나 이상이면 아직 주먹구구식 개발에서 완전히 벗어난 것이 아니다. 스스로도 주먹구구식으로 개발을 하고 있는지 평가를 해보자.


그럼에도 불구하고 주먹구구식 개발이 여전히 통하는 이유는 무엇일까?

첫째, Software의 크기가 아주 작다.
빌딩은 제대로 된 분석/설계 없이, 프로세스 없이 만드는 것은 불가능하다.
하지만 개집은 그런 것 필요 없다. 대충 만들어도 문제 없이 만들 수 있다. 한 사람이 머리 속으로 모든 것을 설계해서 만들 수 있는 정도의 규모라면 주먹구구식 방법도 훌륭한 방법이다.

둘째, 이직률이 극도로 낮다.
한번 개발을 해 놓으면 개발자들이 절대로 퇴사를 하지 않고 끝까지 책임져준다. 

셋째, 회사 규모가 작다.
개발자도 몇 명 안되서 서로 너무 잘 알고 모든 이슈가 더 구두로도 공유가 되고 급한 이슈는 자리에서 바로 일어나서 공유가 되고 논의할 수 있다. 가족적인 분위기에서 주먹구구식 방법이 훌륭하게 작동한다.

넷째, 소프트웨어 업그레이드가 없다.
한번 개발해 놓은 시스템이 업그레이드가 필요 없는 경우이다. 어떻게 든 첫번째 개발을 해 놓으면 문제가 없다.

그럼, 주먹구구식 개발이 앞으로도 계속 통할까?

회사가 잘되면 회사는 커지게 되어 있다. 개발자 수는 많이 늘게 되고 더 이상 자리에서 일어나 뒤로 돌아도 모든 개발자의 얼굴을 볼 수 없게 된다. 과거처럼 공유가 그렇게 잘 되지 않는다.

개발자들이 영원히 이직하지 않고 직원으로 있기를 바란다면 너무 큰 욕심이다. 개발자들은 언젠가는 이직을 하게 마련이고, 개발자들이 이직을 해도 개발은 잘 돌아가도록 되어 있어야 한다. 주먹구구식으로 계속 개발을 하게 된다면 아무리 가족적인 분위기라고 하더라도 직원이 Risk 요인이 된다.

Software 회사의 경영자라면 지금 대충 잘 굴러가는 것 같다고 해서 방심하면 안된다. 회사가 잘 되면 회사는 커지고 직원도 늘고 더 복잡해질 것이다. 문제를 모르고 방심하다가 문제가 터지고 나면 터진 댐을 막으려고 하는 것처럼 어렵다. 항상 미리 준비를 해야 하는 것이다.

물론, 처음부터 제대로 하는 것이 가장 빨리 개발하는 방법이고 좋지만 그것을 깨닫기는 매우 어렵다. 대부분은 문제가 터진 후에 우왕좌왕 한다. 주먹구구식 개발이 지금은 통할지도 모른다. 하지만 곧 주먹구구식 개발이 문제가 되는 상황이 올 것이고 이미 문제가 되고 있다면 너무 늦지 않았기만 바랄 뿐이다. 늦었다고 생각할 때가 가장 빠른 때이다.