함께 자라기

0. 머리말

기회가 수백, 수천 번 더 있다면, 이번에 잘하냐 못하냐 하는 것은 그렇게 중요하지 않습니다. 더 중요한 것은 지금 자라고 있느냐는 것입니다. 세상에는 한 번보다 수백, 수천 번의 누적 위에서 미래가 서서히 정해지는 경우가 더 많습니다.

우리는 내가 정말 잘할 수 있을까?내가 정말 자랄 수 있을까?우리가 정말 함께 자랄 수 있을까?우리가 정말 매일매일 함께 자랄 수 있을까? 흐름으로 생각의 방향이 나아가야 합니다.

1. 자라기

A. 자기계발은 복리로 돌아온다.

자기계발은 현재 나에게 무엇을 투자했느냐가 1년, 혹은 2년 후의 나를 결정한다고 느끼기 때문에 중요하다고 생각한다.

자기가 습득한 지식이나 능력은 복리로 이자가 붙기 때문에 나중에 엄청난 차이를 만들 것입니다.

복리를 만들기 위해서는 곱하기를 꾸준하게 해야 합니다.

따라서 더 빨리 자라고 싶다면 1. 어떻게 이율을 높일 것인가 2. 지속적으로 현명한 투자를 하려면 어떻게 할 것인가를 고민해야 합니다.****

a. 복리의 비밀

Douglas Engelbart의 작업 구분에 대한 이야기에서 작업을 A, B, C로 구분합니다.

  • A 작업: 원래 그 조직이 하기로 되어 있는 일을 하는 것. (자동차 공장에서는 자동차를 만드는 것)
  • B 작업: A 작업을 개선하는 것 (자동차를 만드는 사이클에서 시간과 품질을 개선하는 것, 시스템을 설계하는 것)
  • C 작업: B 작업을 개선하는 것 (개선 사이클 자체의 시간과 품질을 개선하는 것. 개선하는 인프라를 설계하는 것)

C 작업을 잘 하기 위해서는 내가 만든 결과물을 나의 일부로 만들어서 다음 단계에 보탬이 되도록 이용해야 합니다.

지수적 팀은 자기 자신을 곱해나가는 팀입니다. 팀은 일을 상호 협력적으로 진행합니다. 거기에서 시너지 효과라는 게 나옵니다. 부분의 합보다 전체가 더 크다는 말입니다.

가용시간을 늘리고, 쓸데없이 낭비되는 시간을 줄이고, 잠자는 시간을 줄이는 것이 더하기적 사고라면, 집단의 지능을 높이는 것은 곱하기적 사고입니다. 집단의 지능을 높이면 모든 지적 활동의 효율이 좋아지기 때문에 전반적인 개선(B 작업)이 일어나고, 특히나 개선 작업을 더 잘하게(C 작업)됩니다.

나의 A 작업을 개선하려면 1. 어떻게 하면 더하기보다 곱하기를 할 수 있을 것인가? 2. 어떻게 해야 곱하는 비율을 높일 수 있는가? 또는 이자 적용 주기를 짧게 할 수 있는가?를 질문해봐야 합니다.

  • 자신이 이미 갖고 있는 것들을 잘 활용하라.
    • 책을 많이 읽기보다 그 지식을 얼마나 어떻게 활용하는지 반성하라.
    • 이미 습득한 지식, 기술, 경험 등을 서로 연결지어서 시너지 효과가 나게 하고 서로 다른 영역을 넘나드는 것을 수월해지도록 하라.
    • 새로운 것이 들어오면 이미 갖고 있는 것들과 충돌을 시도하라.
    • 현재 내가 하는 일이 차후에 밑거름이 될 수 있도록 하라.
  • 외부 물질을 체화하라.
    • 주기적인 외부 자극(컨퍼런스 등)을 받고 자기화하라.
  • 자신을 개선하는 프로세스에 대해 생각해보라.
    • 나의 A 작업을 회고/반성 활동을 주기적으로 하는 프로세스를 만들어라.
    • 나의 개선하는 과정(B 작업)을 어떻게 하면 개선할 수 있을지 고민하라.
  • 피드백을 자주 받아라.
    • 사이클 타임을 줄여라. (1년 동안 완벽하게 만들기보다 1주일 동안 완성을 1년 동안 반복하자.)
    • 일찍, 그리고 자주 실패하라. 실패에서 학습하라.
  • 자신의 능력을 높여주는 도구와 환경을 점진적으로 만들어라.
    • 완벽한 도구와 환경을 갖추는 데에 집착해서는 안 된다.

