티스토리 뷰

카테고리 없음

익스트림 프로그래밍

희나람 2013. 12. 20. 04:31

 올 한해, 저의 화두는 '협업'이였습니다. 그간 저는, 천상천하 유아독존이라는 말을 새겨넣은 듯, 제 혼자 잘난 듯 떠벌리고 다녔었지요. 하지만 이런 행동이 큰 일을 하지 못하게 막고 있다는 점을 어느순간 이해하게 되었습니다. 무언가 큰 것을 만들어낸다는 건, 잘난 한명에 의해 나오기보다, 여러 명의 협력에서 나오는 결과물 이라는 걸 깨닫게 되었거든요.

 이 책을 읽으면서 정리한 내용들은, 앞서 언급한 화두를 주제로 정리가 되어있습니다. SW에 대한 책이지만, 되도록 협업에 중점을 두고 인상 깊었던 내용을 정리해 보았습니다.


 익스트림 프로그래밍(Extrem programing, XP)은 사회적 변화에 대한 것입니다. 과거에는 잘 통했어도 지금에서는 잘 안통하는 습관과 양식이 많습니다. 이를 버리는 이야기입니다. 우리들을 보호해주는 어떤 방어수단이라도 생산성을 떨어뜨린다면 포기해야합니다. XP는 이런 이야기 입니다.

 XP의 적용 원칙 몇가지를 소개하겠습니다.

- 낮은 곳의 과일부터

- 가장 핵심적이고 괴로운 문제부터 (근본원인 분석)

- 성공에 집중하기 (잘 안되는 것보다 뭐가 잘되는지에 집중)

- 잘 안되면 방법을 바꿔서

- 문자에 집착하지 않고

- 점진적으로 (아기 걸음)


23p

XP는 "나는 다른 사람들보다 똑똑하니까 내 능력을 최대한 발휘하려면 나를 혼자 내버려 두기만 하면돼" 같은 사춘기적 앳된 자긴감을 넘어서는 것에 대한 이야기이다.

=> 한번 새겨봐야할 이야기


28p

여러분이 조절할 수 있는 유일한 요소는 자신의 행동뿐이다. ... 여러분이 다른 사람의 기대를 조절할 수 없다. 그러나 그들의 기대를 현실 상황에 맞추도록 프로젝트에 대해 여러분이 알고 있는 것들을 그들에게 말해 줄 수는 있다.  ... 다른 사람의 기대를 '관리'하는 것은 내 일이 아니다. 자기들의 기대를 관리하는 것은 그들 몫이다. 최선을 다하는 것과 의사소통을 명확하게 하는 것이 나의 몫이다.

=> 나와 타인은 서로 다른 곳을 바라보는 사람입니다. 이 가운데서 제가 할 수 있는 일은, 상대방을 제가 원하는 방향으로 이끌어가는 것에 있는 것이 아니라, 상대방이 스스로 이끌림을 받을 수 있는 목표에 대해 명확히 이야기해줄 수 있는 것입니다.


99p

변화는 깨달음과 함께 시작된다. 변화가 필요하다는 깨달음은 감정, 본능, 사실, 외부자의 피드백에서 나온다. 감정은 소중한 것이지만, 사실이나 신뢰성 있는 의견을 통해 교차 검증해야 한다.

=> 자신에 대한 반성이 있어야만 변화가 필요함을 느낄 것입니다. 변화의 필요성이 나만의 아집에서 출발할 수도 있습니다. 이럴 때, 제가 생각하는 변화의 필요성이 요구하는 사실과 의견이 어느정도 신뢰성이 있는지 알아보아야 할 것입니다.


144p

 계획 짜기가 복잡한 까닭은 스토리의 비용과 가치가 불확실하기 때문이다. 여러분이 결정을 내린 시점에서 근거로 삼은 정보들은 변한다. 우리는 추정치를 개선하기 위해 피드백을 이용하여, 가장 좋은 정보를 근거로 결정을 내릴 수 있도록 결정 시기를 최대한 늦춘다. 이것이 XP에서 계획 짜기를 매일, 매주, 매분기 해야 하는 이유다. 새로운 사실이 튀어나올 때마다 그에 맞도록 계획을 변경할 수 있다.

