개발자들은 '일단 안돼'라고 말하고 본다는 전형성에 대한 생각

개발자들은 '일단 안돼'라고 말한다 보통 이런 얘기를 들을 일이 없는데 개발자가 아닌 분들과 얘기하면 이런 얘기를 듣는다. '무조건 안돼' 족이 있고 '무조건 돼' 족이 있다고... (둘 다 말이 안되는 건데 ^^) 실제 개발자들은 자신이 개발하고 있는 모듈의 변화를 좋아하지 않는다. 부담스러워 한다. 해야 할 일이 갑자기 생기는 것에 대해 부담스러워 하는 것도 있고 업무 자체가 좀더 깊은 집중을 요구하는 성향이 있어 일련의 인터럽트에 즉자적으로 반응하는 성향도 학습된다. 그럼에도 함께 제기된 문제에 대해 문제 해결을 위해 토론하고 분석하는 시간을 들이는 것은 마다하지 않는다. 두 가지 허들을 풀어야 한다. 하나는 갑자기 던지면 숙고를 거친 반응이 나올 수 없다는 것 또 하나는 중요한 자신의 업무인 이해 당사자이기 때문에 이해 관계를 내려놓고 판단하기 쉽지 않다는 것 첫번째는 좀더 시간을 주고 문제를 여러번 remind하여 enough thinking 후에 답을 구하는 게 방법이라고 볼 수 있는데 두번째는 좀더 까다롭다. (그런데 이 이해 관계란 이 개발자의 업무 로드가 증가하는 부분이므로 이 의사결정의 주제 관점에서만 보면 크게 중요하지 않은 요소일 수 있다.) 많은 한국의 소프트웨어 개발 회사는 개발 조직이 계층 구조를 이루고 있다. 가장 잘 아는 사람이 개발자인 매니저이고 심지어 핵심 모듈을 개발하기도 한다. 의사 결정에 주요한 권한을 행사하는 사람이 직접적인 이해당사자인 개발자인 경우가 많다는 것이다. 물론 훈련을 통해 개선된다. 업무 로드에 대한 관점, R&R에 대한 관점은 내려놓고 의사 결정 후에 별도 주제로 다루는 게 일반적으로 가능하다 그런데 한 가지 요소를 더 생각해보자면, 풀고자 하는 문제가 무엇인가에 따라 좀더 많은 전문 정보를 공유하고 의사결정의 원칙을 잘 찾는 것이 좋은 의사 결정의 핵심 요소일 텐데 과연 개발자가 문제를 해결하는 전문 정보를 충분히 갖고 있는가, 의사결정의 원칙을 학습을

일론 머스크의 First Principle Thinking (제1원리 기반 사고)

이미지
제1원리 기반 사고, First principle thinking. 첫번째 원리로부터 생각하기 혹은 제일원리 기반 사고 정도로 해석할 수 있겠다.  아리스토텔레스가 형이상학이란 책에서 언급한 것으로 더 이상 추론될 수 없는 원칙에서부터 추론되어야 한다는 원칙이다. 예를 들어 Unmoved mover 즉 우주에 최초의 움직임을 만든 무언가는 움직임이 없었어야 한다는 추론이 이러한 원칙 하에서 추론된 것이다. 수학에서 공리에서 출발하는 것과 같은 논리인데 일론 머스크가 SpaceX를 만들면서 제일원칙에 기반한 사고 실험을 사용하였다고 언급하면서 의사결정의 원칙 혹은 문제해결의 방법론으로서도 많이 언급된다. 일론 머스크의 First Principle Thinking 머스크 이야기는 이렇게 시작된다. 화성에 가야겠다고 목표를 세운 머스크가 첫번째 마주한 문제는 천문학적인 로켓 가격이었다. 머스크는 물리학에서 배운 제1법칙 기반의 사고를 이 문제 해결에 적용하기로 했다. “물리학은 유추가 아닌 제1원리로부터 추론하는 것을 가르쳐준다. 좋다, 제1원리들을 한번 들여다보자. 로켓은 무엇으로 만들지?  우주항공산업 등급의 알루미늄 합금들과 약간의 티타늄, 구리, 탄소 섬유이다. 다시 생각해봤다. 일반 상품 시장에서 이 물질들 가격은 얼마쯤 하나? 로켓에 사용되는 재료들 가격은 로켓 일반 가격의 약 2%에 불과했다.” 머스크는 원 재료를 사서 직접 로켓을 만들기로 했고 SpaceX를 세웠다. SpaceX는 1/10 가격으로 로켓을 만들면서도 수익을 내고 있다. 제1원리 기반의 사고를 머스크는 진실이라고 생각되는 좀더 근원적인 부분으로 내려가서 거기에서부터 다시 의사결정에 이르는 논리를 쌓아올리는 문제 해결 과정으로 적용한 것이다. 진리와 근원적 사고 사람은 수많은 참으로 믿은 불확실한 가설들이나 관성으로부터 판단하는 경향이 강하므로 중요한 의사결정을 좀더 근원적인 진위로부터 추론하는 것은 더 나은 해결 방법, 더 높은 진위 추정의 확률을 위해 매우 유용한 방법이라 할 수 있다