B. 달인이 되는 비결

꾸준한 반복으로 달인이 되려면.

  1. 실력을 개선하려는 동기가 있어야 한다.
  2. 구체적인 피드백을 적절한 시기에 받아야 한다.

특정 영역에서 개인이 성취할 수 있는 최고 수준의 퍼포먼스는 경험을 오래한다고 해서 자동으로 얻을 수 있는 것은 아닙니다.

C. 수십 년 동안 전문가가 안 되는 비결

a. 전문성 형성에서 타당성과 피드백의 중요성

직관이 형성되려면 특정 조건이 필요합니다. 특정 조건으로 타당성(validity)과 피드백입니다.

타당성 조건이 필요하다는 의미는 직관이 적용되는 영역에 어느 정도 인과관계와 규칙성이 존재해야 한다는 겁니다. 예측가능성이라고 말할 수도 있습니다.

피드백 조건이 필요하다는 의미는 자신이 내린 직관적 판단에 대해 빨리 피드백을 받고 이를 통해 학습할 기회가 주어지는 환경이 갖춰져야 한다는 걸 말합니다.

b. 타당성과 피드백을 높이기

타당성을 높이려면 변수를 제한하고 실험을 하면서 규칙성과 인과관계를 찾으려는 노력을 하면 됩니다. 피드백을 높이려면 동료나 상사, 고객에게서, 혹은 내가 개발하는 프로그램에서 직접 피드백을 적극적으로 구하면 됩니다.

D. 당신이 제자리걸음인 이유

실력을 높이기 위해서는 의도적 수련(Deliberate Pratice)이 중요합니다. 앞에서 의도적 수련을 효과적으로 하기 위해서는 동기피드백이 필요하다고 언급했습니다.

a. 의도적 수련의 필수조건, 적절한 난이도

의도적 수련이 되려면 나의 실력과 작업의 난이도가 비슷해야 합니다. 미하이 칙센트미하이의 몰입이론과도 일치하는 부분입니다.

b. 실력이 늘지 않는 이유

의도적 수련의 필수 요건 중 하나가 '적절한 난이도'입니다.

자신이 업무 시간 중에 불안함이나 지루함을 느끼는 때가 대부분이라면, 실력이 도무지 늘지 않는 환경에 있는 겁니다.

뛰어난 선수는 자기 기량보다 어려운 기술을 연마하지만 그렇지 못한 선수는 이미 잘하는 걸 더 연습합니다.

c. 제자리걸음에서 벗어나기

본인의 하루가 불안하거나 지루한 때가 대부분이라면 이 전략들을 사용해야 합니다.

d. 지루함을 느끼는 경우: a1 실력 낮추기

작업의 난이도는 그대로 두고 실력을 낮추는 전략

e.g. 마우스 없이 키보드로만 개발, 디버거를 안쓰기, 컴파일을 주기를 늘리기

e. 지루함을 느끼는 경우: a2 난이도 높이기

실력을 그대로 두고 난이도를 높이는 전략

e.g. 하루 만에 개발하면 되는 것을 한 시간 만에 할 수 있는 방법 찾기, 익숙한 작업을 새로운 언어로 하기, 리팩터링을 하기, 자동화 테스트 달기

남들보다 일을 좀 더 효율적/효과적으로 하기 위해 내가 직접 만들어 쓰는 나만의 도구, 방법을 만드는게 매우 중요합니다. 이를 위해서는 자주 일어나는 반복 패턴(DRY)을 파악하고 분석해야 하며, 부족한 시간에도 짬을 내어 도구를 고안하고 작성해야 합니다.

f. 불안함을 느끼는 경우: b2 실력 높이기

실력을 높여서 몰입 영역으로 들어가는 전략

장기적인 접근은 책을 보거나 스터디에 참가하거나 교육을 듣거나 등.

