본 글은 CNet 코리아에 기고한 칼럼입니다. (http://www.cnet.co.kr/view/25939)
본격적으로 소프트웨어 개발 문화에 대해서 얘기해보자. 첫번째는 ‘공유의 문화’다.
회사마다 차이는 있지만 소프트웨어 회사에서 부실한 공유 문화는 많은 부작용의 원천이다. 여러 사람과 정보를 공유하는 것에 따른 장점은 여러가지다. 다양한 시각을 가진 이들의 의견이 반영되면서 프로젝트 리스크가 감소되는 건 물론 개발자는 자신이 해왔던 과거업무의 속박에서 벗어날 수 있다.
반대로 공유문화가 부실한 회사는 왜곡된 의사결정으로 프로젝트 리스크가 커지고, 아키텍쳐나 제품은 뒤죽박죽이 되는 경우가 많다. 개발자는 자신이 과거부터 해온 일들에 발목이 잡혀 고참이 되도 유지보수에 바쁘고 신참에게 일 시키기도 어렵다. 본인 스스로 고급개발자로 성장하기 어려운 구조라고 하겠다.
개발자가 수백명, 수천명인 회사나 개발자가 10명인 회사나 효율적인 공유없이 각자 일하는 것은 매한가지이다. 개발자가 수천명인 회사내부에서는 팀이 수백개가 아니고 회사가 수백개 있는 것 같은 현상이 벌어지기도 한다. 팀 내부 인원끼리는 서로 내용을 좀 아는데 다른 팀과는 공유가 매우 어렵다. 이를 개선하고자 개발 프로세스를 점점 복잡하게 만들기도 하지만 문화와 균형을 이루지 않은 개발 프로세스는 형식적으로 작동해서 효율도 떨어지고 개발자들에게는 짐이 될 뿐이다.
겉으로는 공유를 주장하면서도 속으로는 공유를 꺼리는 개발자가 은근히 많다. 개발 내부의 아키텍처 문제나 골치 아픈 이슈들을 숨기고 시한폭탄으로 놔두는 경우도 있고, 바쁘다는 핑계로 또는 다른 사람은 이해하지 못할 정도로 어렵다는 이유를 대고 정보를 꼭 쥐고 있는 경우도 있다.
전반적으로 공유문화가 부실하게 된 것은 현재 개발자들의 책임은 아니다. 원래 문화라는게 우리의 선조, 선배들이 만들어 놓은 것을 따르면서 아주 약간씩 바뀌는 것이다. 개발문화도 그렇다. 지금까지 선배들이 그런 환경에서 그렇게 일해 왔기 때문에 그런 문화가 형성되었고 우리도 거기에 적응해서 일하고 있는 것이다.
문화가 바뀌기 어려운 이유는 나 혼자 노력해서는 안되기 때문이다. 다른 사람들은 공유를 위해서 노력하지 않고 나 혼자 애를 쓰면 나만 두배로 손해를 본다. 이는 ‘죄수 딜레마’와 비슷하다.
두 명의 사건 용의자가 체포되어 서로 격리되어 심문을 받으면 서로 간의 의사소통은 불가능하다. 이들은 자백 여부에 따라 다음의 선택이 가능하며 용의자들은 이를 알고 있다.
둘 중 하나가 배신하여 죄를 자백하면 자백한 사람은 즉시 풀어주고 나머지 한 명이 10년을 복역해야 한다.
둘 모두 서로를 배신하여 죄를 자백하면 둘 모두 5년을 복역한다.
둘 모두 죄를 자백하지 않으면 둘 모두 6개월을 복역한다.
이 경우 서로를 믿고 협동하면 서로 이익이 되지만 대부분 서로 배신을 선택함으로써 나쁜 결과를 초래한다. 공유문화도 마찬가지다. 혼자서 공유한다고 애를 써도 다른 사람이 공유를 하지 않으면 혼자 고생만 하는 것이기 때문에 결국 서로 공유를 하지 않음으로써 서로 손해를 보는 결과를 선택한다는 것이다.
공유문화는 소프트웨어 개발에 너무 중요하기 때문에 포기할 수는 없다. 그렇다고 노력하지 않고 효율적인 공유문화를 가질 수는 없다. 그냥 흘러가는 대로 놔두면 ‘죄수딜레마’는 어김없이 찾아온다. 개발자 입장에서는 능동적이고 주도적으로 공유문화를 만들어가기 어렵다. 일단은 습관이 되지 않은 상태에서 공유를 하려면 매우 어렵고 혼자만 공유를 잘하면 개발에 있어서 자신에 대한 의존도가 떨어지기 때문에 고민을 하기도 한다.
반대로 공유를 안하면 자신에 대한 의존도는 높아지지만 본인이 한 일에 발목이 잡혀서 성장이 어렵다. 여기까지 생각하는 개발자는 그리 많지 않다. 경영진이나 개발자나 모두 서로를 위해서 필요성을 깨닫고 제도적으로 의식적으로 오랫동안 각고의 노력을 해야 한다. 일단 문화가 자리잡고 나면 의식하지 않아도 저절로 공유를 하게 된다.
그러면 이제부터 많은 사람들이 왜 노력을 해도 공유에 실패를 하는지 2% 차이는 무엇인지 알아보자.
첫째, 말로 하는 것보다 글로 적는데 익숙해져야 한다.
말로 대화하면서 개발하는 것이 더 효율적이라고 믿는 사람이 많지만 필자는 글로 적는 것이 더 효율적이라고 믿고 있다. 말은 오해도 많고 매번 다른 사람에게 다시 설명해야 하고 시간이 지나면 잊어버린다. 글로 써야 많은 사람에게 공유가 되고 리뷰가 가능하며 도움을 받을 수 있다. 글로 하는 커뮤니케이션은 기본적으로 공유의 준비가 다 되어 있는 것이다.
대화는 가장 비싼 수단이며 휘발성이 강하다. 대화가 아니면 해결하기 어려운 꼭 필요할 때와 대화가 가장 효율적일 때만 사용해야 한다. 글을 쓰는데 익숙하지 않은 개발자는 무조건 장황하게 쓰거나 개발자만 아는 어려운 용어를 사용해서 다른 사람이 이해하기 어렵게 만든다. 또 외계인의 언어처럼 도저히 이해가 안되는 문장구조를 사용하기도 한다.
처음부터 글쓰는 것은 거부하기도 한다. 개발문서는 소설처럼 감동을 줘야 하는 것이 아니기 때문에 잘만 훈련하면 개발자도 충분히 잘 쓸 수 있다. 신입 때부터 문서를 작성하는데 익숙해지면 된다. 그런 기회 없이 이미 고참이 되었다면 지금이라도 시작하면 된다. 깨닫는 것이 어렵지 지금이라도 노력하면 충분히 가능하다.
둘째, 과도한 프로세스는 오히려 독약이다.
대기업에서 많이 벌어지는 일인데, 현재 역량이나 문화수준을 훨씬 뛰어넘는 과도한 시스템과 프로세스를 도입해서 강요하곤 한다. 이런 경우 겉으로는 규칙을 지키고 비싼 시스템을 착실히 쓰는 것 같지만 속을 보면 형식적으로 따르고 흉내만 내서 효율은 오히려 더 떨어진다. 이런 일이 벌어지는 이유는 스스로의 역량이나 문화 수준을 과대평가 하기 때문이기도 하다.
제대로 된 CTO의 부재도 한몫 한다. 실전 경험이 부족한 SW 프로세스팀은 밑져야 본전 식으로 프로세스를 복잡하게 만들고 많은 문서를 요구하곤 한다. SW 프로세스팀도 이렇게 밖에 할 수 없는 많은 고충이 있다. 많은 문서 중에서 프로젝트에 실질적으로 필요한 문서는 한두개에 불과한 경우가 대부분이지만 회사에서는 나머지를 쉽게 포기하지 못한다. 이러다 보니 개발자들은 문서 따로 개발 따로 진행을 하고 문서는 개발에 별 도움도 안되고 공유의 목적으로도 의미가 없게 된다. 이런 식으로 문제가 발생하면 프로세스를 더 복잡하게 만드는 악순환이 진행된다.
해결책은 스스로의 역량과 문화 수준을 정확하게 진단하는 것이다. 그리고 거기에 걸맞는 시스템, 프로세스를 도입해야 한다. 역량에 비하여 프로세스가 단순한 것은 큰 문제가 안되지만 반대의 경우는 더 비효율적이다. 지금처럼 과도한 프로세스를 계속 발전시키면 악순환에서 벗어나지 못하고 결국에는 10배 비효율적으로 개발을 해야 한다. 결코 프로세스로 모든 것을 해결할 수 없다는 것을 명심하자.
셋째, 개발자 보고 알아서 잘 해보라고 하면 안된다.
풀뿌리식으로 개선이 될 수 있는 사안이 아니다. 시스템과 프로세스도 필요하고 경영진의 의지와 후원이 절대적이다. 가장 중요한 것은 공유문화를 이끌 리더가 필요하다는 것이다. CTO급의 인물이 있어서 흐지부지 되기 쉬운 공유 문화 개혁에 꾸준한 추진력을 실어줄 수 있어야 한다. 역량 수준에 따라서 여러가지 시스템도 필요하다.
이슈관리시스템, 형상관리시스템, 코드리뷰도구, 위키, 지식관리시스템, 정보포털 등 여러가지가 있지만 모두 필요한 것은 아니다. 그리고 꼭 비싼 제품이 좋은 것은 아니다. 회사의 규모와 개발하는 소프트웨어의 성격에 따라서도 적절한 시스템이 다르다.
전문가의 도움을 받아서 가장 효율적인 프로세스와 시스템을 도입하는 것이 좋다. 프로세스와 시스템이 있다고 다 되는 것은 아니다. 임직원들의 마인드를 바꾸기 위해서 노력도 해야 하고 공유에 익숙하지 않은 직원들에게 효율적인 공유방법을 꾸준히 교육을 시키고 코칭을 해야 한다. 이는 매우 오래 걸리는 일이고 그래서 내부에 공유 문화 리더가 필요한 것이다.
넷째, 나중에 몰아서 공유하면 실패한다.
일기를 몰아서 쓰듯이 공유도 몰아서 하면 실패한다. 공유를 위해서 문서를 만들고 시스템에 기록을 하는 것이 목적이 되면 안된다. 이것들은 소프트웨어를 개발하는 과정이고 이렇게 개발을 해야 가장 빨리 효율적으로 개발할 수 있기 때문에 문서를 만들고 공유를 하는 것이다.
공유를 위해서 숙제를 하듯이 정리를 해서 시스템에 지식을 올리고 공유하는 것보다 매 순간 필요한 것들을 즉시 등록하는 것이 좋다. 공유할 것, 물어 볼 것, 의논해야 할 것들을 일단 적당한 시스템에 올려 놓고 진행을 하는 것이다. 그러면 자연스럽게 과정이 공유가 된다. 즉, 공유는 개발의 과정이고 일부이지 산출물, 부산물들이 아니다.
공유를 위해서 산출물을 만들어야 한다고 생각하는 순간 공유는 실패하고 산출물도 제대로 만들어 질리가 만무하다. 이렇게 만들어진 문서는 나중에 유지보수 시에도 활용도가 뚝 떨어진다. 공유목적으로도 실패한 것이다. 개발과정이 자연스러운 공유의 과정이 되도록 해야 한다.
다섯째, 모든 사람이 다 너무 바쁘면 안된다.
모든 개발자가 호떡집에 불난 것 같이 바쁜 회사가 많다. 가끔은 신입 개발자는 한가하고 고참들이 더 바쁜 경우도 있다. 이런 회사는 대부분 공유에 실패한다. 불 끄느라고 정신이 없어서 나머지는 눈에 들어오지도 않는다. 시니어 엔지니어가 될수록 시야도 넓어지고 생각도 많이 하고 여기저기 관여도 많이 해야 하기 때문에 정신없이 바쁘면 안된다.
손이 바쁘면 뇌는 느려진다. 코딩하느라고 바쁜 신입 개발자는 많아도 큰 문제가 없지만 고참들은 창의적인 생각도 많이 하고 타부서의 프로젝트도 파악하고 회사의 비즈니스도 알아야 하기 때문에 충분한 시간적 여유가 있어야 한다.고참 개발자는 공유를 가장 많이 하기도 하고 공유의 수혜자이기도 하다. 모든 사람이 모든 정보를 다 알 수는 없다. 자신의 레벨에서 공유하고 알아야 할 정보가 다르다. 고참 개발자의 손이 한가해지려면 이전에 공유를 잘 해왔어야 한다. 즉, 공유의 선순환이 필요하다.
여섯째, 보안보다 공유가 우선이다.
소프트웨어는 설계도면이 핵심이 아니다. 구성원들의 지식 공동체가 핵심이며 문서, 시스템, 경험, 지식의 복합체가 소프트웨어 회사 기술의 실체이다. 대부분의 SW회사는 HW분야에서 설계도면 빼돌리 듯 기술을 빼돌릴 수가 없다. 우리나라에서는 빈약한 공유문화 속에서 소수의 개발자가 거의 모든 정보를 독점하기 때문에 종종 기술을 빼돌리는 일이 벌어진다. 이런 상황에서는 보안을 아무리 강조해도 기술이 새나가는 것을 막을 수는 없다.
드물게 보안이 더 중요한 SW회사도 있기는 하지만 극소수에 불과하다. 보안에 대한 과도한 우려 때문에 공유를 너무 불편하게 하는 회사가 의외로 많다. 보안이 별 이슈도 아닌 회사도 공유에 거부감이 있는 직원의 주장에 넘어가서 공유를 포기한 회사도 많다. 훌륭한 오픈소스가 판치는 마당에 소프트웨어 회사에서는 숨길 것이 그렇게 많지 않다. 특수한 분야의 몇몇 회사를 제외하고는 모든 직원에게 모든 정보를 오픈해도 별 문제가 안된다. 보안을 과도하게 강조하여 공유에 제약을 가하기 시작하면 공유는 반쪽짜리가 되어서 효율은 엄청나게 떨어지게 된다.
공유문화라는 것이 단어는 다들 잘 알고 있으면서 잘 안되는 대표적인 개발문화이다. 경험해보지 않으면 무엇을, 어떻게, 얼마나 자세히, 누구에게 공유하는데 잘 감이 잡히지 않는다. 위 여섯가지 가이드도 실전 적용을 해보고 자세히 들어가보면 아리송한 부분들이 많을 것이다. 그래도 시작이 반이라고 일단 시작을 해보자. 너무 큰 욕심은 경계하자.
회사에서는 꾸준히 투자를 해야 하며 처음에는 제도적으로 시작을 했다가 점점 습관화를 해 나가야 한다. 오래 걸리는 일이니 너무 근시안적으로 보지 말고 꾸준히 노력해야 한다.
댓글 없음:
댓글 쓰기