독서 _ 함께 자라기, 애자일로 가는 길 _ 김창준

라용·2022년 10월 30일
0

책 '함께 자라기 - 애자일로 가는 길'을 읽고 발췌한 내용입니다.

카카오 윤경옥 개발자님이 신입개발자에게 추천한 책이다. 애자일 방법론보다는 일을 대하는 방법이나 어떤 태도에 대한 이야기인데, 공감 가는 내용이 많았다. 아래에 인상 깊은 발췌문 요약과 전체 발췌문을 옮긴다.

  • 중요한 것은 지금 잘하냐가 아니라 지금 자라냐는 것. 한번의 판가름으로 미래가 결정되지 않는다. 수많은 누적 위에 서서히 정해진다.
  • 단순 반복으로는 달인이 될 수 없다. 구체적인 피드백을 적절한 시기에 받아야 한다.
  • 타당성과 피드백이 없는 환경에 있다면 전문가가 되기 어렵다. 오늘의 실수를 몇 달 뒤에 알거나 영영 모르는 환경이라면.. 더욱더..
  • 타당성을 높이려면 변수를 제한하고 실험을 하면서 규칙성과 인과관계를 찾으려고 노력하고, 피드백을 높이려면 동료나 고객에게 적극적으로 피드백을 요청해야 한다.
  • 튜토리얼을 읽다가도 이 정도면 프로그램을 작성할 수 있겠다 싶으면 그 자리에서 읽기를 멈추고 코딩을 시작한다.
  • 무언가를 읽을 때 구체적인 질문이나 목적을 가진다.
  • 불확실한 상황에서 실수는 피할 수 없다. 오히려 실수를 격려해야 한다. 다양한 실수를 경험하고, 대처하며 배우는 게 효과적이다.
  • 결국 결정은 사람이 하는 것. 그 사람의 마음에 드느냐 아니냐. '누구'의 객관인지가 중요. 논리성과 객관성만 준비해서는 부족할 수 있다. 그 사람을 자주 만나 신뢰를 쌓고, 그 사람이 무엇을 중요하게 생각하는지, 어떤 설명 방식을 선호하는지 이해해야 한다.

발췌

6
무엇이건 실제 바깥세상에 임팩트를 남기려면 혼자 힘으로만 되는 게 없는 것 같습니다. 함께 해야 합니다. 내 주변 사람들과 함께. 내가 매일 부대끼는 동료들과 함께. 하지만 안타깝게도 우리는 함께 보다 각자 하는 것에 익숙하고, 또 그렇게 강요받아 왔습니다. 세상은 함께 해야 뭔가 이룰 수 있는데 왜 우리는 혼자 하는 것만 배울까요. 이번에 잘하냐 못 하냐 하는 것은 그렇게 중요하지 않습니다. 앞으로 기회가 수백, 수천 번 더 있다면 말입니다. 그런 경우 더 중요한 것은 지금 잘하냐가 아니라 지금 자라냐는 것입니다. 실제 바깥세상에서는 한 번의 판가름으로 나의 미래가, 우리의 미래가 갈리는 경우보다는 수백, 수천 번의 누적 위에 서서히 정해지는 경우가 더 많습니다. 하지만 우리는 왜 자라는 것을 훈련할 기회가 별로 없을까요.
그리고 무엇보다 이런 '함께', 그리고 '자라기'를 매일매일 해야 한다는 생각을 별로 하지 못하는 것 같습니다. 한다고 해도 '계속 혼자서 해왔는데 가끔은 한번쯤 함께 해보자', '지금은 바쁘니까 자라기는 나중으로 미루자' 같은 인식 수준에만 머무르는 경우가 많습니다. 하지만 우리가 날마다 함께 자라기를 할 수 있다면 어떨까요?

23
사실 저는 경력이 성과와 별 상관이 없다는 것을 넘어서서 오히려 경력이 편향을 주는 잘못된 지표가 될 수 있다고 봅니다. 최소한도의 경력 수준만 넘겼으면 오히려 몇 년 일했는지는 모르는 것이 더 낫다고 생각하고요. 경력은 오히려 경계해야 할 대상 중 하나인 셈이지요.

