본문 바로가기

소프트웨어개발자의 삶/실전기록

작은 소프트웨어 회사의 생존 방법(?)

지난 2년 4개월을 뒤돌아보며...

 약간은 심심했던 프리랜서 생활을 청산하고 다시 마지막이라 생각하고 열정을 불태웠던 회사생활이 마지막아니라 거처가는 기록으로 남겨지게 되었다.  2년 4개월간 정말 앞만 보고 열심히 달렸던 것 같다. 짧은 시간에 정말 많은 것들을 했다. 

 처음 회사를 왔을 때 느낀 점은 7년전 보다 괜찮아 진 것이 없구나 였다.(7년전에 1년 2개월 근무를 하다 아이가 다쳐서 낙향했었다. 당시에는 그냥 팀장 밑에 있는 내가 맡은 부분만 신경쓰면 되는 과장이였다.) 30명 전후의 개발자가 운영되는 회사인데 대부분의 개발자들이 마지못해 다닌다는 느낌이였다. 매일 야근에 야근을 하며 일을 처리하고 있었고 직원들이 회사에 대해서 이야기할 때 좋은 이야기보다 불만의 이야기를 더 많이 하며 지내고 있었다.

 왜 이런 현상이 일어날까? 하는 생각을 하며 여기서 쫑을 내기로 했으니 개발문화가 숨쉬는 회사를 만드는 것이 내 목표였기 때문에 나에게는 해결해야 되는 과제였다. 무엇이 이유인지 곰곰히 현상을 파악했다. 20년 가까이 개발자로 살아서 그런지 개발자들의 생각을 읽는 것은 그렇게 어렵지는 않았다. 내가 훌륭한 개발자였으면 못 읽을 수 있었지만 나도 중구난방으로 이런 류의 비슷한 환경에서 개발을 하며 성장했기 때문에 더 쉽게 파악할 수 있었던 것 같다.

 물론 모든 개발자나 개발회사가 대기업이 되면 좋겠지만 현실에서는 그렇지 못하다. 가장 좋은 방법은 내 스스로 잘나서 탑티어급의 회사에 들어가면 좋겠지만 현실에서는 그렇지 않는 경우도 많다. 나처럼 지방에서 뒤늦게 올라와서 개발을 하는 경우 특히 더 그런 흐름을 모르는 경우가 많다. 그렇다고 튀는 것만이 해법이 아닐 것이다. 최소한 내가 몸담고 있는 곳과 함께 성장할 수 있다면 그 것보다 더 큰 성취감이 어디을까? 물론 코딩을 통한 성취감도 있지만 내가 있는 곳이 나와 함께 나의 노력으로 같이 성장해 간다면 그 보다 더 큰 성취감을 이룰 수 있을 것이다.

 지난 2년간 경험을 토대로 이런 것들을 하지 않으면 작은 소프트웨어 회사도 잘 되지 않을까? 하는 것들을 나열 해본다. 

 1. 최소한의 자질을 갖춘 개발자를 채용을 하자. 

 소프트웨어 개발에서 가장 중요한 자산은 사람이다. 지식산업을 기반으로 영위하는 현시대 대부분의 회사가 사람이 가장 중요하다고 말 할 수 있다. 하지만 소프트웨어 회사만큼은 그 어떤 회사들 보다 사람이 가장 중요한 직군이다. 비지니스의 최종 결과물의 시작과 끝이 모두 사람에서 나오기 때문이다. 

 한 명의 개발자를 잘 못 채용할 수 있다. 그러면 한 명의 잘 못된 개발자 채용에서 끝나는게 아니다. 소프트웨어 개발에는 많은 사람이 협업을 한다. 그 협업의 최소 단위는 팀이 된다. 보통의 팀의 크기는 4명 전후를 추산한다. 4명 전후의 팀의 크기에서 한 명의 잘 못된 인원이 들어온다면 팀웍은 깨지는 것이다. 즉 한명의 잘 못 된 개발자 채용이 이루어지면 나머지 팀원들이 일을 하는데 문제가 발생한다는 것이다.

 때문에 최소한의 자질을 갖춘 개발자를 채용해야 된다. 엄청난 급여를 지급할 수 있다면 최고의 능력자를 뽑는데 집중할 수 있지만 작은 규모의 회사는 그럴 수가 없다. 그렇기 때문에 최대한 좋은 사람을 찾으려고 하기 보다 최소한의 조건도 넘지 못하는 사람부터 걸러내야 한다. 하지만 작은 회사의 문제는 그 최소한도 걸러낼 능력이 없다는 것이다. 소프트웨어 개발자를 뽑는데 인성만 판단하여 뽑는다거나 오로지 개발능력치만 보고 뽑는다거나 편향된 방법으로 사람을 채용한다. 그리고 그 사람이 잘 해주기를 바란다. 그리고 그렇지 못하면 실망한다.

 최소한의 실력에서 검증을 할 수 있도록 노력을 해야된다. 소프트웨어개발은 엄연히 능력치가 보여지는 쟁이의 영역이다. 그렇기 때문에 기본적인 실력이 갖추어져 있어야 한다. 기본적인 실력이라는게 상대적일 수 있지만 최소한의 업무를 수행하는데 혹은 지도를 하면 따라올 수 있는 정도가 기준이 될 것이다. 나머지 인성이나 가치관 등의 부분 또한 회사가 정한 최소한을 정립하여 커트라인이 넘는 사람을 뽑아야 한다. 

 최소한의 커트라인이 넘지 않는다면 뽑지 말아야 한다. 내가 채용하는 사람이 잘 해줬으면 하는 희망회로를 돌리기보다. 최소한 이정도라면 내가 비지니스를 수행하는데 문제가 없어 라는 선을 지켜야 한다. 그렇지 않으면 무분별하게 채용한 사람들로 부터 비지니스가 망하게 된다.

