2012년 9월 3일 월요일

Technical Career Path를 보장하는 방법

그 동안 개발자 경력에 대한 글들을 여러 건 작성했다. 많은 독자들이 문제 인식에 공감을 했지만 여전히 해결책은 쉽지 않다. 그래서 여기 방법을 제시하고자 한다. 소프트웨어 회사들이 어떻게 하면 Technical Career Path를 보장할 수 있을까?

첫째, 경영자 의식의 변화이다.

경영자가 개발자의 경력을 보장하는 것이 회사에 얼마나 큰 이득이 되는지 깨닫지 못한다면 개발자가 꾸준히 개발만 할 수 있도록 노력할 리가 없다.

축구는 체력이 떨어지는 30대 중후반이면 더 이상 선수로 뛰기 어렵지만, 소프트웨어 개발자는 체력과 상관없이 평생 시간이 흐를수록 점점 더 뛰어난 개발자로 일할 수 있다. 이렇게 뛰어난 선수로 일할 수 있는 개발자들을 관리나 하라고 낭비하지 않고 계속 선수로 뛸 수 있도록 회사에서 지원을 해야 한다는 것을 경영자들이 절실히 깨달아야 한다.

아직은 경영자들이 이같은 인식이 부족하거나 막연히 개념만 인지하고 현실은 다르게 행동을 하는데 주위에서 설득하려는 노력이 필요하다. 이 칼럼들을 공유해도 좋고 외국의 사례를 보여주는 한 방법일 것이다. 이는 회사를 위하고 개발자도 위하는 길이다.

둘째, 개발 조직의 변화이다.

개발 조직은 워낙 회사마다 서로 달라서 하나의 형태를 지켜야 한다고 말할 수는 없다. 하지만 개발 조직이 전문 개발자들이 제대로 일할 수 있는 구조가 되어야 한다. 우선 개발팀장, 개발리더, 매니저 등 구분 없이 마구 섞여서 일하는 것은 지양해야 한다.

조직이 아주 작아서 혼자 다해야 하는 경우를 제외하고는 관리자와 개발자는 구분을 하자. 팀이 커져서 관리 일이 점점 많아지면 더 이상 개발자가 개발을 겸해서 하기는 어렵다. 전문 관리자를 두는 것이 좋고, 프로젝트에서도 프로젝트매니저를 따로 두는 것이 좋다. 개발자는 개발에 전념할 때 가장 높은 성과를 낸다. 개발 외의 일은 관리자나 프로젝트매니저가 맡아야 한다.

셋째, 공정한 평가이다.

소프트웨어 개발자로 공정한 평가를 받기 매우 어렵다. 그래서 평가 대상보다는 평가자가 되려고 하는 경향이 있다. 공정한 평가가 대단히 어려운 일이지만 나름대로 객관적인 근거에 의한 평가를 위해서 노력해야 한다. 개발자가 어찌 해볼 수 없는 이유로 평가에서 불이익을 받는다면 개발을 계속 하기가 싫어질 것이다. 소스코드관리시스템과 이슈관리시스템의 기록을 활용하고 개발 일정 준수 등의 지표를 활용하는 것도 좋은 방법이다.

넷째, 적절한 대우이다.

많은 회사에서 팀장이 되고 관리자가 되어야 더 높은 연봉을 받을 수 있다. 그 주된 이유는 관리와 개발의 분리가 안되어 있어서 구분이 안되기 때문이다. 관리를 하지 않고 평생 개발을 한다고 해서 연봉이나 대우에서 불이익을 받아서는 안된다. 오히려 동일 경력에서 개발자가 관리자보다 더 높은 연봉을 받는 것이 맞을 수 있다. 관리자나 개발자나 자신의 전문분야에서 회사에 기여하는 만큼의 적절한 대우를 받아야 한다.

다섯째, Career Path 제공이다.

