개발자와 소프트웨어 생산의 3대 요소

경제학에서는 소위 생산의 3대 요소로 노동, 토지와 자본을 꼽는다. 어떠한 재화를 생산하는데 있어서 없어서는 안될 최소 단위라고 볼 수 있을 것이다. 소프트웨어 또한 재화의 일종으로 보기에 무리가 없고 3요소가 반드시 필요한 것이 사실이지만, 그 특성상 조금 다르게 바라볼 수 있을 것이다.

그러면 소프트웨어 생산의 3대 요소를 한번 생각해보자.

1. 개발자 - 자본

개발자에게 머그컵이 빠질 수 없지

당연히 개발자는 노동이라 생각했겠지만 그렇지 않다. 개발자는 일종의 자본에 해당한다.

경제학에서, 자본(資本, capital)은 매우 다양한 의미로 쓰이는 개념이다. 일반적으로는 축적된 부 즉 많은 양의 화폐나, 토지·공장과 같이 생산의 밑거름이 되는 생산 수단을 말한다.

위키피디아 자본

현대 소프트웨어 산업에서 가장 구하기 힘든 것이 개발자다. 아니 반대로 충분히 실력 있는 개발자 풀을 가지고 있으면 투자금은 생각보다 손쉽게 유치할 수 있다. 한편으로 개발자들은 단순히 돈에 의해서 움직이지도 않기 때문에 충분한 자금이 있다고 한들 좋은 개발자로 만들어진 팀을 구성하는 것은 보통 어려운 것이 아니다.

산업시대에 돈에 노동자가 몰려들었다면, 소프트웨어 개발을 위해선 개발자에게 돈이 몰린다. 좋은 스타트업 아니 모든 기업에서 충분한 개발자를 보유했는지가 가장 중요한 평가 지표 중 하나가 되고, 때문에 많은 기업들은 속된말로 기를 쓰고 좋은 사람을 확보하기 위해 금전적으로나 시간적으로나 상당히 많은 투자를 하고 있다.

2. 개발 문화 - 토지

불행하게도 아래보단 위처럼 생각하는 사람들이 대부분이다

물론 좋은 개발자를 확보했다고 해서 어느날 갑자기 훌륭한 소프트웨어가 하늘에서 떨어지지 않는다. 개발팀이 하나의 제품을 만들기 위해서는 좋은 토양이 필요하다. 이것이 바로 개발 문화이다.

개발 문화라고 하는 것은 한마디 말로 설명하기 어려운 것이다. 누구는 코드 리뷰 가 중요하고 누구는 테스트코드가 중요하다고 하며, 어떤 사람은 컴퓨터 과학 지식을 공유하는 것이, 누구는 또 오픈소스, 에자일을 말한다. 이 모든 개별적인 면면은 맞는 말이긴 하지만, 나는 개발 문화를 제품을 만들기 위한 지속가능한 과정 이라고 칭하고 싶다. 제품을 만들기 위한 지속가능한 과정 이 함의하는 바는, 기본적으로 한가지 전제를 가지고 성립된다.

"소프트웨어란 점진적으로 개발될 수 밖에 없다." 물리적으로 만들어지는 제품이라면 제품의 완성도는 얼마만큼 마무리를 잘했는가로 평가 기준이 만들어진다. 하지만 소프트웨어는 업데이트가 가능한 특성을 가지고 있다. 때문에 완성도가 높은 소프트웨어라는 것은 사용상의 문제점이나 개선점을 얼마나 빠르게 많이 업데이트 가능한가로 결정지어질 수 밖에 없다. 지금 좋은 제품이라도, 앞으로도 계속해서 개발하지 않으면 수개월내로 도태될 것은 이미 많은 제품이 증명한 사실이다.

결국 제품을 계속 잘 만들기 위해 필요한 많은 요소들을 하나의 문화로서 만들지 않으면 소프트웨어의 발전은 급속도로 더뎌진다. 단순히 어떤 한 사람이나 하나의 개념을 도입하는 것은 의미가 없고, 어떻게 개발자가 생산성을 가장 높일 수 있는 토양을 조성할 것이냐 하는 문제에 대해서 우리는 고민해야 할 것이다.

3. 기술 - 노동

기술이 모든 것을 해결해주진 않는다

생산의 3요소의 마지막인 노동은 기술이다. 양질의 기술은 개발 속도를 단축해준다. 기술을 적정한 문제를 해결하는데 사용하면 제품의 품질은 크게 향상될 수 있다. 기술은 지속적인 습득과 개선이 필요하고 때로는 과감하게 현재의 기술을 버려야할 순간이 오기도 한다. 회사에서 노동자를 고용할 때 인터뷰를 보는 것과 마찬가지로, 개발자의 가장 큰 책무가 적합한 기술을 선택하는 것이다. 좋은 기술이라고 해서 모든 부분에 들어맞는 것도 아니며, 기술적으로 뒤떨어졌다고 해서 제품의 품질이 떨어진다고 볼 수도 없다.

자본가의 가장 큰 임무가 좋은 사람을 고용하고 이들이 성장할 수 있게 돕는 것이듯, 개발자의 임무 또한 좋은 기술을 선택하고 이를 제대로 이용하고, 필요하다면 기술 자체의 개선에 기여하는 것이다. 노동자들이 때로는 실수를 하고 이를 통해 스스로 학습을 하는 것처럼, 기술 또한 오류나 버그가 있기도 하지만 이를 두려워 해서는 제대로 된 무엇인가를 만들수는 없다.

좋은 개발자란?

