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명이 야근까지 해야 간신히 처리를 하고 있다고 한다. 

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

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

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

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

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

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

2012년 8월 13일 월요일

일을 잘하는 조직 vs. 못하는 조직


 일 잘하는 조직
 일을 잘 못하는 조직
겉에서 보기에 여유있게 일한다.
항상 부산하고 바쁘다. 
위임이 잘 되어 있어서 알아서 처리하는 업무가 많다.
사소한 이슈도 모두 보고하고 처리를 해야 한다.
효과적인 업무 프로세스가 있다.
프로세스가 없거나 비효율적이다. 
꼭 필요한 이슈만 모여서 회의를 한다.
모든 결정을 회의를 통해서 결정해야 한다.
회의 시간이 짧고 회의도 적다.
회의가 너무 많아서 일할 시간이 없다. 
회의 Agenda에 집중하여 효율적으로 결정한다.
회의 시간은 길지만 결론이 없다.
회의 후 항상 회의록을 기록하고 후속처리가 잘된다.
회의 후에도 후속처리에 대한 관리가 잘 안된다.
커뮤니케이션 시스템이 잘 구축되어 있다.
구두와 메일에 의존한 커뮤니케이션으로 관리가 안된다.
시스템을 통해서 누가 무슨 일을 하는지 다 알 수 있다. 
누가 무슨 일을 하는지 파악이 잘 안된다. 
필요한 정보에 신속하게 접근할 수 있다. 
어디에 무슨 정보가 있는지 파악이 잘 안된다. 
업무가 효율적으로 분배되어 있다. 
바쁜 사람만 바쁘고 노는 사람은 논다. 
꼭 필요한 문서를 효율적으로 만들어서 공유한다. 
문서가 없는 경우 많고, 있어도 잘 안본다. 
일 잘하는 조직의 특징을 요약하면, 합리적이고 명시적인 프로세스가 있고 적절한 시스템을 도입하고 있으며 회의를 효과적으로 진행하고 적절한 문서를 통해서 업무를 진행한다. 이렇듯 효과적으로 일하는 조직은 의욕만으로 되는 것은 아니고 회사에서 제공해야 할 것이 상당히 많다. 즉, 투자가 필요하다.

2012년 8월 9일 목요일

해외 진출하는 족족 실패하는 이유

대한민국 이름을 걸고 해외에서 크게 성공한 Software가 없는 것은 안타까운 일이 아닐 수 없다. 내가 아는 한 그런 Software가 없다. 그런 Software가 있다면 알려주기 바란다.
게임 등 일부 분야에서는 성공 사례가 있지만 일부 특수 분야의 일이다.

그렇게 실패하는 이유는 여러가지가 있겠지만 내가 보는 가장 큰 이유는 소프트웨어를 개발하는 기초 역량이 부족해서이다.

누구는 해외 문화를 이해하지 못했다고 하기도 하고, 영업을 잘 못했다고도 하지만 가장 큰 이유는 개발 역량의 차이이다.

국내에서 개발했던 주먹구구의 방식이 해외에서도 그대로 먹힐 것이라고 생각하는 것은 큰 착각이다.

국내에서 성공했던 대부분의 회사들의 성공요인은 국내에서만 먹히는 서비스 전략 때문이었다. 대충 만들어 놓고 고객이 불만을 표시하면 무한 감동 서비스를 제공하는 것이 그것이다. 많은 회사들이 이 전략을 사용해서 국내에서는 성공을 했다.

작은 땅덩어리에서는 고객이 부르면 언제든지 달려갈 수 있지만, 시장이 세계로 넓어지면 그런 고객 감동 서비스는 꿈도 꿀 수 없는 일이 된다. 고객이 부르면 비행기 타고 날아가고 호텔에서 숙박을 해야 하기 때문에 비용과 시간이 너무 많이 들어간다.

해외에서 성공하려면 진짜로 제대로 개발을 해야 한다. 고객이 해달라는대로 개발하는 것이 아니고 제대로 전략을 세워서 제품 기획을 하고 분석/설계를 해서 개발을 해야 한다. 또, i18n Technology(국제화 기술)도 제대로 적용해야 하는데 99%의 회사는 나름대로 방식으로 또 엉터리를 만들어서 적용하기 때문에 해외에서 대패를 하게 된다.

이런 것을 모두 갖추어야 비로소 비슷한 출발선상에서 경쟁을 시작하는 것인데, 국내에서 하던 방법대로 해외서 성공하려고 하는 것은 100m 달리기에서 20~30m 뒤에서 출발하는 것과 다를 바가 없다.

근본적인 역량을 되돌아볼 때이다.

2012년 8월 6일 월요일