회사에서 다양한 Career Path를 제공해야 한다. 개발자는 이들 중에서 적절한 시점에 선택을 할 수 있어야 한다. 계속 개발자로 경력을 발전시켜 나갈 수도 있고 관리자나 프로젝트매니저가 될 수도 있다. 또는 다른 일을 맡을 수도 있다. 한번 개발자 경력에서 벗어나면 다시 돌아오기 어려우므로 신중하게 결정해야 한다.

여섯째, 개발문화, 개발 프로세스, 기반시스템이다.

너무 광범위한 내용이라서 다 설명하기는 어렵다. 개발자가 제대로 일하기 위해서는 공유를 기반으로 한 투명한 개발문화와 적절한 개발 프로세스가 필요하다. 또한 개발에 필요한 기반시스템을 제대로 갖추고 있어야 한다. 아무것도 갖추지 못한 회사에서는 개발자가 아무리 개발을 오래해도 가치를 높이기가 어렵다.

일곱째, 롤모델이 필요하다.

롤모델이 있다면 개발자들에게 확실한 길을 보여줄 수 있다. 하지만 무늬만 개발자가 아닌 진짜 개발자를 외부에서 영입하기는 쉽지 않다. 내부에서라도 개발자들의 롤모델을 만들도록 노력해 보자. 회사에서 가장 뛰어난 개발자들에게 관리 일은 덜어내고 개발에 전념할 수 있도록 해주고 회사의 제도가 이를 뒷받침하도록 하자. 회사의 개발 조직이 더욱 탄탄해 질 것이다.

개발자 경력 보장 문화는 개발자들의 인생이 달린 일이다. 아직은 척박하지만 우리가 하나씩 바꿔나가야 한다. 가장 어려운 일은 경영자를 설득하고 깨닫게 하는 일이다. 고양이 목에 방울달기 같은 일이지만 어렵다면 주변이나 전문가의 도움도 받아보자. 지금은 3D 취급하는 사람들도 있는 소프트웨어 개발이 좀더 좋은 대접을 받기 위해서는 개발자 경력 보장이 중요한 단초가 될 것이다.

이글은 Tech it에 기고한 글입니다.

2012년 8월 30일 목요일

요구사항이 계속 바뀌기 때문에 스펙을 적을 수 없다.

소프트웨어 개발 프로젝트에서 스펙을 제대로 적지 않는 회사들에게 그 이유를 들어보면 여러가지가 있다.

1. 프로젝트 기간이 너무 짧아서 스펙을 적을 시간이 없다.
2. 프로젝트가 너무 복잡해서 적어야 할 것이 너무 많아서 적을 수 없다.
3. 요구사항을 계속 바꿔서 스펙을 적을 수가 없다.

위의 어떠한 이유도 적절한 이유가 되지는 않는다. 오직 한가지 이유가 될 수 있다면 다음과 같은 것이 있을 수 있다.
"우리는 분석역량이 떨어져서 스펙을 적을려고 해도 제대로 적을 수 없다. 그래서 그냥 개발한다."

위 1,2,3번의 이유 때문에라도 스펙을 적어야 하는 것이다.
이중에서 3번 "요구사항이 계속 바뀌기 때문에 스펙을 적을 수 없다"에 대해서 얘기를 해보고자 한다.

99%의 소프트웨어 프로젝트는 분석 기간은 당연하고 설계, 구현 중에도 요구사항이 계속 바뀐다. 단지 프로젝트마다 바뀌는 정도의 차이가 있을 뿐이다.

스펙을 제대로 적었다는 전제하에 스펙을 결정한 후에도 요구사항이 계속 바뀌는 이유는 다음과 같은 것들이 있다.

1. 시장 상황의 변경
2. 경쟁 업체의 신제품 출시
3. 기술 환경의 변화
4. 미처 파악하지 못한 비즈니스 요구사항 발견
5. 예상치 못한 개발 상의 난관 봉착
6. 경영진의 변덕
7. 영업, 마케팅 부서의 끊임 없는 요구