2. 신입개발자에게 절대 벼량 끝 전술을 쓰면 안 된다.

 사람을 뽑았으면 그 사람이 알아서 활동해줘야 된다고 생각하면 오산이다. 특히 신입사원의 경우 그냥 프로젝트를 던진다던지 업무처리를 던져서는 안된다. 특히 요즘 같은 경우는 개발자 커뮤니티도 발달해 있기 때문에 피해야 할 회사에 대한 이야기가 꾀나 많이 나온다. 개인적으로 신입에게 최악은 '사수없는 개발포지션'이라고 생각한다. 

 스르로 알아서 할 사람이라면 그건 신입이 아니다. 노련한 경력개발자들이 할 수 있는 영역의 것이다. 신입 개발자에게 어떤 과업을 그냥 맡길 경우 대다수가 책임감 때문에 해결을 위해서 밤잠을 설치고 걱정을 하며 나날을 보낸다. 보통 이런식의 방식을 나는 개인적으로 '벼랑 끝에서 발로차기' 전술이라고 하는데 이 방식의 확실한 효과는 알아서 할 사람과 알아서 못할 사람을 빠른 시간안에 구분해낼 수 있다. 

 하지만 벼랑 끝에서 발로 차여서 떨어질 위기에서 간신히 올라온 사람은 벼랑에 올라온 뒤 날 발로 찬 사람에게 보복을 하게 되어있다. 죽을 위기에서 올라와서 내가 이런 고통을 감수하며 극복할 수 있는 사람이라는 것을 알 수있게 해주어서 감사합니다. 하고 인사를 할 사람은 아무도 없을 것이다. 대부분의 사람은 힘겹게 올라와서 발로 찬 사람에게 복수를 시전할 수 밖에 없다.

 신입 개발자는 기본적인 자질을 갖춘 사람이지 전문가가 아니다. 신입이 시니어 처럼 해주길 바라거나 그렇게 해준다면 신입의 급여를 주고 쓰고 있다면 그것은 노동력의 착취이다. 매우 불성실한 생각이 비지니스 전반에 깔려 있다고 봐도 무방하다 생각한다. 수입이 이렇기 때문에 어쩔 수 없다. 라고 생각한다며, 그런 인건비 따먹기가 핵심 비지니스라면 비지니스 영속성에 대한 심각한 고려를 해야 된다. 신입을 굴리는 획기적인 방안이 없다면 그 비지니스는 항상 쪼들리는 상황을 맞이할 수 밖에 없다.

 만약 신입개발자가 벼량끝 전술을 썼는데도 불구하고 꾸준히 일을 하고 있다면 경계해야 한다. 보통 두가지로 귀결되는데 능력이 뛰어나서 해결을 해내며 있었는 경우와 그냥 버티기를 한 경우이다. 전자의 경우는 보통 '일단 여기서 2~3년버티고 나갈 준비를 하자'라는 생각을 할 가능성이 높다.

 소프트웨어 개발자는 경력을 필요로 하기 때문에 적정 수준의 경력기간을 채우는 것이 매우 중요하기 때문에 잠시 버티는 것이다. 하지만 이런 개발자는 일단 스스로 극복할 수 있는 역량을 갖춘 개발자 이기 때문에 기본적인 능력에서 매우 준수함을 가지고 있다. 잘 잡는다면 회사에 엄청 도움이 될 것이지만 2~3년간 지켜보면서 스스로 결론을 냈을 가증성이 높기 때문에 잘 잡히지 않을 것이다.

 후자의 경우는 그냥 버틴 것이다. 세월이 흐르다 보니 경험적으로 아는 것도 생겼고 이렇게 저렇게 버티긴 했지만 딱히 직장을 옮길 용기와 능력도 없다는 것을 느끼고 있는 것이다. 이 경우는 매우 독선적이거나 방어적으로 바뀌는 모습으로 변질된다. 자신의 능력이 경력에 준하지는 않지만 여기서 버텼기 때문에 어떻게 버티면 되는지를 안다. 그래서 다른 개발자나 고객과의 관계에서 매우 방어적인 자세를 띄게 된다. 즉, 일을 가급적이면 안하려고 하거나 불평 불만이 터지는 케이스이다. 

 대부분의 작은 회사는 전자의 개발자는 놓치고 후자의 개발자와 얼굴을 붉히며 비지니스를 영위하며 산다. 이는 최악이다.벼량끝 전술의 결과는 결국 이런 양산으로 가기 때문에 절대 신입개발자에게 벼량끝 전술을 쓰면 안된다. 