사회적 접근은 나보다 뛰어난 전문가의 도움을 얻는 것입니다. 잘하는 사람한테 가서 짝 프로그래밍을 해달라고 부탁하거나 튜토리얼 문서를 따라가는 것도 좋습니다.

도구적 접근은 다른 도구의 도움을 받는 것입니다.

내관적 접근은 비슷한 일을 했던 경험을 머릿속에서 되살려 보는 것입니다. 그때 그 일을 어떻게 했는지 떠올려 보면서 비유적으로 문제를 해결합니다.

g. 불안함을 느끼는 경우: b2 난이도 낮추기

난이도를 낮춰서 몰입 영역으로 들어가는 전략

가장 간단하면서 핵심적인 결과물을 목표로 삼는 것이다. (What's The Simplest Thing That Could Possibly Work?)

h. 동적인 균형

유의해야할 점은 자신의 실력이나 작업의 난이도가 계속 변한다는 것입니다.

이 말은 곧, 지속적으로 자신의 감정 상태를 살피면서 조금 지루한지 불안한지를 알아채고 만약 지루함이나 불안함을 느낀다면 앞의 네 가지 전략을 적절히 사용해야 한다는 겁니다. 이렇게 감정 상태를 살피고 조치를 취하는 사이클을 계속 돌아야 합니다.

그런 면에서 자기가 지금 어떤 상태인지 살피는 알아차림(mindfulness)이 꼭 필요합니다.

i. 팀장이 할 수 있는 일

팀원들의 현재 어떤 상태를 경험하는지 파악하고 적절한 전략을 구사하게 도와줄 수 있습니다.

E. 실수는 예방하는 것이 아니라 관리하는 것이다

a. 두 가지의 실수 문화

실수 예방은 행동에서 실수로 가는 경로를 차단하려고 합니다. 실수를 저지르지 말라고 요구합니다. 근데, 사실 이는 불가능합니다.

전문가들은 실수를 조기에 발견하고 빠른 조치를 취합니다. 이를 실수 관리라고 합니다.

실수 예방 문화에서는 실수를 한 사람을 비난하고, 처벌하고, 따라서 실수를 감추고 그에 대해 논의하기 꺼리며 문제가 생겼을 때 협력도 덜하게 됩니다. 실수에서 배우지 못하게 됩니다.

실수 관리 문화에서는 실수가 나쁜 결과를 내기 전에 빨리 회복하도록 돕고, 실수를 공개하고, 실수에 대해 서로 이야기하고 거기에서 배우는 분위기가 생깁니다.

회사 문화가 실수 예방보다 관리에 가까울수록 기업의 혁신 정도가 더 높습니다. 실수가 없으면 학습하지 못합니다. 실수 관리를 하는 문화일수록 학습을 더 잘합니다.

2. 함께

사람들은 협력이 중요하다고 합니다. 그래서 프로젝트를 할 때 협력적으로 하자고 합니다. 그러나 실제 모습을 들여다보면 초반에 일을 세밀하게 나누고 선을 긋습니다. 각자 진행하고 나중에 만나서 서로 합쳐봅니다. 그 속을 들여다보면 협력은 거의 없습니다.****

A. 협력을 통한 추상화

a. 커뮤니케이션과 협력

실력이 뛰어난 프로그래머는 보통 정도의 실력을 가진 프로그래머에 비해 커뮤니케이션, 협력 능력이 더 뛰어납니다.

실력이 뛰어난 프로그래머는 커뮤니케이션과 협력에 더 오랜 시간을 들입니다. 반면 설계나 코딩, 테스팅에 들이는 시간에는 통계적으로 큰 차이가 없었습니다. #

b. 톱니바퀴 실험

둘이서 협력하면서 작업하면 서로 시각이 다르기 때문에 두 사람의 다른 시각을 연결해 줄 다리가 필요하고, 그 다리에는 필연적으로 추상화의 요소가 있게 됩니다. 서로 다른 것들을 하나로 묶어야 하기 때문입니다. 반면 혼자서 작업할 경우에는 이런 추상화의 필요가 덜합니다.

c. 추상화의 중요성

이 "흥미로운 무엇"은 강력합니다. 내가 전에 모르던 것을 배우게 됩니다. 그리고 종종 이것은 프로그래머의 울타리를 넘어서 영향력을 끼치기도 합니다.

여기에서 말하는 "흥미로운 무엇"이 바로 추상화입니다. 특히 우리가 예상하지도 못하던 추상화로, 말하자면 창발적 추상화라고 할 수 있겠습니다.

복잡한 현상에 대한 이해를 발전시켜 나갈 때, 인간 지성에서 가장 강력한 도구는 추상화다. 실세계의 특정한 대상체, 상황, 과정 간의 유사성을 인식하는 데에서, 그리고 이러한 유사성에 집중하고, 차이점은 일시적으로 무시하는 결정에서 추상화가 생겨난다. -토니 호어

추상화를 높일 수 있는 방법은 "다른 시각을 가진 두 사람이 협력하기" 입니다.

d. 대화하는 프로그래밍

짝 프로그래밍은 두 사람이 한 컴퓨터를 사용해 함께 프로그래밍하는 것입니다. 두 사람이라는 구성은 대화를 통해 추상화를 높이게 합니다. 한 컴퓨터라는 구성은 구체화를 통해 검증하게 합니다. 미루고 헤아리는 것이 빈번히 교차합니다.

주의해서 생각하지 않으면 프로그래밍은 특정 프로그래밍 언어로 명령문을 타이핑해 넣는 것에 지나지 않는다고 생각할 수 있다. -워드 커닝햄

미루고 헤아린다.는 표현은 혜강 최한기의 <추측론>에서 빌려온 표현입니다. 미루다고 할 때의 추는 직접적이고 구체적인 경험 헤어린다 할 때의 측은 이 구체성을 토대로 경험하지 못한 것에 대한 이성적이고 추상적인 사고 혜강은 우리가 지식을 넓혀가는 요체가 이 추측의 반복에 있다고 생각했습니다.

자신이 작성하는 코드의 추상성을 높이고 싶다면 혼자서 고민하지 말고 다른 사람들과 협동하고, 대화하세요. 같이 그림도 그려보고 함께 소스코드를 편집하세요. 인간에게는 다른 인간과 소통하고 협력할 수 있는 놀라운 능력이 있습니다. 대화는 기적입니다.

B. 이것도 모르세요?

a. 공감하고 이해하려는 대화

능력이 없는 팀장일수록 '비난'만 합니다.

훌륭한 팀장이라면 먼저 그 사람의 사고 과정과 전략을 이해하려고 합니다.

3. 애자일

'애자일 소프트웨어 개발 방법론'은 소프트웨어를 개발하는 한 가지 스타일을 일컫습니다.

[협소한 의미의 애자일]

애자일은 불확실성이 높은 프로젝트에 더 적합합니다. 애자일이 불확실성을 다루는 방식은 좀 더 짧은 주기로 더 일찍부터 피드백을 받고, 더 다양한 사람으로부터 더 자주 그리고 더 일찍 피드백을 받는 것으로 정리할 수 있습니다.

[광의의 애자일]

일하는 한 가지 스타일을 넘어 삶을 사는 방식으로 확장해 보는 것이지요.

학습과 협력이 애자일이 불확실성을 다루는 핵심적인 구동원리입니다.

[학습]

우리가 이동을 할 때 목표점의 위치가 자주 바뀌거나 우리 위치가 자주 바뀌거나 하는 상황으로 비유해 볼 수 있습니다.

이동하면서 계속 배워나가야 한다는 뜻입니다. 불확실성이 높을수록 학습을 잘해야 하는 것이죠. 새로운 상황에 대해서 계속 배우고 내가 맞춰 나가야 합니다. 따라서 우리의 학습 능력을 향상시킬 수 있다면 우리는 불확실성에 대해 더 잘 대응할 수 있을 것입니다.

[협력]

불확실한 상황일수록 리스크가 높은 것이고, 안 좋은 일이 벌어질 확률이 높을 것입니다. 안 좋은 일이 벌어질 확률은 '또는' 조건으로 연결되어 있을 때 더 높아집니다.

애자일은 서로의 업무를 공유하고 상호 검토하는 협력을 통해 불행한 일을 '또는' 조건에서 '그리고' 조건으로 바꾸게 합니다.

불확실한 상황에서 예상치 못한 좋은 일이 생길 확률도 있습니다. 한 사람이라도 통찰을 얻으면 그걸 공유해서 전체가 개선되는 것입니다.

→ 학습과 협력은 불확실성이 큰 상황에서 좋은 대응 전략이 됩니다.

A. 애자일의 씨앗

고객에게 매일 가치를 전하라.

  • 고객에게
    • 우리의 진짜 고객은 누구인가?
  • 매일
    • 어떻게 점진적으로 가치를 전할 것인가?
    • 어떻게 보다 일찍, 그리고 보다 자주 가치를 전할 것인가?
  • 가치를
    • 무엇이 가치인가?
    • 지금 우리가 하고 있는 일이 정말 가치를 만드는 일인가?
    • 지금 가장 높은 가치는 무엇인가?
    • 비슷한 수준의 가치를 더 값싸게 전달하는 방법은?
  • 전하라
    • 가치를 우리가 갖고 있지 않고 고객에게 정말 전달하고 있는가?
    • 고객이 정말 가치를 얻고 있는가?

[학습]

매일하는 것은 학습의 빈도를 말합니다. 불확실성이 높을수록 빈도가 자주 있어야 합니다.

목적지가 움직이는 정도가 크다면 잠깐씩 현재 위치와 목적지의 위치를 확인하는 빈도가 잦아야 합니다.

좋은 학습은 질 높은 피드백에서 옵니다. 진짜 가치를 전달할 때 우리는 진정한 피드백을 받을 수 있습니다.

매일에는 빈도와 동시에 이른 시점부터 시작한다는 의미가 있습니다. 이러면 학습의 복리 효과를 얻을 수 있게 됩니다.

[협력]

고객은 넓은 의미로 이해관계자라고 생각합시다.

가치를 전하면 협력이 쉽습니다. 우선 신뢰가 쌓이게 됩니다. 신뢰가 있을 경우 협력의 비용이 낮아지고 원활해진다는 연구가 많습니다.

이는 앞의 학습과도 연결되는데 가치를 전달하게 되면 의사소통이 명확하고 구체적이 됩니다.

B. 애자일 도입 성공 요인 분석

a. 애자일 도입에 대한 무서운 사실

고객참여, 리팩토링, 코딩 후 자동화 단위 테스트 붙이기, 코드 공유가 잘 되어야 프로젝트 성공에 애자일이 도움이 될 수 있습니다.

많은 조직들이 고객 참여와 코드 공유를 뒤로 미룹니다. 두 가지 모두 사람이 중심이 되기 때문입니다. 고객 참여는 고객을 설득해야 하고, 코드 공유는 개발자를 설득해야 합니다.

사람과의 대문과 충돌이 무섭고 두려운 것이죠. 하지만 이런 것들을 제대로 하지 않으면 프로젝트를 서공하기가 더 힘들어집니다.

애자일 초보팀은 처음에 쉽고 안심이 되는 것에서 시작합니다. 애자일 전문가팀은 무섭고 두렵더라도 중요한 일이라면 그 일을 안하는 리스크를 인식하고 꾸준히 시도합니다.

두려워도 중요하다면 시도해봐야 하지 않겠는가.

C. 애자일을 애자일스럽게 도입하기

도요타가 도요타일 수 있었던 것은 칸반 같은 개별 베스트 프랙티스가 아니라 그런 실천법들이 생겨날 수 있는 문화적 풍토와 생성적 과정 때문이었습니다.

Q: 애자일을 진행하는 가운데 가장 빈번히 빚어지는 폐단은 무엇인가?

A: 애자일은 불확실한 상황에 대한 접근법인데 애자일을 도입할 때 확실성 위에서 진행하려고 한다면 문제가 된다.

뭘 해야 할지 찾아가는 모습이 애자일입니다.

이전 경험이 이번에도 정확히 들어 맞는다고 말할 수도 없습니다.

현명한 전략은 정해진 수순을 따르는 것이 아니라 곁에 있는 사람들과 함께 주변을 탐색하고 조금 나아가고 확인하고를 반복하면서 우리의 현 맥락에 맞는 좋은 전략들을 스스로 만들어 나가는 것이 아닐까 합니다.

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.