이런 저런 이유로 요구사항 변경 요구는 계속 되기 마련이다. 스펙을 제대로 적어 놓지 않으면 이러현 변경 요구가 관리되지 않는다. 또한, 변경 프로세스를 적용하면 좀더 합리적인 변경 관리가 가능한다.

프로세스라고 하니까 뭔가 매우 부담스러워하고 특히, 영업과 마케팅 부서는 싫어하는 경향이 있다. 과거에는 코딩 중이라고 하더라도 친한 개발팀장에게 추가로 요구를 하면 잘 들어 줬는데 변경 프로세스를 밟으라고 하면 싫어하기 마련이다. 하지만 중요한 프로젝트의 일정과 품질에 영향을 줄 수 있는 결정에 큰 Risk를 안으면서 그냥 결정할 수는 없다.

변경 프로세스의 핵심은 "변경 영향 평가"이다. 이것도 그렇게 거창한 것은 아니다. 새로운 요구사항이 프로젝트에 어떠한 영향을 주는지 정량화하는 것이다. 일정이 더 필요할 수도 있고, 오히려 줄어들수도 있다.(드물지만) 또한 기술적인 위험이 증가할 수도 있다. 짧게는 10분, 길면 몇시간 걸리는 일이다. 스펙을 제대로 적어 놓지 않았다면 요구사항 변경으로 인해 아키텍처에 어떠한 영향을 주는지 파악하기 어렵고, 일정에 미치는 영향도 판단하기 어렵다. 그래서 스펙이 필요한 것이다.

변경 영향 평가가 되었다면 이러한 영향이 있는데도 불구하고 새로운 요구사항을 반영해야 하는지 투명하게 판단을 해야 한다. 어떤 요구사항은 정말 간단한 것 같은데 프로젝트에 큰 악영향을 주는 것도 있고, 커보이는 요구사항이 프로젝트에 문제 없이 포함될 수 있는 것도 있다. 즉, 요구사항 변경이 합리적으로 결정될 수 있다.

변경이 쉽지 않다는 것을 잘 알기에 스펙을 제대로 적고 철저히 리뷰하는 문화가 더욱 견고해지는 것이다.

이러한 프로젝스와 문화가 정착된다면 개발자들도 터무니없는 기능 추가 요청에 일정은 절대 안바꿔주는 비합리적인 요구는 줄어들게 된다. 스펙을 제대로 적고 변경을 관리하는 것이 회사에도 이익이지만 개발자에게는 더욱 좋은 문화임에도 많은 개발자들이 거부하는 경향이 있다. 이는 개발자들 탓이 아니다. 그동안 개발환경이 근거없는 일정 강요와 야간에 내몰리다보니 하루라도 빨리 코딩을 해야 한다는 생각에 내몰린 것이다.

또한, 무리한 요구사항 변경 요청에 "아키텍처를 너무 많이 바꿔야 한다". "몇달이 더 필요하다"라고 하면 개발자들은 항상 안된다고 주장한다고 치부를 해버리곤 한다. 그래서 무리한 변경 요구에 개발자들이 주로 약자가 되곤 한다.

스펙이 잘 작성된다면 일정, 리스크, 비용 등 모든 것에 근거가 생기고 합리적으로 결정할 가능성이 훨씬 높아지게 된다. 

스펙은 프로젝트가 끝날 때까지 계속 바뀌게 되어 있다. 그래서 스펙은 계속 업데이트가 되어야 한다. 하지만 합리적으로 변경 관리가 되어야 한다.

2012년 8월 27일 월요일

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

2012년 8월 23일 목요일

소프트웨어 회사에서의 관리란?



소프트웨어 회사가 경쟁력을 가지려면 전통적인 관리와는 좀 다른 관리 방법이 필요하다.

첫째, 상하관계 탈피이다.

전통적으로 관리자는 윗사람이고 팀원들은 관리자의 지시를 따르고 관리자가 거의 모든 것의 결정권을 가지고 있다. 하지만 소프트웨어 회사에서 관리자는 기술적인 결정을 할 수 없다. 개발자 출신이라고 기술적인 결정도 하려 하는 경우도 있지만, 기술적인 결정은 개발자의 몫이다. 그리고 전사적인 중요한 기술적인 결정은 CTO나 회사의 최고 개발자들이 하는 것이다.

