카테고리 없음

함께 자라기: 애자일로 가는 길

여니여니_ 2022. 1. 22. 15:53

 

김창준님의 함께 자라기:애자일로 가는길 을 읽고 내가 기억하고 싶은 부분을 위주로 정리했다. 

자라기

자기계발의 중요성, 복리로 돌아온다.

나에게 얼마나 무엇을 투자했느냐가 1년, 2년 후의 나를 결정한다. 하루에 한시간, 두시간 투자하는 자기 계발 시간이 축적되면 엄청난 차이를 불러온다. 지식이나 능력은 복리로 이자가 붙기 때문이다. 

복리 조직은 다음 결과물을 만들 때 더 높은 수준의 결과물을 만들 수 있다. 따라서 조직의 성장이 중요하다. 

나를 개선하는 방법

  • 내가 가지고 있는 것을 잘 활용한다. 이미 알고 있는 것들을 하이퍼링크로 촘촘히 연결하고, 그 노드들이 빠른 속도로 이동하여 시너지 효과가 날 수 있도록 한다. 새로운 것이 들어오면 기존에 있던 것과 충돌을 시도하라.
  • 외부 물질을 체화하라. 주기적인 외부 자극은 좋다. 그리고 그 외부 자극을 제빨리 내 것으로 만든다.
  • 자신을 개선하는 프로세스에 대해 생각해보자. 나의 작업을 되돌아보는 회고/반성 활동을 주기적으로 한다. 나를 개선 하는 과정을 어떻게 개선하면 좋을지 생각해 본다. (되먹임)
  • 피드백을 자주 받아라. 사이클 타임을 줄이고, 1주, 1달처럼 작게라도 실험해보며 순환율을 높여라. 그리고 자주 실패하고 실패에서 학습하라.
  • 자신의 능력을 높여주는 도구와 환경을 점진적으로 만들어라. 완벽한 도구와 환경을 갖추는 데만 집착하면 아무것도 할 수 없다. 

 

타당성과 피드백 높이기, 의도적 수련의 필수 조건 - 적합한 난이도 만들기

칙센트미하이의 몰입 이론

실력이 높은데 쉬운 업무를 하면 지루함을, 실력이 낮은데 높은 난이도의 일을 하면 불안함을 느낀다. 적절한 난이도의 업무를 맡게 되어야 몰입할 수 있는 환경인 것이다. 하지만 이 영역에 안주하게 되면 제자리 걸음을 하게될 수 있다. 하지만 실무에서 내 실력보다 조금 더 어려운 일을 받기는 쉽지 않다.  

 

만약 지루함을 느끼고 있다면 작업의 난이도는 두고 실력을 낮추는 전략이 있다. 평상시 쓰던 보조 도구를 사용하지 않거나 ( 마우스를 쓰지 않고 키보드만 쓰기) 디버거를 쓴다면 쓰지 않는 것, 컴파일을 30초마다 한다면 이를 5분마다 하는 것으로 주기를 늘려보는 것 과 같은 방법이 있다. 

지루함을 느낄 때 업무의 난이도를 높이는 방법도 있다. 하루만에 개발하라고 주어진 업무를 한시간 안에 해결하기, 100rps면 되는 시스템을 1000rps 기준으로 만들기, 익숙한 작업을 새로운 언어로 진행해보기 방법이 있다. 또한, 공식적으로 하지 않아도 되는 업무를 추가로 하는 경우도 잇다. 리팩터링을 하거나 자동화 테스트를 달거나 자신만의 도구를 개발하는 방법이다. 

 

반대로, 불안함을 느끼는 경우이다. 장기적으로 실력을 높이는 방법은 스터디, 교육 듣기 등 방법이 있겠지만 당장 불안함을 느끼고 있다면 어떻게 해야할까. 사회적 접근으로는 나보다 뛰어난 사람에게 도움을 얻는 것이다. 짝 프로그래밍을 해달라고 부탁하거나 인터넷 전문가의 도움을 얻는다. 도구적 접근은 다른 도구의 도움을 받는 것이다. 괜찮은 디버거, 자동 통합 도구, 코드 분석툴 등을 사용하거나 오픈소스 라이브러리를 빌려쓴다. 내관적 접근은 비슷한 일을 했던 경험을 머릿속에서 되살려보는 방법이다. 자기 효용감이 증대하면서 스스로 실력이 향상되기 쉽고 몰입하기에 좋다. 

불안함을 느낄 때 난이도를 낮추는 방법도 있다. 자신이 맡은 일을 아기 버전을 목표로 삶는 것이다. 쉬운 문제를 해결한 후에 어려운 문제에 접근하면 결함률이 낮아진다. 

자신의 실력은 계속해서 요동치고 있다. 따라서 지속적으로 자신의 감정 상태를 살피는 '알아차림(mindfulness)'이 필요하다. 

 

새로운 언어를 배우는 실질적인 방법은 무엇이 있을까?

- 튜토리얼을 읽을 때 뭘 만들지 생각하고 읽는다. 

- 공부할 때 표준 라이브러리 소스코드를 읽는다. 

- 공부 중 다른 사람의 코드에 내가 필요한 기능을 추가한다. 

- 전문성을 효과적으로 뽑아내는 전문가 되기 (구체적인 사건에 대해 말하도록 유도)

 

