1. 소프트웨어 관리자의 개선 우선순위
조엘 테스트라는 개발팀 평가 테스트가 있다
- 소스 컨트롤을 사용하는가?
- 한 번에 빌드를 만들어낼 수 있는가?
- 일일 빌드를 만드는가?
- 버그 데이터베이스를 가지고 있는가?
- 새로운 코드를 작성하기 전에 버그를 고치는가?
- 최신 업데이트된 스케줄이 있는가?
- 스펙(제품 명세)이 있는가?
- 프로그래머가 조용한 작업환경에서 일하는가?
- 돈이 되는 한 최고의 툴을 사용하는가?
- 테스터가 있는가?
- 채용 면접 때 후보가 코드를 짜게 해보는가?
- 복도 사용성 테스트를 하는가?
조엘이 2000년에 작성한 블로그 글에서 소개된 이 테스트는 많은 인기를 얻었고, 그만큼 비판도 많이 받았다고 한다
이 12가지 항목에 "예"라고 대답하면 "완벽하다"라고 말한다
각 항목은 객관적으로 예/아니오 답이 나올 수 있을 정도로 명료하다
그러나 여기에 가장 큰 위험이 존재한다
선의의 관리자나 경영진이 각 질문의 맥락을 이해하지 못한 채
단순히 12가지 질문에 예라고 답하는 것을 목표로 노력하는 경우 문제가 된다
함께 자라기의 저자는 모든 항목에 예라고 답하는 것이 무조건 더 낫다고 동의하기 어렵다고 말한다
그 이유는 예를 들어 8번 같은 경우 팀원들이 의사소통을 할 수 있는 경우 생산성 향상에 오히려 더 많은 도움이 될 때도 있고, 9번 같은 경우도 가장 비싼 도구 보다는 맞는 도구를 사용하는 것이 더 중요하다고 얘기한다
그 외에 나머지 항목들도 맥락에 따라 반대의 경우도 많기 때문이다
다음 이야기로 넘어가서
품질 전문가 제럴드 와인버그의 소프트웨어 개발을 잘 관리하기 위한 QSM(품질 소프트웨어 관리) 책이 있다
- 시스템적 사고
- 일차적 측정
- 일치적 행동
- 변화를 기대하기
마지막 4권에서 소프트웨어 개발 비용을 결정하는 4가지 요소에 대한 내용이다
- 도구: 소프트웨어 개발에 사용하는 모든 종류의 도구
- 사람: 사람들의 능력과 경험
- 시스템: 제품 자체의 복잡도, 요구되는 신뢰성, DB 크기, 타깃(VM 등)의 변화 가능성, 스케줄 제약 등
- 관리: 사람을 배정하고 작업 분배를 조정하고 위임하는 것
(작업 모니터링, 동기를 고취하는 것, 작업 조건/환경을 개선하는 것, 자원의 준비, 리스크를 일찍 확인하고 적절한 조치를 취하는 것, 요구사항과 설계 스펙이 비준되게 돕는 것)
보통의 회사들이 비용 개선을 할 경우 도구 개선 부터 시작한다
이 중 실제 효과로 보면 우선순위는 관리, 시스템, 사람, 도구 순이었다
2. 협력을 통한 추상화
추상화는 프로그래머들에게 매우 중요한 주제이다
추상화를 높일 수 있는 방법 중 하나는 '다른 시각을 가진 두 사람이 협력하기' 이다
자신이 작성하는 코드의 추상성을 높이고 싶다면 혼자서 고민하지말고 다른 사람들과 협동하고, 대화하라
인간에게는 다른 인간과 소통하고 협력할 수 있는 놀라운 능력이 있다
3. 신뢰를 깎는 공유인가 신뢰를 쌓는 공유인가
신뢰 자산이 높은 조직은 커뮤니케이션 효율이나 생산성이 높다
특히 애자일을 제대로 하려는 조직이라면 이 부분에 이미 많은 노력을 들이고 있을 것 이다
신뢰를 쌓는 데에 널리 사용되는 한 가지 방법은 투명성과 공유, 인터랙션 이다
자신이 한 작업물을 투명하게 서로 공유하고 그에 대해 피드백을 주고 받으며 인터랙션 하는 것이다
그런데 정말 그렇게 공유하고 소통하면 신뢰가 쌓일까?
그렇지 않다
잘못된 공유 방법을 사용한다면 신뢰도가 오히려 떨어지는 상황이 생긴다
공유를 세가지 방식으로 나눠보자
- 복수 공유: 여러 개의 작업물을 모두 공유
- 최고 공유: 가장 잘했다고 생각되는 작업물 하나를 공유
- 하나 공유: 하나의 작업물을 만들고 하나를 공유
신뢰도 측면에서 봤을 때 최고 공유와 하나 공유는 안하느니만 못한 결과를 낳는다
최고 공유와 하나 공유는 기대감보다 불안감이 크다
상대가 흉을 볼까봐 혹은 잘못되었을까봐 등의 반응을 생각하게되고 어떻게 방어적으로 대응해야 할지 생각하게 된다
상대 역시 싫어할까봐 솔직한 의견을 얘기하는 것을 꺼리게 될 것이다
작업물 = 나로 인식하여 부정적인 의견을 주면 그건 곧 나의 전문성에 대한 도전이 된다
또한 나름 방어를 해낸다고 해도 자기효능감이 떨어지기 쉽다
반대로 복수 공유는 그런 불안감이 상대적으로 덜하며
부정적인 피드백을 수용하려는 마음도 더 많다
또 작업물이 여러 개를 준비했으니 그 중 하나를 두고 부정적 의견을 내도 나에 대한 공격으로 인식하지 않는다
말하는 사람도 듣는 사람도 모두 마음이 한결 편해지는 것 이다
신뢰를 쌓는 복수 공유를 하자
4. 품질은 상대적이다
결국 결정은 사람이 하는 것이다
그 사람이 마음에 드냐 안 드냐에 따라 어떠한 객관적 자료를 제시해도 설득할 수 없을 수 있다
특히나 그 자료에 당신의 생각이 틀렸다 라는 암시가 강하게 있다면 더더욱 설득이 어렵다
누구의 객관인가를 생각해야 한다
우리는 우리의 객관만 신경쓰는 실수를 저질러서는 안된다
인간은 감정을 배제할 수 없기 때문이다
의사결정을 하는 과정에 감정적이고 직관적인 부분이 큰 역할을 하고 있으며,
그런 감정적 부분이 배제된다면 의사결정을 제대로 할 수 없다
5. 성향과 기질에 따른 애자일 설명법
위에서 설명한 감정이라는 것은 결국 성격으로 이어질 수 있다
상대에 맞게 애자일 방법론에 대해 설득하는 예를 들어 설명해보자
요즘 유행하는 MBTI로 접근해보면
- NT(직관적 사고형):
애자일을 하면 낮은 의존성과 높은 응집성의 이상적이고 우아한 설계를 실제로 실현하고,
또 지속적으로 유지할 수 있습니다.
이제 스파게티 코드는 안녕입니다. - NF(직관적 감성형):
고객과 우호적 관계를 이어갈 수 있습니다.
팀원들 모두가 신뢰하고 협력하면서 즐겁게 일할 수 있습니다.
누군가를 비난하거나 하는 일이 없을 겁니다.
개인적인 성장도 가능합니다! - SJ(감각적 판단형):
효율적입니다. 낭비되는 작업을 하지 않습니다.
불필요한 문서화나 회의 안 합니다.
현 프로젝트 상황이 한눈에 들어오고, 지금 당장 뭘 해야 할지가 명확하게 보이게 됩니다.
더 안전합니다. 데드라인에 와서 죄송합니다 라고 말하는 상황이 절대 나오지 않고,
정확한 예측이 점점 가능해집니다. - SP(감각적 지각형):
설계한다고 몇 달씩 시간을 끌지 않습니다.
당장 개발로 들어갈 수 있습니다.
순식간에 원하는 대로 코드를 바꾸고 테스트를 통과하고 하는 짜릿짜릿한 경험을 할 수 있습니다.
테스트가 실패하면 그 원인이 되는 버그를 찾아서 고치는 것이 마치 게임 같습니다.
재미있는 툴들을 많이 접할 수 있습니다.
결론은 객관성이라고 하는 것은 상대적이며,
내가 생각하는 객관이 객관이 아닐 수 있고,
그렇기 때문에 설득에 성공하려면 우선 그 사람을 이해하는 것에서 출발해야한다는 말이다
객관적 자료를 모으는 부분 이상으로 상대를 이해하는데 많은 시간을 투자해야 한다
6.하향식 접근의 함정
일반적으로 우리는 전문가는 언제나 탑다운으로 깔끔하게 생각할 것이다 라는 미신을 가지고 있다
탑다운은 문제 해결 과정을 시간의 흐름에서 볼 때 추상적인 숲에서 출발해서 점점 더 구체적인 나무로 내려오는 접근법을 말한다
탑다운은 깔끔해 보인다
잘 정의된 문제라면 그럴 것이다
잘 정의된 문제는 이미 많은 연구들이 이루어져있기 때문이다
하지만 우리가 실생활에서 만나는 문제들은 대부분 잘 정의되지 않은 문제들이다
목표 상태가불분명하고 심지어는 출발 상태에 대한 정보도 온전히 주어지지 않는 경우도 있다
이러한 경우 탑다운과 바텁업을 섞어 쓰는 방법이 더 좋다
뛰어난 전문가일수록 더욱 이 방법을 선호한다
비전문가는 현재 문제가 나에게 얼마나 어려운가에 대한 인식이 부족하며,
자기의 문제 풀이 전략을 상황에 맞게 능동적으로 선택하거나 변경하지 못한다
오히려 탑다운이나 바텀업 중 한 가지에만 억지로 집착하려고 한다
예컨데 "이번 문제는 복잡하니까 더 철저하게 계획하고 설계해야겠다" 하는 것 이다
전문가들은 추상과 구상을 오르락 내리락하며 아하 하는 순간을 캐치한다
7. 다양성이 높은 좋은 팀
- 전문가들 모아서 팀 만든다고 잘하는 것 아니고
- 오히려 성과가 떨어질 수 있고
- 정보 공유하고 협력을 잘하기 위한 명시적인 도움이 필요하며
- 소셜 스킬 등이 뛰어난 제너럴리스트가 있으면 도움이 된다
8. 구글이 밝힌 탁월한 팀의 비밀
- 팀에 누가 있는지(전문가, 내향/외향, 지능 등)보다 팀원들이 서로 어떻게 상호 작용하고 자신의 일을 어떻게 바라보는지가 훨씬 중요했다
- 5가지 성공적 팀의 특징을 찾았는데, 그중 압도적으로 높은 예측력을 보인 변수는 팀의 '심리적 안전감' 이었다
- 팀 토론 등 특별히 고안된 활동을 통해 심리적 안전감을 개선할 수 있었다
여기서 말하는 심리적 안전감이란
내 생각이나 의견, 질문, 걱정, 혹은 실수가 드러났을 때 처벌받거나 놀림받지 않을 거라는 믿음을 말한다
반대로 심리적 안전감이 낮다면 실수를 감추는 조직이 되는 것이다
팀원이 불편한 문제를 제기하거나,
어리석어 보이는 질문을 하거나,
부족한 의견을 얘기하거나,
어처구니없는 실수를 저지를 때 어떤 마이크로 인터랙션을 보여주고 있는지 생각해보자
9. 애자일 확률론
애자일은 일을 공유한다
각자 일을 얼마나 진행했는지 공유할 뿐 아니라 내 일, 네 일의 구분선이 뚜렷하지 않다
애자일에서는 사람을 되도록 섞이도록 한다
애자일에서는 내가 일을 빨리 끝나면 다른 사람의 일을 도와준다
가장 일이 밀려 있는 사람이 누구인지가 확연히 보이기 때문에 프로젝트에서 병목이 되는 사람을 도와주기 쉽다
이렇게 먼저 일을 끝낸 사람이 나머지 사람들을 도와주게 되기 때문에
해당 시점에 나머지 사람들이 일을 제시간에 끝낼 확률이 높아진다
마무리 느낀점
함께라는 목차 답게 협력을 강조한다
1부에서 다뤘던 내용을 조금 더 구체적으로 이야기 하고 있다
신뢰나 실수에 대한 이야기 그리고 조금 더 어려운 설득에 대한 이야기를 현업에서 있을 법한 경험들로 설명해주는 점이 좋았다
이러한 일들은 굉장히 빈번하게 일어날 수 있는 일들이기 때문에 놓치지 않도록 주의해야겠다
'개발 서적 > 함께 자라기 - 애자일로 가는길' 카테고리의 다른 글
함께 자라기 - 3부 애자일 (1) | 2022.09.01 |
---|---|
함께 자라기 - 1부 자라기 (0) | 2022.08.29 |