관리자는 위에서 지시하는 사람이 아니고 개발자들이 개발에 매진할 수 있도록 회의, 보고서 작성, 보고, 의견 조정 등 힘든 일을 도와주는 역할을 해야 한다. 물론 경험이 많은 사람들이 잘할 수 있는 일이기 때문에 평균 개발자보다는 나이가 더 많을 수는 있다. 그렇다고 하더라도 상하 관계보다는 개발자를 지원하고 경영자를 보좌하는 역할로서의 관리자가 더 필요하다.

둘째, 투명한 관리이다.

소프트웨어는 인류가 만들어낸 가장 복잡한 지식산업이다. 너무 복잡하고 이슈가 많기 때문에 모든 이슈를 시스템에 저장해서 관리하고 모두 투명하게 오픈하지 않으면 감당하기 어렵다. 버그, 기능, 프로젝트 일정, 개발 현황 등 모든 것은 한눈에 볼 수 있도록 해야 한다. 내용을 채우는 것은 개발자 및 전직원이지만 관리자는 이런 모든 정보가 빠짐없이 시스템화 되어서 제대로 공유가 되는지 확인을 해야 한다. 

경영자도 이런 시스템을 통해서 개발현황을 훤히 볼 수 있어야 하고 관리자는 시스템을 이용하여 보고서를 작성하여 시간을 절약할 수 있다.

셋째, 자율이다.

소프트웨어 개발은 관리자가 하나하나 시켜서 진행하기에는 너무 복잡하다. 그렇게는 일이 진행되지 않는다. 큰 그림에서는 PM이나 관리자가 파악하고 도와주지만 자세한 일은 개발자 스스로가 해야 할 일을 정하고 일정을 조정하고 해나가야 한다. 이렇게 일을 진행하더라도 혼자서 알아서 진행하는 것이 아니고 모두 이슈관리시스템에 기록을 하고 진행해야 한다.

개발자들이 윗사람이 일을 시키기만 기다리고 있다면 개발 프로젝트는 효율적으로 진행되지 않는다. 이슈관리시스템은 이런 자율적인 개발진행에 큰 도움을 준다. 일단 이슈가 등록되면 전사 이슈가 되어서 수많은 사람들의 의견을 더해서 이슈의 우선순위가 정해지고 진행 상황을 훤히 파악할 수 있다.


물론 전통적인 관리자의 모습에서 하루아침에 바뀌기는 어렵다. 하지만 소프트웨어 개발문화와 충돌이 있는 부분은 엄연히 존재하며 조금씩 바꿔나가야 할 부분이 있다. 큰형님처럼 보살펴주고 모든 것을 무한 책임지며 진행하고 도전적인 일정을 달성하기 위해서 무조건 쪼는 모습에서 조금씩 바꿔보자.



2012년 8월 21일 화요일

유지보수의 거미줄에 걸린 고참들

고참은 유지보수를 하고 신참들이 신제품을 개발하는 모습을 어렵지 않게 볼 수 있다.

고참들이 경험도 많고 신제품을 만드는데 더 적임이지만 그럴 수 없는 이유가 있다.

기존 제품의 유지보수에서 도저히 빠져나갈 수 없는 것이 그 한 이유이다. 간단한 업그레이드가 아니고 완전히 새로운 제품을 만들려고 하는 이유도 기존 제품이 유지보수가 너무 복잡하고 기능을 추가하거나 수정하기에 아키텍처가 더이상 감당이 안되기 때문인 경우가 많기 때문이다.

현 제품의 유지보수는 당장 회사의 생존이 달린 문제이기 때문에 신제품이 개발되기 전까지는 고참들이 버텨줘야 한다. 문제는 자칫하면 신제품이 기존 제품보다 훨씬 못하는 경우가 종종 벌어지는 것이다.