매니지먼트 코칭

신입 코칭을 굉장히 중요하게 생각하고 장시간 직접 챙기는 편이지만 생각해보면 매니지먼트에 대한 코칭이 훨씬 더 중요할 수 있다. 경험적으로 매니저들에 대해서는 코칭보다는 기대치만 부여해서 전체 조직이 비효율적이 되거나 중요한 문화적 자산을 단절시키거나 하는 경우가 많았다. 기술 조직에서 코칭은 기술에 대한 측면이 강하고 기술에 관한 협업적 의사결정의 사례 경험의 성격도 강하다. 곰곰 생각해보면 기술 축면의 코칭이란 전공 요소들을 반영하는 것이라 개인의 상당한 학습 노력과 결합하거나 기반 지식을 갖추고 있을 것을 요구한다. 매니지먼트에 대한 코칭은 그런 전제 조건이 약하기 때문에 훨씬 쉽고 효과도 클 가능성이 있다. 매니지먼트는 의사결정의 원칙에 대한 것이고 이 원칙이 무엇이어야 할지를 세워보도록 경험을 쌓는 게 코칭의 핵심일 수 있다. 의사결정이 계속 관행이나 주어와 목적 없는 프로세스에 의한 것이라면 누구도 새로운 상황에서 혹은 새로운 인적, 환경적 조건에서 의사결정 기준을 정리하고 이에 따라 판단하려고 하지 않을 것이다. 기준을 명시적으로 세워보지 않으면 친소 관계나 관행이 중요한 기준이 될수밖에 없다. 의사결정을 원칙을 세우고 판단하는 과정은 대부분 2,3회면 충분히 학습할 수 있다. 사람을 특별히 싫어해서 독단적 의사결정에 의존하는 경우나 의사결정 자체를 못하는 특수하게 적성에 맞지 않는 경우가 있긴 하지만 수년에 걸친 노력을 축적해야 하는 기술 관련 학습에 비해 정말 효율이 높다고 볼 수 있다. 물론 좋은 의사결정은 각 문맥별로 요구하는 사항이 다르고 그 적응력은 개인차가 있겠지만 많은 경우 충분히 가치있는 의사결정을 할수 있을 것이다.

네트웍, 불확실성, 가설과 검증, 비전