27
1만 시간 법칙을 만든 주인공, 안데쉬 에릭손은 이에 대해 다음과 같이 딱 잘라 말합니다.
"55년 동안 걸었다고 걷는 게 점점 나아지고 있는 건 아닙니다. 자신이 즐기는 걸 한다고 해서 더 뛰어나게 될 것이라고 믿는 것은 미신입니다."
그가 말하는 1만 시간 법칙에서 1만 시간은 '자신의 기량을 향상시킬 목적으로 반복적으로 하는 수련'을 한 시간을 일컫습니다. 그런 수련을 의도적 수련이라고 합니다. 그냥 경험이 아니고 매우 특수한 형태의 수련 방법입니다.
..
애자일 프로젝트에서는 지금 내가 한 행동의 피드백을 10분 후, 한 시간 후, 일주일 후 등 여러 주기를 통해 지속적으로 얻을 수 있습니다. 그리고 그때 저지른 실수는 바로 다음 주기에서 교정할 수 있습니다.

39
새로운 것을 유입시키는 데에만 집중하다 보면 새로 들어온 것들이 이미 있는 것들을 덮어버릴 수 있다. 자신이 올해 몇 권을 읽었다고 자랑하지 말고, 내가 그 지식을 얼마나 어떻게 활용했는지 반성하라.

40
피드백을 자주 받아라. 사이클 타임을 줄여라. 새로운 정보를 얻었다면 1년 후에 크고 완벽한 실험을 하려고 준비하기보다는 1달, 혹은 1주 후에 작게라도 실험해 보는 것이 좋다. 순환율을 높여라. 일찍, 그리고 자주 실패하라. 실패에서 학습하라.

43
동일한 자극/조건이 주어졌을 때 어떤 사람은 더 많은 학습과 성장의 기회를 찾고 오히려 그 조건을 자신에게 유리한 조건으로 생각하기도 하더군요. 지금 자신의 상황 때문에 학습 프레임을 갖는 것이 힘들다는 생각이 든다면, 이 우주 어딘가의 누구는 비슷한 상황 '덕분에' 학습 프레임을 가질 수 있었다고 생각하고 있다고 상상해 보면 어떨까요?

51
우리가 주목해야 할 것은 내가 하는 일의 명칭이 뭐냐가 아니라, 내가 실제로 매일 하는 일이 어떤 성격인가 하는 점입니다. 명함에 선임 개발자라고 되어 있다고 안심하면 안 될 것입니다. 자신이 주로 하는 일이 남이 시킨 대로 혼자 프로그램을 만드는 것이라면 그런 스킬과 경력만 계속 쌓일 것입니다. 반면, 컴퓨터화하기 어려운 부분은 크게 성장하지 못하겠죠.

55
실력을 개선하려는 동기가 있어야 하고 구체적인 피드백을 적절한 시기에 받아야 한다... 단순히 반복만 한다고 해서 달인이 될 수 없습니다.

57
타당성 조건이 필요하다는 의미는 직관이 적용되는 영역에 어느 정도 인과관계와 규칙성이 존재해야 한다는 겁니다. 예측가능성이라고 말할 수도 있습니다. 이는 불확실성과는 의미가 다른데, 예컨대 포커 게임 자체는 운이 작용하기 때문에 불확실한 면이 있지만 타당성이 높아서 전문성이 형성될 수 있습니다.
..
수십 년 동안 한 가지 일을 하면서 전문가가 안 되는 비결이 있다면 이 타당성과 피드백이 부족한 환경에서 일하는 겁니다. 예컨대 복잡한 상황에서 뒤죽박죽으로 일하거나 오늘 실수한 것을 몇 달 뒤에 알거나 혹은 영영 모르거나 하는 환경이겠죠. 따라서 이 두 가지가 전문성의 요체라고 할 수 있겠습니다.

59
타당성을 높이려면 변수를 제한하고 실험을 하면서 규칙성과 인과관계를 찾으려는 노력을 하면 됩니다. 피드백을 높이려면 동료나 상사, 고객에게서, 혹은 내가 개발하는 프로그램에서 직접 피드백을 적극적으로 구하면 됩니다. 여러분은 이 두 가지를 높이기 위해 평소에 어떤 노력을 하고 계신가요?