=> 계획을 짜더라도 생각지 못한 예외사항들이 나올 때가 있습니다. 어떤 일을 해나감에 있어서 계획은 마치 건물의 뼈대와 같지만, 우리의 삶은 건물과 달리 늘 변화할 수 있듯, 피드백을 통해 재수정이 필요할 겁니다.


161p

 소프트웨어에서 점진적 설계가 가치 있는 이유 가운데 하나는 우리가 어떤 애플리케이션을 최초로 작성하는 경우가 많다는 것이다. 비록 현재의 애플리케이션이 동일 주제에 대해 무수히 많은 변주를 시도한 후에 나온 것이라 해도, 소프트웨어를 설계하는 데는 언제나 더 나은 방법이 존재한다. 설계가 미치는 영향은 증폭되는 성질이 있으며 설계 아이디어들도 경험이 쌓이면서 개선되기 때문에, 인내심은 소프트웨어 설계자가 지닐 수 있는 가장 가치 있는 기술 가운데 하나다. 딱 피드백을 얻을 정도로만 설계하고, 얻은 피드백을 이용해서 그 다음 피드백을 얻을 정도까지만 설계를 개선하기 위해서는 좋은 솜씨가 필요하다.

=> 무언가를 처음부터 완벽하게 하기란 어려울 겁니다. SW 뿐만이 아니라 어떤 기획을 하여 만드는 일이라면, 세세한 부분들이 만들어지는 과정에서, 최초의 기획이 구현과의 괴리가 생겨나기 시작하지요. 그 때문에, XP에서는 점진적 설계를 권장합니다. 그림을 그릴려고 한다면, 먼저 어떤 그림을 그릴지 이야기하며 피드백 받고, 구도를 잡으며 피드백을 받고, 스케치를 그리며 피드백을 받듯이 말입니다.

 이렇게 해나가다 보면, 그 전에 쌓여있던 실패로부터 건져진 깨달음이, 이전보다 더 완벽함을 만들 수 있게 만들어 줄꺼니까요.


170p

 더 작은 팀을 사용하는 방법이 효과를 내지 못하면, 큰 프로그래밍 문제를 작은 팀들이 하나하나 풀 수 있는 여러 작은 문제로 변환한다. 먼저 작은 팀으로 문제의 작은 일부분을 해결한다. 그런 다음, 자연스레 갈라지는 금을 따라 시스템을 쪼갠 후 몇몇 팀으로 작업을 시작한다. 시스템을 분할할 경우 나뉜 부분들이 통합 때 맞지 않을지도 모른다는 위험이 따르므로, 팀들마다 다르게 내린 가정을 조장할 수 있도록 자주 통합한다. 이것이 분할 후 정복(divde-and-conquer) 전략 대신 정복 후 분할(conquer-and-divide) 전략이다.

...

요컨데 대규모 팀이 꼭 필요하다고 생각하더라도 먼저 작은 팀만으로도 문제를 풀 수 있지 않나 생각해 보라는 뜻이다. 그 방법이 통하지 않을 경우, 작은 팀으로 프로젝트를 시작한 후에, 일을 쪼개 자율적인 팀들에게 나누어준다.

=> 너무나도 크게 보이는 문제라도 자세히 들여다보면 핵심적인 맥이 존재할 겁니다. 이 부분만 떼어낸다면, 큰 문제도 작은 문제로 만들 수 있을 겁니다. 이를 해결하다보면 몇몇 팀으로 나누어서 해야할 작은 문제들이 나오겠지요. 문제를 반드시 분할한 후에 정복할 수도 있지만, 분할이 제대로 될지 의문이라면, 작은 맥부터 정복하면서 분할해나가는 것은 어떨까 싶습니다.


