2012년 2월 20일 월요일

소프트웨어 회사의 자산은?


소프트웨어 회사의 자산은 무엇일까?

흔히 개발자가 소프트웨어 회사의 재산이라고 한다. 이런 회사일 수록 회사가 가지고 있는 것은 정말 개발자밖에 없다. 또한 파악하기 어려운 한 무더기의 소스코드가 있다. 개발자들이 나가면 이 소스코드들의 가치는 현저하게 떨어진다.

소프트웨어 회사의 진짜 자산은 문서다. 

정확하게 말하면 문서화 된 지식과 자료들이다. 문서화 되지 않는 정보들은 휘발성으로서 개발자들이 나가면 같이 사라지는 정보들이면 회사의 자산도 아니다.

이런 휘발성 정보와 개발자에 의존하는 회사는 수명이 얼마 남지 않았다.

문서화 된 지식과 자료는 문서 파일 형태로 저장되어 있을 수도 있고 시스템에 남아 있을 수 있다.
버그관리시스템,  Wiki, KMS 등에 남아 있는 정보들을 말한다. 

이런 정보들은 개발 시스템 및 개발 프로세스와 맞물려 원활하게 작성되고 리뷰가 되며 기록이 남는다. 기록된 자료는 사라지지도 않고 누구나 쉽게 접근 할 수 있고 결정적으로 관련된 사람들이 퇴사를 해도 그대로 남아서 가치를 발휘한다.

따라서 이렇게 남는 자료와 문서들은 본인이 퇴사를 해도 가치가 있을 정도로 적혀야 한다. 

반대로 생각해서 제대로 적지 않고 내가 퇴사를 하면 파악하기 어렵게 만들어 놓는다면 자신의 가치가 올라갈 것으로 생각하기도 한다. 하지만 그 효과는 퇴사 후에 나타나지 않고 당장 나타나기 시작한다. 당장 협업이 쉽지 않으면 스스로도 다 기억할 수 없을 뿐만 아니라 본인에 대한 평판도 나빠진다. 물론 회사 전체가 그런 분위기라도 서로 똑같다면 회사가 심각한 상태라서 말할 필요도 없다.

그럼 개발자가 회사의 자산이 아니면 무엇일까?

개발자는 회사의 미래이다. 

과거를 이렇게 잘 만들어 놓은 개발자들에게는 회사의 미래를 맡겨도 된다. 과거의 경험과 지식을 바탕으로 미래에 더 가치 있고 훌륭한 일들을 해낼 개발자들이다. 

그렇지 않고 과거에 망쳐 놓은 개발자들은 과거의 발목에 잡혀서 앞으로 나아가지는 못하고 옛날에 싸 놓은 ?을 치우느라고 세월을 다 보낸다. 가끔 이런 개발자들이 다른 개발자들에게 자신이 싸 놓은 ?을 치우지 않고 자신은 또 새로운 프로젝트를 하곤 하는데, 나아지는 것은 없이 이렇게 계속 저질러 놓으면 점점 치워야 할 ?이 많아질 뿐이고 한계를 넘어가면 회사는 더 이상 못 버티게 된다.

경영자들은 개발자가 문서도 없이 뭔가 뚝딱 만들어 내는 것을 신기하게 생각하지 말고 그런 행동이 얼마나 회사를 망치고 있고 회사의 자산을 축내고 있다는 것을 깨달아야 한다.

개발자가 회사의 자산을 자신의 머리 속에 보관하고 있다가 본인도 기억 못하게 하지 말고 밖으로 꺼내서 모두의 자산이 되도록 해야 한다. 

2012년 2월 13일 월요일

관리자가 이런 일까지?

우리나라 SW 조직에서 관리자란 위치는 참 애매한 위치다.

물론 전문 관리자라면 얘기가 다르지만 왕년에 SW를 조금 개발해 본 경우가 애매하다.

개발팀에서 가장 경험이 많은 SW 개발자들이 주로 팀장이 되곤 한다. 이 경우와는 약간 다른 얘기다. 이런 개발 팀장은 SW 개발자에 더 가깝고 관리업무는 부수적인 일이다. 물론 개발도 한다.

하지만 개발에서 손을 완전히 땐 관리자의 경우는 점점 개발과 멀어지게 된다. 이렇게 1~2년만 지나도 섣불리 기술에 대해서 얘기하기가 어려워 진다.

이 외에도 개발 경험은 거의 없는 관리자도 있다. 반대로 이런 관리자도 SW 조직 관리를 2~3년 하게 되면 풍월을 읊게 된다. 개발에 대한 왠만한 용어도 알게 되고 어떻게 돌아가는지 대충 파악이 된다. 그렇다고 기술을 아는 것이 아니다.

그런데, 과거에 개발자였던, 개발을 모르는 관리자던 이들이 개발에 있어서 기술적인 결정들을 좌지우지 하는 경우가 있다. 

조직의 상하를 떠나서 기술적인 결정의 책임은 개발자들에게 있는 것이지 관리자에게 있는 것이 아니다. 좀더 중요한 기술적인 결정은 일개 개발자를 떠나서 기술위원회나 CTO가 결정하는 것이다.