이렇게 고참들이 유지보수에서 빠져 나오지 못하는 이유는 무엇인가?

첫째, 유지보수 문서의 부실이다.

고참들은 수시로 기존 제품의 유지보수에서 빠져나오기 위해 온갖 인수인계 노력을 한다. 하지만 쉽지 않고 성공적인 인수인계가 잘 이루어지지 않는다. 인수인계를 위해서 작심을 하고 유지보수에 관련된 모든 내용을 문서화하고 교육도 한다. 하지만 후배들은 그 문서를 보고 유지보수를 잘 해내지 못한다.

개발할 때 개발을 위해서 작성한 문서가 아니고 차후에 유지보수를 위해서 만드는 문서는 제대로 작성하기가 어렵다. 수많은 내용이 빠져도 알아챌 수가 없고 정성껏 작성하기도 어렵다. 문서는 개발 중에 그 때가 아니면 다시 작성하는 것은 거의 불가능하다. 그런데 이미 그 때를 놓쳤기 때문에 유지보수를 위한 제대로 된 문서를 다시 만들어 내기란 몇배 어려운 일이 되어 버렸다.

둘째, History의 부재이다.

또, 그동안 유지보수 History가 잘 기록되어 있으면 다행이지만 그렇지 않은 경우 유지보수 인수인계가 어려워진다. Mantis, Jira, Redmine 등의 이슈관리시스템에 유지보수를 포함한 모든 개발 History가 기록되어야 한다. 이슈관리시스템을 쓴다고 해도 100% 사용하지 않으면 안된다. 소스코드를 한줄이라도 고친 내용은 모두 이슈관리시스템에 기록이 남아 있어야 한다.

셋째, 복잡한 Architecture이다.

첫번째 버전에서 시장의 요구에 따라서 기능이 덕지덕지 붙다보면 어쩔 수 없이 컴포넌트의 구분도 없고 인터페이스가 보통 복잡해지는 것이 아니다. 오랫동안 유지보수를 해온 개발자가 아니면 이를 제대로 파악하기가 어렵다. 그러다보니  고참이 계속 유지보수를 하는 것이다.

이 또한 처음 개발 당시부터 미래의 비즈니스 전략을 고려하여 컴포넌트를 잘 나누어서 깨끗하게 개발을 해야 한다. 그렇지 않으면 아무리 유지보수를 위한 문서를 잘 작성하여도 어려운 상황이 된다.

이런 상황이 계속되다보면 기존에 열심히 일하던 고참들도 즐겁게 일하지 못하고 보람도 떨어지면서 이탈이 많이 일어난다. 

가끔은 이렇게 소수의 핵심인력에 회사가 전적으로 의지하는 시스템을 본인들이 원하기도 한다. 하지만 이런 현상은 나중에 본인들의 발목도 잡고 회사의 큰 리스크가 된다.

해결책은 원인의 반대이다.

개발 당시 스펙/설계 문서를 제대로 작성하고 컴포넌트를 잘 나눠서 개발을 하고 소스코드관리시스템과 이슈관리시스템을 사용해서 모든 기록을 남기고 투명하게 개발하면 되는 것이다. 그렇게 되면 유지보수 단계가 아니라 구현단계에서도 다른 사람들이 얼마든지 도와줄 수 있고 분석이나 설계만 하고 빠져나와 다른 프로젝트를 수행할 수도 있다.

내가 지금 퇴사를 하면 회사에 무슨 일이 벌어지는지 한번 생각해보자. 당장 지금 진행 중인 프로젝트나 유지보수가 문제 없이 진행이 되면 회사에 가장 필요한 인재이다. 그렇지 않고 당장 큰 문제가 되면 당장은 꼭 필요하지만 동시에 회사의 리스크이므로 고민스럽지 않을 수 없다.

2012년 8월 20일 월요일

내인생 최고의 멘토를 만나다.