174p

 ... 프로젝트를 시작할 때 맞이하는 도전 가운데 하나는 모든 사람이 다른 이들의 전문 영역에 대해 조금씩 배우는 동안 조화롭게 일하도록 만드는 일이다. 예를 들어, 나는 생명보험 관련 프로젝트에서 일한 적이 있다. 내가 보험회계사와 짝 프로그래밍하기에 충분한 보험회계 수학을 익히는 동안 그 보험회계사는 인내심을 갖고 느긋하게 대해 주었다. 한 달이 지나자, 나는 바보 같은 실수 정도는 잡아내게 되었다. 몇 달이 지나자, 가끔 도움을 줄 정도까지 되었다. 내가 보험 회계사가 된 것은 아니지만, 결과로 나온 시스템(과 팀)은 보험 회계사가 시스템에서 자기가 맡은 작은 부분에서만 일하고 나 또한 사용자 인터페이스만 잡고 일하는 경우보다 훨씬 튼튼하게 되었다.

=> 어떤 프로젝트를 진행하든, 가장 중요한 가치는 전문가들의 긴밀한 협력이라고 생각합니다. 그 협력이 단순히 업무를 배분하고 할일만 주고받는 것이 아니라, 상대방의 영역에 대한 이해도를 갖추고, 그 영역 내에서 서로에게 영향을 주는 겁니다. 서로를 세심하게까지는 보지 못하더라도, 대략적인 큰 그림에서 케어해줄 수 있는 역량을 갖추게 될 때, 서로가 시너지를 이룰 수 있지 않나 생각하여 봅니다. 


202p

 ... 어떻게 개선해야 할지 먼저 알아야 하며, 개선은 그 다음에 찾아온다. 여러분은 어떤 변화를 만들고, 그 결과를 관찰한 다음, 변화를 소화해서 탄탄한 습관으로 바꾼다. 그러다가 언젠가는 개선의 진도가 잘 나가지 않는 상태에 빠질 텐데, 그때에는 더 많은 피드백을 흡수하면서 다음 도약 기회를 모색하라.

 어떤 경우에는, 새로운 실천방법을 시도했더니 여러분의 수행 능력이 오히려 떨어지는 것을 발견할 수도 있다.

=> 무언가를 하는 일의 '정도正道'라는 명확한 방법이 존재한다하더라도, 대개는 알지 못한체 진행하는 경우가 많을 겁니다. 무엇인지 모르고 시작하면서, 문제점을 발견하고 그제서야 여러 방법들을 찾아보거든요. 그래서 무언가를 할 때, 아쉬운 점이 나오고, 이를 바탕으로 개선하면서 변화를 주어 도약을 합니다. 이처럼 팀에서 무언가를 하면서 늘 더 많은 피드백을 흡수하고 그를 통해 진보해나가야 능률이나 여러 가치들이 높은 수준으로 도약할 겁니다. 물론 잘못된 개선으로 떨어질 수도 있겠지요. 항상 이를 반면교사삼아 성장시켜야하지 않을까요.


204p~205p

코치고르기

 '코치'리는 단어에는 팀의 일부가 되는 것과 독립적인 시야를 가지는 것 사시의 균형을 잡는다는 의미가 들어 있다. 처음에는, 코치가 개선할 기회들을 발견하고 그 기호를 제대로 잡을 실험들을 이끄는 역활을 한다. 코치는 경험과 시야를 지니고 있으며, 그룹 내 일상적인 역학 관계의 그물에서 자유로운 존재이다.

 ... 코치는 의사소통에서 병목이 어디인지 알아채고 그것을 해결한다. ...

 ... 코치는 의존성이 아니라 독립성을 복돋워야 한다. 좋은 코치는 여러분이 준비가 다 되었다고 느끼기 조금 전에 떠나며, 그 자리에 남는 팀이 지속가능하고, 수익을 내고, 안정되고, 빠르고, 재미있는 소프트웨어 개발로 가는 경로에 자신들이 확고히 서 있음을 깨닫게 된다.