3. 개발자와 함께 성장할 공동의 목표를 가지자.

 소프트웨어 개발자가 항상 연봉 수직상승에만 목숨을 거는 것이 아니다. 개발자는 경력이 중요하기 때문에 자신의 경력에 중요한 것을 수행하기 위해서는 꼭 높은 연봉이어야 하지만은 않는다. 어떤 도전적인 과제를 통해서 자신의 성장을 가늠하는 것을 매우 중요하게 생각하는 경향이 강하기 때문에 자신들이 성장할 수 있는 발판을 마련해주어야 한다. 더불어 그렇게 성장하는 직원과 함께 회사가 성장을 하고 그 성장의 과실을 모두 나누어야 한다. 

 소프트웨어 개발자들은 다른 직군에 비해서 굉장이 두뇌회전이 빠르게 돌아가는 직군이다. 최근에는 소프트웨어개발직군을 전문직으로 보고 있는 것만 봐도 뭔가 비상해보이지 않는가? 대다수의 소프트웨어 개발자는 하루종일 자신의 머리를 굴리며 일을 하기 때문에 어떤 현상이나 상황을 스스로 판단하고 고민하는데 있어서 매우 적극적인 자세를 보는 경향이 있다. 그렇기 때문에 그들 위에서 군림하거나 그들을 이용한다는 생각이 들면 빠르게 의욕을 잃어버린다. 특히 10년 이하 개발자는 수요가 넘쳐나고 빠르게 이직이 가능하기 때문에 각별히 신경써야 한다. 

 개발자도 성장하고 회사도 함께 성장하는 모델을 만들어서 지속적인 성장의 틀을 만들고 그 과실을 함께 나눌 수 있도록 해야 한다. 