소프트웨어 개발자의 나아갈 길

소프트웨어 개발자의 경력이 제대로 보장 받지 못하는 가장 큰 이유는 회사, 사회, 문화의 문제 때문이다. 그렇다고 개발자 된 입장에서 회사가 바뀌고 사회가 바뀌기만을 기다릴 수는 없다. 이는 마치 닭과 달걀의 관계처럼 누가 먼저인지 알기 어렵다. 어느 한쪽이 먼저 깨끗하게 해결되면 자연스럽게 전체가 해결되지만 그걸 기대하기는 현실적으로 어렵다. 경영자도 회사가 살아남고 경쟁력을 키우기 위해서는 바뀌어야 하지만 개발자도 뭔가 대책을 수립해야 한다.

주변에 좋은 롤모델이 없는 개발자들은 자신의 개발자로서의 경력을 보장 받고 더 뛰어난 개발자가 되기 위해서 어떻게 해야 하는지 알아내기가 정말 어렵다. 그냥 상황이 주어진 대로 열심히 할 뿐이다. 그러다 보면 정치적으로 밀리고 실력에서도 뒤쳐져서 최악의 상황이 되곤 한다. 단지 열심히 밤새워 일했을 뿐이데 결과는 그리 좋지 않고 미래는 더움 암울하다.

그렇다면 쉽지 않은 일이지만 개발자가 어떻게 해야 하는지 알아보자. 물론, 소프트웨어 개발자의 종류가 너무 많고 OS Kernel 개발자 등 특수분야의 개발자들은 특성이 매우 독특해서 여기에 해당이 되지 않을 수도 있지만, 대부분의 개발자에게는 해당하는 얘기일 것이다.

첫째, 관리와 개발 일을 분리하라.

관리자가 될 것이 아니라면 관리 일은 아무리 열심히 해도 개발자 경력에 별 도움이 안된다. 하지만 회사의 사정상 싫어도 관리 일을 떠맡을 수 밖에 없는 경우가 있다. 그런 경우에도 본인의 정체성을 명확히 해야 한다. 개발과 관리 일을 섞어서 하지 말고 구분해야 한다. 즉, 자신이 하고 있는 일 중에서 어떤 일이 관리고 어떤 일이 개발인지를 구분해야 한다. 물론 모호한 경우도 있다. 여기서 개발이 주업이고 관리는 부업임을 명확히 해야 하고, 언제든지 관리 일은 버릴 수 있도록 준비를 해야 한다.

경영자에게도 개발자가 관리일 때문에 부담이 되고 효과적이지 않다는 것을 알려라. 많은 경영자들이 그 사실을 잘 모르고 있기 때문에 자주 세뇌를 시켜야 한다. 그럼으로써 관리 일은 점점 최소화를 시켜나가야 한다.

보고서 작성, 경영회의 참석, 팀원 관리, 일정관리, 고객 접점 업무 등은 거의 관리 일이므로 최소화 노력을 해야 한다.

둘째, 경력과 수준에 맞는 일을 해라.

경력이 많아지면 그게 걸맞는 수준의 일들을 해야 한다. 경력이 늘어가도 똑같은 일을 그저 더 빠르고 능숙하게 하고 있다면 밥값을 못하고 있을 가능성이 높다. 그런 상태라면 개발자 경력을 오래 보장 받기는 어렵다. 결국 도태될 것이다.

경력이 늘어갈수록 누구나 할 수 있는 일들은 후배에게 물려 주어야 한다. 그리고는 설계, 분석 업무의 비중을 높이고 회사의 기술 전략에 신경을 써야 한다. 경력이 더욱 늘어갈수록 자신의 팀 뿐만 아니라 타팀, 더 나아가서 회사 전체의 프로젝트에 기여를 해야 한다.

그러기 위해서 문서화는 필수다. 개발 내용이 문서로 적혀 있어야 서로 리뷰가 가능하고 타팀의 프로젝트도 검토를 해서 나의 전문지식을 불어 넣을 수가 있다. 물론 내 프로젝트도 문서화를 해야 다른 사람들의 도움을 받을 수 있다. 문서화 되지 않은 내용은 뇌를 꺼내서 리뷰할 수는 없다. 아무리 빨리 개발한다고 해도 리뷰 없이 개발되는 프로젝트는 주먹구구로 개발이 되는 것이고 아주 작은 프로젝트이거나 아주 재수가 좋은 경우를 빼고는 폭탄을 안고 있는 것과 같다. 이런 주먹구구식 개발은 대부분 첫번째 프로젝트부터 더 오래 걸리고, 시간이 지날수록 점점 비효율적으로 된다.