생산의 3요소 중 가장 핵심이 자본이듯, (토지와 기술은 자본이 있다면 비교적 구하기 쉽다) 결국은 개발자다. 좋은 개발 문화도 기술도 좋은 개발자 없이는 애당초 성립하기 어려운 개념이다. 여기에 큰 돈과 기회가 있으니 내 동료가 되라 와서 함께 일하자고 하면, 어설픈 사람들의 욕심만이 들끓을 뿐 제대로 된 개발자를 찾을 수 없다. 음... 자꾸 좋은 개발자를 말했는데 이쯤되면 어떤 사람들이 그런 사람들인지 집고 넘어가야 할 것 같다.

인정

나는 좋은 개발자를 "호기심이 많고, 합리적인 사고를 하며 끊임없이 배우는 사람" 이라고 생각한다. 적어도 내가 아는 사람들은 그랬다. 끊임없이 궁금하고 묻고 배우는 사람들은 지금 당장 아주 뛰어나진 않더라도 결과적으로 그쪽에 가까워졌다. 합리적이지 않은 개발자는 자칫 비효율의 함정에 빠질 수 있다. 합리적으로 판단하여 실현 가능한 해결책을 제시해야지, 상상력이 지나치면 독이 된다.

그렇다면 이제 이러한 특징을 가진 사람들을 끌어들이기 위해서 어떤 노력을 해야할지를 생각해보면 된다. 한편으로는 지금 있는 사람들이 어떻게 이러한 특성을 가지게 할 수 있도록 인센티브를 제시하는 방법도 있다. (뭘 해도 거의 변하지 않는다는 말이 있긴 하다)

여러가지 방법이 있겠으나 내 생각을 정리해보자면. 1) 자유롭게 일할 수 있는 문화를 만들고, 2) 배움의 기회를 제공한다. 3) 단순히 이걸 만들라 고 시키는 것이 아니라 어떠한 계량적인 혹은 추상적인 목표를 제공하여 끊임없이 호기심을 가질 수 있도록 환경을 조성한다. 충분한 급여는 개발자의 삶을 안정시킬 것이지만, 금전적인 인센티브는 꼭 필요하다고 생각진 않으나 사기를 진작시켜 줄 좋은 수단이 된다.

그 어떤 소프트웨어 프로젝트이건 코드 타이핑 자체가 병목인 경우는 존재하지 않는다.

산드로 만쿠소, 소프트웨어 장인 중에서

또한 업무 생산성을 유지하기 위한 규정을 만들어 맞추기보다는 성과를 제대로 평가할 수 있는 방법을 고민한다. 개발자의 생산성은 지식과 시행착오, 경험에서 나온다. 키보드 타이핑 자체가 병목이 되는 경우는 거의 없다. 3일동안 고민하던 문제가 단 3줄로 해결되기도 하고, 100줄을 쉬지 않고 써내려가는 경우도 흔하다. 아니 오히려 키보드 타이핑은 적게 할수록 좋다.

좋은 소프트웨어를 만드려면?

맛있는 요리를 만들기 위해서 무엇이 필요할까? 좋은 요리사 라는 것에 아마 대부분 동의할 것이다. 사람들이 좋아하는 요리를 많이 내놓는 식당을 만들기 위해서 누구의 소리에 가장 귀를 기울여야 할까? 역시 대답은 뻔할 것이다. 싱싱한 재료와 인기있는 레시피도 중요하겠지만, 실력있는 요리사는 어쨋든 답을 찾아낼 것이다. 늘 그랬듯이

우리는 답을 찾을 것이다. 늘 그랬듯이.

내게 누군가 CTO (VP of Engineering 에 가까울 수 있다) 라는 직업은 무엇이냐고 물으면 나는 이렇게 대답할 것이다. 1) 좋은 사람을 구하기 위해 노력하고 2) 그들이 재밌게 일할 수 있도록 놀이터를 만들고 3) 더 좋은 개발자가 되기 위해 기회를 제공하는 사람이라고. 개발을 실무에서 경험해보지 못한 사람들은 개발자를 별종 취급하는 경우가 종종 있다. 역사적으로 원래 그랬다. 호기심 많고, 합리적이며, 어려운걸 좋아하는 사람들은 이상하게 느껴지곤 했다.

에디슨은 병아리를 부화시키려는 등 기행을 일삼다(?) 초등학교 3학년때 퇴학을 당하기도 했고, 학과 공부에 관심없고 만들기를 좋아하고 자연 관찰에 열중하던 중학생 시절의 뉴턴은 주위에서 이상한 눈으로 쳐다봤을 것이다. 이런 사람들을 그저 하나의 틀에 맞추어 똑같은 사람으로 찍어내려 하지 말고, 최대한 자유롭게 가능성을 펼칠 수 있도록 기회를 제공하되 회사의 성공에 기여할 수 있도록 인센티브를 제공해주자.

개발자를 챙기라는 것은 개발자들을 위해서 그리 하라는 것이 아니다. 반도체 공장에서 불량률을 줄이기 위해 미세한 먼지가 들어가지 않는 환경을 조성하는 것처럼, 개발자들이 좋은 소프트웨어를 만들기 위해서는 필요한 전제조건이 있기 마련이다. 마지막으로 기사를 하나 인용하며 글을 맺는다.

기업들이 좋은 개발자를 바라듯이, 소프트웨어 장인도 일하기 좋은 기업을 원한다. 도움을 원하지 않는 상대에게 에너지와 건강을 쏟는 것은 아무런 의미가 없다. 고객을 위해 투입할 수 있는 노력에도 분명 한계가 있다. 같이 일할 고객 또는 고용주를 선별하는 능력도 소프트웨어 장인에게 꼭 필요하다. 소프트웨어 장인의 가치나 역량에 관심이 없는 고객을 위해 열심히 일해봤자 공허함만 커질 뿐이다.”

산드로 만쿠소, “소프트웨어 장인정신이란…”

읽어볼만한 이야기