실수 문화 : 실수 예방과 실수 관리

실수 예방은 실수를 하지 말라고 그 경로를 차단하는 것이다. 하지만 전문가도 실수를 하기 마련이다. 실수한 사람을 비난하고, 처벌하고, 실수를 감추게 하지 말아야한다. 실수 관리를 통해 실수에 대해 서로 이야기하고 배우는 분위기로 이끌어야한다. 이는 학습을 더 잘하는 방향으로 이끈다.

 

함께

협력의 중요성

두 사람이 같이 일을 하면 추상화의 정도가 올라간다. 개발자에게 있어 추상화는 중요하다. 

신뢰의 중요성

신뢰를 쌓는데 중요한 것이 투명성과 공유, 인터랙션이다. 최소 공유를 하게되면 오히려 신뢰가 떨어진다. 복수공유를 활용해야한다. 복수 공유는 결과물을 두개 이상씩 들고 나와 공유하는 것이다. 하나를 들고 나왔을 때보다 불안감이 적을 뿐더러, 부정적 피드백을 수용하려는 마음도 많다. 복수 공유를 활용하자. 

행동을 유도하는 대화

대화를 할 때 이것도 모르세요? 식의 대화는 코칭 능력이 떨어지는 상황이다. 질문자는 다음부터 질문을 잘 하지 않을 것이고 소극적인 태도를 가져오게 한다. 이것은 분명 코칭하는 사람의 문제이다. 공감하고 이해하려는 대화를 할려고 하고, 행동을 유도하는 대화를 해야한다.  

상호참조능력, 삼투압적 의사소통

프로그램을 이해할 때 고수는 상호 참조 전략을 쓴다. 프로그램에서 이해한 것을 도메인 어휘로 번역하고, 도메인 어휘를 다시 프로그램상의 어휘로 바꿔서 검증한다. 이를 상호 참조 전략이라고 한다. 추상과 구상의 세계를 자주 오가는 것이다. 조직 내에 모든 레이어를 꿰둟는 전문가가 있으면 좋겠으나 많은 경우 그렇지 못하다. 이 문제를 해결하기 위해서는 한 사람이 다기능을 갖추도록 하고, 협력이 쉽게 되도록 해야한다. 전자는 바통터치가 덜 필요하도록 만들고 후자는 바통터치 하는데 비용을 줄여주는 것이다. (계층 예시: 기획팀, 구현팀, QA팀 처럼 팀을 나누어 탑다운으로 일을 진행하면 ..)

빠르게 바통 터치를 하기 위해 삼투압적 의사소통을 한다. 물리적으로 가까운 위치에 있는 것이 유리하다. 더 높은 품질을 얻기 위해서는 서로 다른 계층 간에 오르락 내리락 상호 작용이 있어야 한다. 

또한 팀내에 협력하는 전문가가 있으면 그 효율이 증대된다. 전문가만 모아서 팀을 만든다고 잘하는 것이 아니고, 정보를 공유하고 협력을 잘하기 위한 명시적 도움이 필요하며, 그를 위해 소셜 스킬이 뛰어난 제네럴리스트가 있으면 도움이 된다. 

심리적 안전감

내 생각이나 의견, 질문, 걱정 혹은 실수가 드러났을 때 처발받거나 놀림받지 않을 거라는 믿음을 말한다. 내 실수로 인해 비난받는 조직이라면 남들의 도움을 구하기 어렵다. 심리적 안전감을 높이려면 프로그램 도입 전, 리더와 관리자가 매일매일 팀원들과 마이크로 인터랙션에서 다른 행동 양태를 보여줘야 한다. 팀원이 불편한 문제를 제기하거나 부족한 의견을 얘기하거나 어처구니 없는 실수를 저지를 때에 마이크로 인터랙션을 보여주고 있는가?

 

직관의 허점 

개발자들은 자신의 프로젝트 완료 기간을 예측한다. 90% 확률로 언제까지 끝낼 수 있을 것 같다고 이야기 한다. 7명의 개발자가 모두 90%의 확률로 끝낼 수 있다고 했을 때, 평균적으로 90%로 제때 완료될 것이라 생각하면 안된다. 모든 개발자가 제때 끝날 확률은 0.9를 7번 곱한 0.48이 되고 50%정도밖에 되지 않는다. 

애자일은 고전적 방법과 달리 일을 공유한다. 각자 일을 얼마나 진행했는지 매일 공유할 뿐 아니라 내 일, 네 일 구분선이 뚜렷하지 않다. 따라서 일이 빨리 끝나면 다른 사람의 일을 도와주고 따라서 확률이 0.9^7보다 높아지게 되는 것이다. 

애자일은 좋은 일에 대해서는 '그리고'를 '또는'으로 바꾸고, 나쁜 일에 대해서는 '또는'을 '그리고'로 바꾸는 경향이 있다. 좋은 일은 공유를 해서 한 사람이라도 중요한 통찰을 얻었다면 이것을 공유해서 '또는'으로 만든다. 버그와 같이 나쁜 일에 대해서는 중복 검토(짝 프로그래밍, 코드 공유, 코드 리뷰 등)를 해서 모두가 실수해야지만 구멍이 나게 '그리고'로 바꾸게 된다.