4. 개발자에게 책임과 권한을 모두  부여하자.

 소프트웨어 개발산업은 인류가 이룩한 다른 산업보다 그 성장기간이 짧은 산업이고 그 변화도 매우 빠르게 진행되는 산업이다. 그리고 다른 직군보다 이직이 매우 잣은 직군이다. 그런데 이런 직군의 개발자를 관리만 해야 되는 대상으로 삼거나 목표달성의 수단으로만 삼아서는 좋은 결실을 볼 수 없다. 

 특히 권한이 없이 책임만 부여한다면 아무것도 책임지려 하지 않을 것이다. 개발자는 엔지니어분야이기 때문에 관리자 자신이 엔지니어로서 정점을 달리는 사람이 아니라면 엔지니어링과정에 발생하는 많은 일들에 대해서 다른 정보를 얻을 수있는 수단이 없다. 간단히 말해서 개발자에게 기술관련 이슈가 터졌을 때, 개발을 모르는 관리자는 말싸움으로 개발자를 이길 재간이 없는 상황을 맞이하게 된다.

 내가 다 대처할 수 없다면 차라리 권한과 책임을 모두 주고 결과만 받아들이는게 좋은 방법일 수 있다. 외부인의 시각으로 보기에는 개발자는 얌체처럼 보이는 경우가 많겠지만 개발자들은 생각보다 순수한 편이다. 자신에게 책임과 권한이 모두 부여되었는데 권한만 취하고 책임을 지지 않는 경우는 많이 없다. 만약 그런 개발자가 나온다면 헤어질 생각을 해야된다. 그리고 기본기를 하는 사람을 뽑았다면 그런 상황을 쉽게 만나게 힘들 것이다.

 비지니스활동에 문제가 발생하지 않을 영역이 허용하는 그 최고의 수준으로 자유로운 권한을 주고 최고의 수준으로 높은 책임 요구하면 매우 책임감 있는 자세의 개발자 모습을 보게 될 것이다. 하지만 그렇게 하지 않고 내가 저들을 관리하고 군림해보겠다고 생각하며 줄퇴사를 만나게 될 것이다.

 개발자에게 최악'사수없는 개발포지션'이라면 작은 회사에게 최악'숙련자의 퇴사'이다. 가끔 보면 개발을 안해 본 관리자들이 같은 역량의 사람을 대체해서 일을 하면된다고 손쉽게 생각하는 경향이 있는데 규모가 크고 자원의 투입이 매우 높은 곳이라면 맞는 말일 수도 있다. 하지만 작은 규모는 그 과정도 많은 시행착오의 비용을 쏟게 된다. 단순히 하던 일을 맡는 것을 떠나서 다시 채용과정을 거치고 합을 맞춰가는 과정이 모두 비용이기 때문에 나와 합이 맞는 좋은 개발자를 놓치지 않는데 모든 역량을 집중해도 절대 낭비가 아니다.