64
자신이 업무 시간 중에 불안함이나 지루함을 느끼는 때가 대부분이라면 실력이 도무지 늘지 않는 환경에 있는 겁니다. 더 무서운 건 점차 이런 환경에 익숙해지고 행동이 습관화된다는 점이죠. 그때는 자기 인식도 잘 되지 않습니다.

83
튜토리얼을 읽다가도 이 정도면 그 프로그램을 작성할 수 있겠다는 생각이 들면 그 자리에서 읽기를 멈추고 코딩을 시작합니다. 프로그램을 완성하면 잠시 멈췄던 자리로 돌아와서 읽기를 계속합니다. 이 때에는 다음 프로그램을 목표로 두면서 말이죠. 이런 것을 적극적 읽기 라고 합니다. 무언가를 읽을 때 구체적인 질문이나 목적을 가지고 있는 방법을 말합니다.

86
유용하면서도 작고 간단한 걸 생각해 내는 것이 앞서의 몰입을 위한 난이도 조절이라고 볼 수 있습니다. 이런 바익을 통해 자신이 튜토리얼을 읽으며 이해한 내용을, 실제로 살아 있는 코드를 수정하고 돌려보고 하는 등 실험하면서 피드백 받을 수 있습니다.

92
교육 쪽에는 실수 훈련이라는 개념이 있습니다. 보통 교육에서는 학생들이 실수를 최소화 할 수 있도록 설계합니다. 교육 중에 실수를 적게 해야 실전에서 실수가 적을 거 아니겠냐는 논리죠. 하지만 연구 결과는 반대입니다. 교육 중에 실수를 더 유도해야 오히려 학습 전이가 더 잘 일어납니다. 다양한 실수를 경험하는 걸 격려하고, 실수 사례를 배우고, 실수 시에 어떻게 대처하는가를 가르치는 교육이 더 효과적이라는 연구 결과가 많습니다. 그래서 전문가에게 실수 대처법을 배우는 것이 중요합니다.
불확실한 상황에서 실수는 피할 수 없습니다. 아니 그 상황에서 학습을 잘 하려면 실수를 격려해야 하기도 합니다. 여러분 자신의 실수 문화는 어떤가요? 자신의 실수 문화를 예방해서 관리로 옮겨가려면 어떻게 해야 할까요? 스스로에게 이 질문을 묻는 것이 불확실한 상황에서 학습을 높이기 위한 첫걸음이 될 것입니다.

100
아무리 기술적 실천법이라고 해도 그 기술은 사회적 맥락속에서 실천되어야 하며 그 기술의 성공을 위해서는 사회적 자본과 사회적 기술이 함께 필요하다. 하지만 안타깝게도 현실에서는 팀원들이 맘에 안 들고, 그들도 나를 맘에 들어 하지 않는 상황, 즉 사회적 맥락이 나쁜 상황에서 타개책으로 TDD의 기술적 측면에만 매몰되는 경우가 있습니다. 사실 그런 상황에서는 무엇을 골라도 실패가 보장되어 있습니다.

104
사회적 기술을 훈련한다는 게 막막하게 느껴지기도 합니다. 그렇다면 지금 당장 개인이 실천할 수 있는 게 있을까요? 간단한 방법은 주변 사람들과 매일 주고받는 마이크로 인터랙션에 신경을 쓰는 겁니다. 그걸 기록하고, 복기하고, 다르게 인터랙션한다고 하면 어떻게 했으면 좋았을까를 생각해 보는 것만으로도 훈련이 될 수 있습니다.

113
서로 같은 목표로 일을 하는 팀이 만드는 소음은 그들 사이에서는 더 이상 소음이 아니라고 합니다. 무엇보다도, 조용한 작업환경을 강조하다 보면 자칫 면대면 의사소통을 나쁜 것으로 생각하게 될 수도 있고, 혹은 면대면 의사소통을 귀찮아하는 사람들에게 좋은 핑곗거리를 주는 것일 수도 있습니다. 협력에서 면대면 의사소통의 중요성은 이미 널리 알려져 있지요.