하지만 우리나라에서는 상하관계가 엄격하여 기술적인 결정도 관리자들이 영향을 미치는 경우가 많다.
이를 상하 관계가 아닌 역할의 구분으로 생각하는 것이 좋다.
개발과 관리의 전문적인 역할 구분으로 생각하자.

현재 이러한 판단을 하기 애매한 위치에 있다면 기술이든 관리든 하나를 정하는 것이 좋다. 둘다 잘하기는 거의 불가능하다. 개발팀장으로서 관리도 약간 해야 한다면 작은 조직에서는 그야말로 약간만 하는 것은 괜찮다. 이것도 큰 조직에서는 쉽지 않다.

기술은 기술자의 몫이다.

2012년 2월 9일 목요일

과거의 성공이 발목을 잡을 때


수많은 소프트웨어 회사들이 첫번째 성공을 거두고 나서 두번째 도약에 실패하고 사라져간다.

물론  첫번째 성공도 어렵지만 이미 성공의 경험이 있고 방법을 알고 있는 회사들이 두번째 또는 세번째에는 많이 실패하는 이유가 무엇일까?

두번째에는 첫번째와 환경이 많이 바뀐 것이 한 원인이다. 그래서 첫번째에는 주먹구구와 열정만으로도 성공을 할 수 있었지만 두번째에는 안통하는 것이다. 그럼 무엇이 그렇게 바뀌었을까?

수재 vs. 일반인

대부분의 첫번째 성공을 거둔 회사는 아주 똑똑한 소수의 수재급의 개발자들이 주도를 해서 성공을 이루었다. 하지만 회사가 커진 상황에서는 대부부분의 개발자들은 평범한 개발자들로 구성이 되어 있고 과거처럼 척척 알아서 일이 진행되지 않는다. 

선두 주자 vs. 치열한 경쟁

과거에 제품을 처음 만들 때는 시장의 선두 주자이거나 경쟁사가 별로 없었지만 이제는 경쟁도 치열해지고 가격도 과거처럼 넉넉하게 받기도 어려워졌다.

작은 제품 vs. 거대한 제품


최초의 제품은 꼭 필요한 기능만 아주 잘 만든 제품이었다. 하지만 수년이 흐른 지금은 기능도 몇 배가 늘었고 Architecture도 엄청나게 복잡해졌다.  뭐 하나 기능을 추가하려고 해도 과거보다 몇 배 오래 걸린다.
완전히 새로 만들어야 한다는 요구가 빗발치지만 워낙 기능도 많고 다 파악이 안되서 다시 만들기도 어렵다.

작은 조직 vs. 커버린 조직

옛날에는 몇 명 안되는 회사에서 서로의 생각도 다 알 정도였는데 이제는 직원들이 하도 많아서 이름도 다 모른다. 누가 무슨 일을 하고 있는지 파악도 안된다.

체력 vs. 노쇄

몇 년 전만 해도 야근을 연속으로 해도 체력이 끄떡 없었는데 이제는 나이가 먹어서 야근을 하면 체력적으로 못 버틴다.

집중 vs. 분산

과거에는 회사에 개발 이외에는 이슈가 없어서 90% 개발만 했다. 하지만 이제는 유지보수 이슈도 많고 사이트 지원도 많아서 개발에 집중하기가 어렵다. 게다가 팀장까지 맡아서 조직관리를 해야 해서 개발에는 시간을 내기가 정말 어려워 졌다.

소수의 고객 vs. 많아진 고객

처음부터 고객별로 지원을 철저히 하다보니 고객이 몇 안될 때는 고객 만족도도 높고 개발 할만 했다. 하지만 고객수가 열배 이상 늘다보니 개발자가 아무리 늘어나도 고객 지원하는데 너무 많은 시간을 빼앗겨서 정작 제품 개발은 더 힘들어졌다.

열정 vs. 정치

과거에는 모든 개발자들이 열정 하나로 정말 열심히 했다. 그런데 지금은 실력도 없는 자들이 순전히 정치력으로 윗자리를 차지하고 앉아있다. 이럴 줄 알았으면 나도 개발보다 정치에 신경 쓸 것을 하며 후회한다.

결론

위에서 언급한 여러 원인으로 두번째 도약이 어렵거나 쇄퇴의 길을 걷고 있는 회사들은 빨리 첫번째 성공했던 기억은 버려야 한다. 더이상 통하지 않는 방법이다.

제대로 했다면 첫번째나 두번째는 성공의 원리는 같다. 하지만 첫번째에는 여러가지 조건으로 인해서 주먹구구 방식이라 하더라도 성공할 수 있었던 것이다.

하지만, 평범한 사람들을 데리고 엄청 많아진 고객과 커져 버린 제품을 제대로 개발하려면 다시 원칙으로 돌아와야 한다. 두번째 성공의 길은 원칙을 잘 지켜서 개발을 하는데 있다. 더이상 주먹구구는 통하지 않는 때가 된 것이다.