5. 소프트웨어 개발자를 이해하자.(소프트웨개발을 이해하자)

 소프트웨어개발자들 이해 하도록 노력해보자. 어쨌든 소프트웨어 개발을 기본으로 하는 비지니스를 위해서는 개발자를 이해하지 않고 좋은 결실을 얻을 수 없다. 소프트웨어 개발자들이 어떻게 교육을 받는지 어떤 생각을 하는지 알려고 노력할 필요가 있다. 소프트웨어 비지니스를 하기 때문에 당연히 소프트웨어의 근간을 이해할 필요가 있다고 생각할 것이다. 그렇다면 그 소프트웨어를 개발의 주체인 개발자를 이해해 보는 것이다. 이건 올바른 비유는 아니라고 생각하지만 어떤 물건의 생산을 잘하기 위해서 생산시설의 사용법을 잘 알고 이용하여 생산을 할 것이다. 소프트웨어 개발자를 그 생산장비라고 생각해보자. 

 얼마나 소프트웨어개발자의 사용법을 알기 위해서 노력을 했는지 한번 생각해볼 필요가 있다. 왜냐하면 소프트웨어는 그들이 만들어내는 결과물이 때문에 그들을 이해해야 한다. 왜 저러냐?! 타박만 할 것이 아니라. 왜 개발자는 지금 내가 생각하는 것과 다른 메커니즘으로 생각을 하는지 알려고 노력해볼 필요가 있다. 그들도 사람이다. 특별히 별다르게 살으라는 교육을 받은 것이 아니다. 다만 그들의 언어로 이야기를 하고 있을 가능성이 높다. (물론 그렇지 않는 개발자들도 있다. 그런 개발자를 만났다면 절대 놓치지 말아야 한다) 그렇다면 외국어를 잠시 배운다 생각하고 한번 그 내면을 들여보려고 조금이라도 노력해볼 필요가 있다고 본다. 많은 시간을 들일 필요도 없다. 

 어떻게 그들을 알 수 있을까? 답은 매우 간단하다. 그들 개인을 이해하려고 노력하는 것도 좋겠지만 불가능하다면 우선 소프트웨어 개발이 어떻게 이루어지는지 개발자의 코딩 저 끝까지는 아니더라도 최소한의 과정 및 코드가 작성되는 껍데기라도 알려고 노력해보자 그럼 쉽게 그들을 이해할 수 있을 것이다. (주의해야 된다. 가끔 이렇게 섯부르게 아는 지식으로 안다고 선무당이 사람잡는 경우가 매우 많이 발생한다. 이는 개발자를 놓치는데 앞장서는 방법이다.)

선택과 집중! (가장 중요한 것)

 개발자가 하나의 기능직으로 이해받던 시절이 지나서 하나의 전문직으로 인정을 받고 있는 시대에 살고 있다. 예전에는 기능의 작동여부가 중요헀지만 이제는 기능의 작동여부는 당연하고 성능에 미적 아름다움까지 필요하고 백그라운드의 확장성에 대한 고민이 당연시 되는 소프트웨어 개발 패러다임의 시대를 지나고 있다.

 이 복잡한 소프트웨어 개발의 패러다임 시대에 작은회사가 할 수 있는 소프트웨어 개발의 종류는 몇가지 일까? 많지 않을 것이다. 개발자라는 정해진 자원으로 할 수 있는 일은 한정되어있다. 슈퍼 개발자가 있어도 동시에 수십가지 일을 할 수는 없다. 모름지기 일이란 정성을 쏟아야 가치가 있어지고 정성스러워진다. 간혹 영업출신들이 수많은 시도를 한답시고 수많은 프로젝트를 동시에 진행하며 낚시터에 낚시꾼 처럼 수많이 던저놓은 낚시대처럼 프로젝트를 펼쳐 놓으려는 사람들이 있다.

 분명한 것은 한 사람이 할 수 있는 일의 양에는 절대적인 한계치가 존재한다. 여럿이 모여도 그 한계치는 높아지긴 하지만 분명 존재한다. 그럼 여러 프로젝트를 동시에 진행한다는 것은 그 한정된 자원을 조각을 낸다는 것이다. 조각을 내면 거기 들어가는 자원은 당연히 줄어들게 된다. 다시 말하지만 일이란 모름지기 정성을 쏟아야 정성스럽게 된다. 그렇게 조각낸 일이 정성스럽게 되어서 고객이 돈을 내고 지불할 마음에 드는 서비스로 성장할 수 있을까?  심각하게 고민해봐야 한다. 특히 소프트웨어 개발은 개발자의 노동 100을 반으로 나누면 50, 50으로 나눠지지 않는다. 개발자는 사람이기 때문에 문맥전환 비용이 발생한다. 그래서 100을 반으로 나누면 40, 40으로 나눠지게 된다. 사실 40, 40도 보장할 수 없이 높은 가능성을 준 수치이다. 그런데 그것을 여러개로 쪼개버리면 극단적으로 아무것도 제대로 된 것이 없는 껍데기 프로젝트만 수십개 만들어 놓은 꼴이 된다.

 작은 회사가 수많은 시도를 하는 방법의 원칙은 한 번에 하나씩이다. 하나의 프로젝트나 목표에 몰입하여 최선을 다하고 그 최선의 결과가 좋지 않으면 받아들이고 다음의 목표로 좌표를 옮기는 방식이다. 이렇게 하면 앞서 동시에 여러개를 하는 것 보다 하나의 장점이 있다. 하나를 집중력 있게 하다보면 그 과정에서 부산물이 발생하게 된다. 그 과정에서 발생하는 경험이 다시 새로운 비지니스의 기회를 창출 해줄 가능성이 생길 수도 있다. 그리고 하나의 프로젝트를 집중있게 하면 코어개발의 경험과 산출물이 쌓이 게 된다. 이는 다음 프로젝트에서 기반이 되는 가능성이 매우 높다. 즉, 생산성의 향상 혹은 기능이나 다른 경로로 다음 프로젝트에 도움이 되는 부분이 발생한다는 것이다. 하지만 동시에 여러개를 진행하면 정신없이 지나가게 바빠서 그 경험이 어떤 가치를 주는지 알 겨를도 없이 최종적으로 그냥 지쳐있는 상태가 된다.

 작은 회사가 큰 회사처럼 여러가지 일을 동시에 진행하고 그 과정에서 행운을 잡기는 바라는 것은 아무런 기회를 잡기 않기 위하는 노력이나 다름이 없다. 큰 회사들도 관계없는 사업을 정리하고 선택과 집중이라는 이야기를 자주한다. 작은 회사는 더더욱 선택과 집중을 해야 한다.