125
저는 때로 가독성을 손해보면서까지 중복을 줄이기도 합니다. 객체지향에서 그걸 하다 보면 흥미로운 객체들을 발견합니다. 함수형에서 그렇게 하다 보면 흥미로운 함수와 함수의 함수를 발견합니다. 이 "흥미로운 무엇"은 강력합니다. 내가 전에 모르던 것을 배우게 됩니다. 그리고 종종 이것은 프로그래머의 울타리를 넘어서 영향력을 끼치기도 합니다. 고객들의 대화가 바뀔 수도 있습니다. 객체지향을 하면서 흥미로운 객체들을 발견하지 못한다면 너무 고리타분한 코딩은 아닐까 생각합니다.

137
똑같은 제품을 놓고도 어떤 사람은 품질이 좋다. 어떤 사람은 형편없다는 말을 할 수 있거든요. 품질뿐만이 아닙니다. 결함도 상대적으로 정의됩니다. 어떤 사람에게는 기능인 것이 다른 사람에게는 결함이 되기도 하죠. 그러면 우리가 품질을 이야기할 때에는 '누구'를 놓고 하는 말이냐는 걸 생각해 봐야 한다 이겁니다. 이 누구를 빼놓게 되면 고생은 고생대로 해놓고 품질은 형편없다는 소리를 들을 수 있습니다. 왜냐? 당사자가 별로 중요하게, 가치 있게 여기지도 않는 거에만 신경 썼을 수 있거든요. 이런 이유로 품질 관련 일을 하는 사람들, 고품질을 얻으려고 노력하는 사람들은 '인간'에 대한 이해가 필수적이라고 저는 생각합니다.

139
결국 결정하는 것은 사람입니다. 그 사람 마음에 드냐 안 드냐, 이겁니다. 안 들면 어떤 이유를 들어서든 반대하게 됩니다. 도대체 '누구'의 객관이냐 이거죠. 가만히 보면 우리는 그동안 우리의 객관만 신경을 쓰는 실수를 저질러 왔습니다.

141
남을 설득하려면 논리성과 객관성에 대한 환상을 버려야 합니다. 그래야 현실적으로 설득이 가능합니다. 내가 설득하고 싶은 상대를 자주 만나서 신뢰를 쌓고, 그 사람이 무엇을 중요하게 여기는지, 어떤 설명 방식을 선호하는지 이해해야 합니다. 출발은 결국 내가 설득하려는 사람에게서 하는 것입니다. 자료에서 출발하는 것이 아닙니다.
이런 이유로 상사가 애자일을 받아들이게 하기 위해, 상사와는 별로 대화도 안 하면서 사례를 찾거나 근거 자료를 수집하려고 측정에 시간을 쏟는 분들에게 저는 앞서 이야기한 조언을 드립니다. "상대방에 대해 얼마나 이해를 하고 계신가요? 얼마나 대화를 해보셨나요?"

144
결론은, 객관성이라고 하는 것은 상대적이며, 내가 생각하는 객관이 상대의 객관이 아닐 수 있고, 그렇기 때문에 설득에 성공하려면 우선 그 사람을 이해하는 것에서 출발해야 한다는 말입니다. 그런 이유로 설득 하기 위해 '객관적' 자료를 모으는 부분 이상으로 상대를 이해하는 데 많은 시간을 투자해야 합니다.

152
두 개의 팀을 상상해 봅시다. 한 팀은 서로 잘 물어보지 않고, 물어봐도 '이것도 모르세요?' 의 수준으로 대답해 줍니다. 반대로 다른 팀은 서로 코칭을 해주면서 함께 동기와 의지를 붇돋워주고 같이 고민해줍니다. 어느 팀의 사람들이 성장할까요?

167
팀에 누가 있느지보다 팀원들이 서로 어떻게 상호작용하고 자신의 일을 어떻게 바라보는지가 훨씬 중요했다.

175
속도가 빠른 팀은 새로운 수술 도입을 기술적 도전이라기보다 조직적 도전으로 받아들였습니다. 개개인이 새로운 기술을 획득해야 한다고 보지 않고, 함께 일하는 새로운 방법을 만들어야 한다고 생각했습니다.