소프트웨어를 개발하면서 또, 컨설팅을 하면서 하고 싶었던 얘기를 해보자고 블로그를 시작한지가 벌써 4년이 되었다. 3천명이 넘는 구독자와 많은 분들이 글을 읽어 주셨다. 최근에는 Tech it에 칼럼을 기고하기 시작해서 좀더 많은 분들이 글을 읽게 되었다. 

내 글을 읽는 분들의 반응은 무척 다양하다. 꾸준히 읽고 호응하는 댓글을 계속 남기시는 분들 중에는 기억에 남는 분도 많다. 댓글은 없어도 꾸준히 읽고 계신 분들도 있고 물론 호응하지 않는 분들도 있을 것이다. 가끔은 반대의견을 제시하는 분들도 있다. 그런 모든 분들이 소중하지만 가끔은 제 글에 대해 "컨설턴트의 말빨이다.", "현실을 모른다", "실제 개발 경험은 있는 것일까?"라는 종류의 의구심을 가진 분들이 있다. 내 글들이 워낙 직설적이라서 가끔은 오해와 충돌을 불러 일으킨다. 물론 어느 누구도 모든 사람을 이해시킬 수는 없지만 오늘은 나에 대해서 조금 설명해보고자 한다. 나에 대한 이해가 내 글을 약간이나마 더 이해하는데 도움이 되길 바란다.

나는 여러분들과 같은 대한민국 개발자이다. 블로그에서 하지 말라고 하는 거의 모든 것을 다 해봤고 문제점도 직접 다 겪어본 개발자다. 대한민국 보통의 개발자와 크게 다르지 않았다. 

18년 전 첫직장은 운좋게 그당시 우리나라 최고의 Software회사였던 한글과컴퓨터였다. 우리나라에서 둘째가라면 서러워할 최고의 개발자들과 같이 일했고, 나또한 코딩을 정말 잘했다. 그때 Daily build라는 것도 배우고 소스코드관리 등 소프트웨어 회사가 기본적으로 갖춰야 할 것을 잘 배웠다. 이런 좋은 환경에서 최고의 개발자들과 같이 일할 수 있었던 것은 내게 큰 행운이었다.

그리고 스타트업컴퍼니에서 일해도 보고 직접 회사도 해보면서 내 블로그에서 문제점이라고 지적하고 있는 것의 대부분은 해본 것 같다. 그래서 많은 개발자들이 왜 그런 문제점에 빠져드는지 정말 잘 알고 있다. 그당시도 나름대로 기반시스템이나 스펙, 설계 등에 노력을 했지만 항상 풀리지 않은 수수께끼와 같았다. 인터넷을 뒤지고 책을 봐도 해결되지 않았다.

그러다가 안철수연구소에 입사하고 그당시 CTO로 계시던 김익환 부사장님을 만나면서 나의 개발자로서의 인생이 바뀌었다고 볼 수 있다. 김익환 부사장님은 미국 스탠포드에서 소프트웨어를 공부하고 20년간 GE, 선마이크로시스템즈 등에서 소프트웨어를 개발하셨다. 그래서 오랫동안 해결되지 않았던 수수께끼들이 해결되기 시작했다. 안철수연구소의 동료 개발자들과 같이 실리콘밸리의 개발문화도 배우고, 스펙/설계 작성하는 방법도 배우고 개발 프로세스도 제대로 배워 나갔다. 

지금 생각해보면 내가 그때 안철수연구소를 가지 않았더라면 대부분의 개발자들과 같이 지금도 수많은 문제를 안고 비효율적으로 힘들게 개발을 하고 있을 것이다. 지금도 김익환 사장님(현재)과 10년째 같이 일하면서 계속 배우고 어제와 또 다른 내가 되어가고 있다.

나는 현재 컨설턴트이지만 지금도 개발을 계속 하고 있는 실전 소프트웨어 개발자이다. 내 글들의 대부분은 나의 개발과 컨설팅 경험에서 나오는 것이고 또 상당분분은 김익환사장님의 말씀에서 영감을 얻어서 작성한다. 그냥 말만 앞세운 공허한 소리는 아니다.