빅파일 전송 프로그램 빅파일 전송 프로그램을 급 제작해서 작년부터 고객사에서 쓰고 있는데 신규 고객사가 생기거나 고객사의 고객이 파일 전송하다 오류가 생기면 연락이 온다. ㅠㅠ (연락이 뜸해지면 고객사 사업이 잘안되나 걱정부터 듬 ㅠㅠ 모니터링하는 방법과 로그를 개선하였지만 업데이트를 꺼리는 고객이라 ㅋㅋ) 원인의 추정 클라이언트쪽 PC 방화벽부터 기업 방화벽, 그리고 서버쪽 타임아웃 설정 등 이슈가 엔드투엔드로 발생하는데 이게 100GB~1TB 가량 되는 파일 전송이다보니 별별 상황이 다 생긴다. “Network is unreliable”이기 때문에 혹시 모를 경우의 수를 생각해서 신중하긴 하지만 최근에는 금요일 밤 늦게 온 전화 때문에 화를 낸 적이 있다. 한참 오류 상황을 듣고 있었는데 파일 내용이 우리가 준 툴로 자동 생성한 파일이면 전송이 실패한다는 것 ㅠㅠ 100GB 파일 전송하면서 내용을 체크해서 뭘 할수도 없고 버퍼별로 암복호화 압축 체크섬 계산(이건 필요없다고 생각하지만 테스트 용도로 넣어둔 전체 파일 체크섬의 map-reduce 버전. 고객들은 매우 중요하게 생각 ㅠㅠ) 등을 하기 때문에 파일 내용이란 건 암호화하는 순간 아무 의미도 없는 얘기. 신뢰할 수 없는 상황에서 문제를 해결할 때에는 확실한 증거 기반으로 가설을 재수립해가야 하는데 지나치게 많은 중첩된 가설로 이상한 이야기를 주말 밤에 전화로 한 거. 프로젝트 오픈하느라 바쁠텐데 이런 걸 상의 없이 테스트 하느라 하루를 통째로 날린 게 답답하고 안쓰러운 게 컸다. 이 분에게 네트웍 환경 체크를 하랬더니 집에 가서 또 해보겠다고 셀룰러에 테더링으로 전송하고 또 자신의 주장이 맞다고 연락 ㅠㅠ 다행히 http tunneling 방식으로 구현해서 앞쪽 아파치 서버에 액세스 로그가 남아있어서 408 에러코드 확인하고 고객분이 테스트하신 환경인 코워킹스페이스 FAQ 사이트 가서 대역폭 제약 관련 조항을 캡쳐해서 보내줌. 셀룰러로 100GB 보내도 대역폭 제약이 안걸릴 거라는 생각을 하면 안된다

개발 조직을 관리할 때 목적 지표, parallelism과 aggregate intelligence

개발 조직을 관리하면서 가장 중시하는 목적 지표 중 하나는 parallelism 수준, 또하나는 더 나은 의사결정을 하는 aggregate intelligence 수준으로 생각하는 편이다. 1. parallelism 혹은 vectorization 병렬화 수준 혹은 동시성 수준은 각자 자신의 일을 진행하는 데 병목이 되는 기다림이나 동기화를 최소화하는 것이고, 그 이전에 자신의 일이 가지는 목표가 분명하고 또 스스로 업무를 잘 큐잉해서 언제든지 자신의 큐에서 넣고 뺄 수 있어야 한다. 물론 목표가 자신의 수준에서 조직의 수준에서 다를 수 있기 때문에 기다림을 최소화하면서 동기화하는 리뷰나 이슈 토론 같은 것들이 오히려 중요할 수 있다. 업무를 나눌 때에도 다른 사람이 의존하는 일들은 우선 순위를 좀더 높인다거나 협업에 대한 부분을 미리 스케줄링하는 것들이 중요하게 된다. 여러 사람의 업무와 관련한 의사결정이 필요한 시점에는 어쩔 수 없이 waiting이 있을 수 있다. 이를 최소화하고 잘못된 의사결정으로 인한 폐기 업무, 반복 업무를 최소화하는 것은 의사결정에 책임이 있는 사람들에게 매우 높은 우선 순위가 된다. 2. aggregate intelligence or collaborative decision making 여러 사람의 아이디어가 한 사람의 아이디어보다 더 나을 가능성이 크다는 것은 인간의 불완전함이나 생각의 바이어스 등을 고려할 때 단순한 산수 이상이라고 할 수 있다. 더 나은 의사 결정을 하는 것은 단순히 개인이 돌아가면서 의사결정을 하거나 한 사람의 의사결정을 투표하는 것이 될 수 없다. 여러 의견들 중 최선의 의견에 기반하면서도 공유 과정에서 더 나은 의사 결정으로 발전시키는 과정은 수많은 의사결정을 여러 조직 단위에서 이루어내는 문화 구축과 상관 있다. 기술적 의사 결정은 보다 더 깊은 기술적 이해와 여러 가지 가설에 대한 분석, 연구 등의 반복적인 과정을 필수적으로 요구한다. 물론 이 과정에서 여러 사람의 아이디어를 수집하고 이해하고 논의할