그런 주먹구구 환경에서는 개발자가 경력에 맞는 수준의 일을 할 수 없다.

셋째, 권력욕을 버려라.

상황에 따라서 매우 어려울 수 있다. 특히 대기업인 경우 더욱 그렇다. 조직에서 권력을 얻어야 제대로 대우를 받을 수 있다면 이를 뿌리치기는 어렵다. 이런 경우는 차라리 개발자로서의 경력은 포기하는 것이 나은 판단일지도 모른다. 개발자로서 계속 나아가겠다고 결심을 했다면 어쨌든 권력욕은 버려야 한다. 권력을 얻기 위한 거의 모든 행동은 개발 일과는 거의 관계가 없다. 방해만 될 뿐이다.

개발자는 권력보다는 뛰어난 기술력에서 자연스럽게 나오는 파워를 가져야 한다. 물론 조직 문화가 이를 받아들이지 않는 경우도 많이 봐왔기 때문에 쉽지 않은 일임을 잘 알고 있다. 그렇다고 권력을 쫓아서는 개발자의 길과는 멀어질 것이다.

넷째, 끊임 없이 코딩하라.

개발자는 30년을 일해도 감독, 코치가 아니라 선수다. 코딩에서 손을 놓으면 급속도로 개발자의 길과 멀어진다. 주변을 보면 관리나 좀 하고 코딩은 전혀 안하면서 여기저기 감 놔라 대추 놔라 훈수를 두는 무늬만 개발자가 매우 많다. 이들은 개발자가 아니고 개발자였을 때 쌓아 놓은 지식의 약발도 별로 오래 가지 않는다.

물론 경력이 늘어 갈수록 코딩 시간은 줄어들 것이다. 하지만 여전히 코딩은 계속 해야 한다.

다섯째, 새로운 기술을 익혀라.

개발자라면 좋아하는 기술 몇 가지만 평생 써먹기 어렵다. 꾸준히 새로운 기술을 익혀야 한다. 시간이 흐를수록 점점 더 많은 새로운 기술들이 나오고 있다. 이를 따라잡기는 보통 어려운 일이 아니다. 그래서 개발자들이 다른데 신경 쓸 시간이 어디 있겠는가? 그렇다고 모든 새로운 기술을 익히는 것은 불가능하다.

어떤 기술은 용어 정도만 익히기 위해서 10분 정도 투자를 하고, 어떤 기술은 1시간 정도 투자를 해서 뭔지 돌려봐야 하는 것도 있다. 또 어떤 기술은 하루를 투자해서 샘플을 만들어 봐야 하는 기술도 있다. 이를 잘 구분해서 적절하게 시간 투자를 해야 한다. 모든 기술을 다 마스터 할 필요는 없다. 나중에 필요할 때 언제든지 생각이 나게 하면 된다. 필요할 때 필요한 만큼 더 익히면 된다.

오랫동안 써왔던 기술만 고집하면 한계에 다다른다.

여섯째, 소프트웨어 개발 전문가로 포지셔닝을 하라.

본인의 정체성을 명확히 하라. 경영자가 본인을 소프트웨어 전문가로 믿도록 하라. 경영자가 기술 전략을 같이 의논하게 하고 기술 관련된 정책을 제대로 수립할 수 있도록 보좌하라. 만능인 것처럼 행세하는 것은 효과적이지도 않고 신뢰도 떨어진다. 개발이 아닌 일은 다른 사람들이 더 잘할 수 있다. 고객도 잘 알고, 영업도 알고, 전략도 잘 안다고 아무리 아는척 해봤자 밑천이 금방 드러난다. 제일 잘하는 개발로 승부를 하라. 이는 회사 내에서 누구도 넘보지 못한다.

애매한 만능맨보다는 개발 전문가의 위치가 회사 내에서 더욱 확고할 것이다. 구조 조정 시에도 관리자나 애매한 위치의 사람들은 자를 수 있어도 개발 전문가로 잘 포지셔닝하면 쉽게 자를 수 없다. 물론 제대로 생각이 박힌 경영자가 있는 경우에 그렇다.

일곱째, 후배들의 롤모델이 되어라.

세상은 결국 돌고 도는 것이다. 본인에게는 롤모델이 없어서 고생을 많이 했을 것이다. 하지만 후배들에게는 롤모델이 되어서 후배들이 그 고생을 하지 않도록 하라. 더 많은 시행착오를 겪겠지만 이는 선구자이기 때문이다. 선임 개발자가 어떤 식으로 일하는지 보여주고 기술력에서 오는 파워를 보여줘라. 이는 본인을 위해서도 더 일하기 좋은 개발환경을 만드는데 도움이 되는 일이다.

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