블로그의 글들이 한번 생각해보는 계기를 만들 수는 있다. 하지만 글만 보고 배울 수는 없다. 문제를 인식할 수는 있지만 방법을 알수는 없다는 얘기이다. 내가 최고의 멘토를 만났듯이 여러분들도 좋은 멘토를 만나기를 바란다. 결코 혼자서는 제대로 배울 수가 없다. 물론 내가 여러분들의 멘토가 될 수 있다면 정말 기쁜일일 것이다. 그것이 블로그의 가장 중요한 목적이다. 주변에 멘토가 없다면 찾아 나서야 한다.

블로그에 댓글로 독자들과 약간의 소통을 하지만 나에게 직접 메일을 보내도 언제든지 환영한다. 블로그 글을 읽는 것만으로 해결되지 않는 궁금증은 블로그 상단에 메일보내기 버튼을 눌러서 내게 메일을 보내면 된다. ^^

2012년 8월 15일 수요일

7명이 할 수 있는 일을 70명이 하고 있는 이유

최근에 한 글로벌 소프트웨어 회사(Y사, 가칭)의 한국 지사 관계자에게 들은 이야기이다.
비단 Y사 얘기만은 아니다. 세계적인 소프트웨어 회사의 한국지사에서 종종 벌이지는 일이다.

Y사의 본사에서는 처음에 한국지사를 만들었을 때 한국에서도 미국의 개발 프로세스를 따를 것을 종용했다고 한다. 하지만 한국에서 채용된 개발자들은 미국의 개발 프로세스는 너무 무겁다고 한국 방식으로 개발했다고 주장을 했다. 그리고는 미국의 개발 주문에 대해서 믿을 수 없는 속도로 해결을 해나가기 시작했고, 미국 본사는 이런 경이로운 결과를 보고는 한국식 개발을 묵인할 수 밖에 없었다.

그뒤 몇 년이 지난 지금은 어떻게 되었을까? 미국 본사의 개발 프로세스를 착실히 따른 호주 지사와 엄청난 차이를 보이고 있다고 한다. 똑같은 일을 호주 지사에서는 7명이 처리를 하고 있고 한국 지사에서는 70명이 야근까지 해야 간신히 처리를 하고 있다고 한다. 

그렇게 된 이유가 분석/설계도 없이 빨리빨리 개발을 하다보니 아키텍처가 엉망이고 개발자들이 많이 바뀌었는데 내용을 아는 사람도 별로 없다고 한다. 뭐 하나 고치려고 해도 보통 어려운 것이 아니라고 한다.

전해 들은 얘기라서 과장이 있다고 해도 문제가 심각하고 이미 많이 망쳐 놓은 것은 사실이다.

글로벌 소프트웨어 회사라고 하더라도 한국에 와서 착각하는 것들이 있다. 놀라운 속도를 보여주는 한국식 개발방식을 신기해 하지만 그 문제점을 피부로 심각하게 알지 못한다.  스펙도 제대로 작성하지 않고 분석/설계/구현을 섞어서 빠르게 개발하는 것이 신기해 하지만 얼마나 큰 문제가 있는지 실리콘밸리 회사들도 잘 모른다. 그런 식으로 개발해 본적이 없기 때문이다.

그렇다고 글로벌 소프트웨어 회사가 본사의 개발 프로세스를 강제화 한다고 잘 적용되는 것은 아니다. 한국에서 잔뼈가 굵은 개발자들은 몸에 밴 개발 방식 때문에 적응하기가 매우 어렵다. 차라리 신입사원들을 뽑아서 교육시키면서 개발을 하는 것이 더 빠를지도 모른다.

이는 한국의 소프트웨어 회사 내부에서도 그대로 적용된다. 글로벌 소프트웨어 회사의 개발 프로세스가 아무리 좋다고 하더라도 한국의 소프트웨어 회사에는 바로 적용이 안된다. 대부분은 무리한 시도이고 실패한다.

변화를 감당할 수 있을만큼씩 조금씩 바꿔나가야 한다.