소회

여기까지 내가 일하며 느낀 작은 경험이다. 더 좋은 경험을 이야기 하려면 사실 이 모든 것을 극복하고 바꿔 놓았을 때 할 말이 있을 것이다. 하지만 나는 성공하지 못 하여였다. 나의 노력 부족일 수도 있고 다른 이유가 있을 수도 있다. 하지만 이런 실패가 나에게는 또 다른 값진 경험이 될 것이다.

이제는 세상의 모든 것이 소프트웨어가 없이는 성립이 되지 않는 상황에 놓여있다. 내가 우스게 소리로 다른 개발자들한테 자신감을 갖자며 하면 이야기가 "세상은 우리가 굴린다" 라는 말이 현실이 되어가고 있다. 아주 작은 창업을 위해서도 소프트웨어의 연계를 염두하며 창업을 하는 세상이다. 소프트웨어로 비지니스를 유지하는 곳에서 개발자가 아닌 다른 직군들은 얼마나 소프트웨어를 이해하려고 노력했을까? 공부하는게 늘상이 되어야 되는 이 직군의 핵심역활인 소프트웨어 엔지니어도 그렇게 많은 학습을 하지 않는다. 그런데 그 주변인들은 얼마나 학습을 했을까? 우리가 눈여겨 봐야 되는 부분이 이라 생각한다.

 사장이 개발을 하면 회사가 망한다고 누군가 이야기 하였다. 하지만 보라. 전세계를 호령하는 테크 기업들의 사장이 자신의 비지니스를 시작할 때 역활이 무엇이었는가? 소프트웨어 엔지니어가 아니였지만 성공한 스티브잡스는 코딩은 모든 사람이 공부해야된다고까지 이야기를 했다. 얼마나 소프트웨어를 이해하고 자신의 비지니스를 하는지 우리는 생각해봐야 한다. 이는 기업을 이끄는 CEO 뿐만 아니라 관자라면 모두 생각해야 된다. 기술을 기반으로 생업을 유지하면서 기술의 진보와 발전에는 애써 눈을 감고 그 안의 사람들의 행동패턴에 눈감고 달려들지는 않는가? 고민해볼 문제라 생각한다.