177
우선 자신의 학습 환경을 만드세요. 거기서부터가 출발입니다. 개별 기술 이상으로 일하는 방식에 대해 실험을 해 보세요. 실험이 실패한다고 좌절하지 마시고요. 학습과 일을 굳이 분리하지 말고 동체로 만드세요. 학습과 실행은 하나입니다. 진정한 학습은 실행 속에서 이뤄지고, 진정한 실행은 학습을 수반합니다. 우선 언제 시작할지 계획부터 짠다고요? 지금 당장 하지 않는다면 장차 할 확률은 절반 이하로 떨어집니다. 새로운 일의 방식을 실험해 봅시다. 일단 30분만 업무 개선을 시도해 보는 겁니다. 이 부분에 이르면 워닝 커닝햄의 명언을 인용하지 않을 수 없습니다.
"작지만 유용한 프로그램들을 매일 작성할 것을 추천합니다."

186
애자일은 앞서의 고전적인 방법과 달리 일을 공유합니다. 각자 일을 얼마나 진행했는지 매일 공유할 뿐 아니라 내 일, 네 일의 구분선이 뚜렷하지 않습니다. 애자일에서는 되도록 사람들이 섞이도록 합니다.
..
애자일에서는 지식을 공유하기 때문에 좋은 정보는 모두가 곧 알게 됩니다. 그리고 그 좋은 정보는 각자의 일에 도움이 됩니다. 서로 판이한 일을 하는 것이 아니고 관련성이 있는 것들을 진행하기 때문입니다.

194
애자일은 불확실성이 클 때 우리가 어떻게 해야 하는지를 고민한 결과물입니다. 따라서 애자일은 불확실성이 높은 프로젝트에 더 적합합니다. 애자일이 불확실성을 다루는 방식은 좀 더 짧은 주기로 더 일찍부터 피드백을 받고, 더 다양한 사람으로부터 더 자주 그리고 더 일찍 피드백을 받는 것으로 정리할 수 있습니다.

206
우리가 애자일을 도입한 지 얼마 안 되었다. 잘 못 한다. 그런데 어떻게든 프로젝트가 성공적이 되었으면 좋겠다라는 입장이라면 답은? 고객 참여뿐입니다. 이게 안 되면서 다른 것들이랑 씨름하는 것은 두렵고 중요한 것에 대한 회피일 수 있습니다.

208
고객 참여란 고객 혹은 고객을 대표하는 사람의 참여입니다. 진정 중요한 것은 프로젝트의 성패를 좌우하는 사람과 최대한 가까운 사람을 참여시키려고 우리가 계속 노력하는 것입니다.

215
새 프로젝트를 진행할 때에 우리가 어떤 방법론을 쓰느냐는 문제보다도 누가 참여하는가가 훨씬 더 압도적으로 중요한 문제가 아닐까요?.. 예를 들어 애자일 방법론 도입을 원하는 팀장이라면 '나는 어떤 팀장인가'를 먼저 자문해봐야 하지 않을까 싶습니다. 내가 어떤 팀장인지가 전혀 바귀지 않으면서 새 방법론만 도입한다고 무슨 효과가 있을까요.

217
애자일 방법론을 도입할 때 뭘 해야 할지 명확하게 알려달라고 합니다. 근데 그 모습은 전혀 애자일적이지 않습니다. 찾아가는 모습이 애자일입니다. 어차피 방법론 도입이라는 것이 매우 불확실한 것이기 때문에 정답이 있을 수 없습니다. 이전 경험이 이번에도 정확히 들어 맞는다고 말할 수도 없습니다.
이것은 거의 모든 종류의 방법론 도입에 적용됩니다. 왜냐하면 방법론 도입은 태생적으로 불확실성이 높기 때문입니다. 그럴 대 현명한 전략은 정해진 수순을 따르는 것이 아니라 곁에 있는 사람들과 함께 주변을 탐색하고 조금 나아가고 확인하고를 반복하면서 우리의 현 맥락에 맞는 좋은 전략들을 스스로 만들어 나가는 것이 아닐까 합니다.

profile
Today I Learned

0개의 댓글