=> XP를 지도해줄 코치의 요건을 설명합니다. 코치는 팀에서 반드시 필요한 사람은 아닙니다. 다만 지금의 상황을 잘 내다봐주고 해결해주는 역활을 하는 거지요. 독립성을 가져야한다함은 팀 내의 여러 이해관계에 의해 휘둘리지 말아야하기 때문입니다. 이는 조언을 해주기 위해선 눈치봐야할 요소가 있으면 제대로된 코칭이 나오지 못할테니까요.

 이러한 독립성을 지속적으로 유지해야할 것 같습니다. 어항 속의 물고기들이 어항에서 생겨나는 사건 사고들을 잘 인식하기보다, 멀리서 어항을 지켜보는 다른 사람이 오히려 어항의 문제점을 잘 발견하니까요.


206p

 언제 XP를 쓰지 말아야하는가

 ... 조직의 실제 가치가 비밀, 고립, 복잡성, 소심함, 무례라면, 갑자기 새로운 실천방법 집합을 통해 반대 가치를 표현하다가는, 개선을 만들기 보다 문제를 일으킬 것이다.

=> 새로운 지식이나 지혜를 받아들이기 위해서는 자신을 비워야한다고 합니다. 하지만 저는 제 생각으로 제 머릿 속에 가득차 있는 탓인지, 다른 사람들의 조언이나 이야기가 안들어올 때가 많습니다. 이럴 때는 제 자신의 아집을 버리지 않으면 아무것도 얻지 못하더군요. 공학자로서, 문제해결의 가장 최적화된 방법을 고민하는 우리들로서는, 여러 가지 방법들에 대해서 귀를 기울이고 받아들여서, 개선할 수 있는 가장 좋은 방법을 통찰해 내야겠지요.


216p

 XP를 만들면서 처음에 나는 프로그래머들에게 치우쳐져 생각했다. ... 하지만 ... 탁월함을 목표로 삼는다면 소프트웨어 개발을 '프로그래머들과 기타 등등의 사람들'로 봐서는 안된다는 점을 배웠다. 관련된 모든 사람들의 관심사들 사이에서 균형을 잡지 않는다면 어떤 사람들은 개발에 기여하지 못할 텐데, 그들의 관점도 팀의 성공에는 중요하다. ...

 조화와 균형은 XP의 목표이다.

=> SW를 의뢰하는 사람은 어떤 것을 요구해야할 지 잘 모르며, 설계자는 자신의 이해 안에서 쉽게 구현하려고 합니다. 이는 설계자와 사용자 사이의 힘의 균형을 이루는 시도가 실패한 겁니다. 어떤 일이든 잠재력을 실현할려면 팀워크가 필요할 겁니다. 


219p

 ... 공동체는 여러 문제에 대해 목소리를 내거나 경험을 공유하기에 안전한 장소를 제공한다. ...

 ... 공동체에서 개방적이고 정직한 의사소통이 일어나려면, 참여자들이 안정감을 느끼고 자신이 이해받는다고 느껴야 한다. ... 불평하기, 쏟아내기, 감정을 배출하기, 자신의 똑똑함을 뽐내기, 그밖에 뭐라고 부르든, 여러분 말에 대한 반응으로 여러분이 요청한 적도 없는 충고가 격류처럼 흘러내린다면, 그 공동체는 안전한 곳이 아니다. 어떤 사람이 자기 마음 깊숙한 곳에 있는 이야기를 하려면, 말을 하더라도 안전할 것이라는 확신이 있어야 한다.

 ... 공동체는 질문을 던지고 의심을 드러낼 장소이기도 하다. ...

=> 다른 사람들과 같이 하고자 하는 이유는, 나만의 갇힌 시야에서 다른 사람의 시야를 빌려 조금 더 나를 넓게보기 위함일 것입니다. 내가 가진 공격성을 줄이고 타인에 대한 이해로 받아들여야, 많은 것들을 배울 수 있지 않을까 싶습니다. 인생도처 유상수, 곳곳에 저보다 나은 사람들을 만난다는 말입니다. 자신이 잘났다고 생각하는 건, 자기 자신밖에 보이지 않기에 그렇게 생각하는 거지요. 나 아닌 다른 누군가와 함께 이야기를 해본다는 건, 각자의 삶의 기준에서 제가 생각지 못한 통찰을 얻어내고, 이에 시야를 넓혀나가기 위함이 있다고 생각합니다.