솔루션 기능 만들 때 우선순위 판단 기준

 제품 기능 만들 때 우선 순위 판단.  1. 꼭 필요한 기능, 이 중에도 복잡도가 높은 기능과 핵심 경쟁력이 될 차별성을 줄 수 있는 기능은 더 가중.  2. 당락을 결정하는 기능 항목은 명목만. 3. 그냥 필요할 것 같은 기능, 좋아보이는 기능은 끝까지 미루다가 실 요구사항이 생기면 … Straightforward 기능들은 언제든지 만들 수 있지만 복잡도가 높은 경우는 시행착오와 아이디어가 더 많이 필요하기 때문에 개발 시간의 변동성이 커서 좀더 일찍 파일럿 개발을 해가면서 검증이 필요합니다. 사실 복잡도가 있는 기능은 시간을 미리 계획해서 하는 건 무의미하기도 해서 조직적으로도 우선순위를 높이고 계속 아이디어를 공유해서 핵심 문제의 해결책을 검증하고 나야 유의미한 시간 계획을 세울 수 있죠. 복잡도 = 미검증된 주요 이슈가 있는 경우. 즉자적인 단순 아이디어로 개발할 경우 quality가 떨어져 솔루션으로서 가치를 이야기할 수 없는 경우라고 생각할 수 있습니다. 어떤 경우에도 솔루션 성격을 띄는 제품이나 서비스는 핵심 문제를 해결하려면 중요한 요소는 있게 마련이고 그중 아이디어가 필요한 복잡한 요소를 찾는 것은 가장 중요한 과정 중 하나라고 볼수 있어요. 문제를 인지하면 생각을 거듭하고 또 모을 수 있기 때문에 해가 되는 아이디어가 나오기 마련이니까요. 

O&KR 가설과 검증, 그리고 실제 적용

O&KR, 가설과 검증 구글이 전통적인 관리 기법은 모두 거부했지만 O&KR(목표와 핵심결과) 방식은 채택했다는 것은 잘 알려져 있는데 엄청난 인재들을 모아두고 불필요한 간섭을 하기보다는 스스로 목표를 설정하는 최소한의 관리 원칙만 두겠다는 것이었다고 생각한다. 목표 설정은 생각의 방향에 관한 것이니까 전반적으로 어떤 방향으로 갈 것인지가 어느 정도 연결되도록 하는 것이 핵심이고 그외에는 자율적으로 판단할 수 있게 했다고 생각할 수 있다. 목표 설정 외에 핵심 결과를 지표로 두는 것은 과학적 사고의 핵심과 연결된다고 생각하는데 구글에서는 핵심 결과 즉, Key Results를 평가 지표로 생각하지 않았고 스스로 목표를 구체화하는 검증 방법으로 바라보았다. 검증할 수 없는 추상적 목표를 검증 가능한 구체적 결과물로 리타겟팅하여 사고할 수 있게 해주는 것으로 가설과 검증에 관련된 과학적 사고 기법과 연결된 관리 방식인 셈이다. 물론 O&KR의 핵심 결과는 엄밀한 검증을 위한 것은 아니다. 목표를 직간접적으로 측정할 수 있는 방법을 설정하는 것이며 목표를 정량화한다기보다는 목표의 수준 혹은 개인적 방향을 간접적으로라도 계량할 수 있는 숫자이면 충분하다고 본다. 구글의 가이드라인을 보면 너무 쉬운 목표가 되거나 너무 어려운 목표가 되지 않도록 개인이 판단하기에 60~70% 달성을 목표로 할 수 있는 수치를 잡으라고 권고한다.  분기별로 알아서 업데이트하는 방식으로 최소한 분기별로는 한번 더 목표를 구체적으로 생각할 수 있게 해서 중점적으로 생각하는 방향을 스스로 관리하는 관리 방법이라고 할까. (O&KR을 평가 지표로 사용하는 경우도 있는데 그런 경우에는 좀더 KPI에 가까워지리라고 생각한다.) 우리는 과학이란 용어를 쉽게 사용하면서 검증을 게을리하는 것을 종종 본다.  과학이 절대적인 답을 주는 경우는 그렇게 많지 않다. (어쩌면 그것이 과학과 수학의 차이점일지 모르겠다.) 요즘은 데이터가 모든 것이라는 슬로건과 함께 데이터 중심이란 말