Skip to content

Commit

Permalink
docs: 8장 백지연 추가 (#73)
Browse files Browse the repository at this point in the history
  • Loading branch information
100Gyeon authored Sep 10, 2024
1 parent 6814956 commit be914e9
Showing 1 changed file with 87 additions and 0 deletions.
87 changes: 87 additions & 0 deletions 8장/백지연.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# 8장 프로젝트 전에

## Topic 45 요구 사항의 구렁텅이

### 요구 사항 미신

현실에서 정확한 명세란 불가능에 가깝다.
프로그래머는 사람들이 자신이 원하는 바를 깨닫도록 돕는다.

### 상담 치료로서의 프로그래밍

우리의 경험상 최초의 요청 사항은 궁극적인 요구 사항이 아니다.
의뢰인의 요청 사항은 사실 함께 탐험을 떠나자는 초대장이다.
의뢰인이 미처 고려하지 않은 문제가 있다면 이게 바로 일이 재미있어지는 부분이다.
개발자의 역할은 의뢰인의 말을 해석해서 그로 인한 영향을 다시 알려주는 것이다.

### 요구 사항은 과정이다

프로젝트 막바지가 되면 의뢰인의 수가 늘어난다. (QA, 운영팀, 마케팅, 고객사의 테스트 조직 등)
그래서 실용주의 프로그래머는 **프로젝트 전체를 요구 사항 수집 과정으로 보아야 한다.**
짧은 주기의 피드백을 반복해야 잘못된 방향으로 가더라도 잃어버리는 시간을 최소화할 수 있다.

### 의뢰인의 입장에서 보라

의뢰인처럼 생각하기 위해 의뢰인과 함께 일하라.
의뢰인과 신뢰를 구축하고 의사소통의 기반을 다지는 데 도움이 될 것이다.

> https://www.woowayouths.com/story/culture/view/1/7
> 어느 정도 공감하지만, 이런 경험이 효과적인 도메인이 있고 그렇지 않은 도메인이 있는 것 같아요
### 요구 사항 대 정책

_직원의 기록은 해당 직원의 관리자와 인사팀만 열람할 수 있다._

이 진술은 사업 정책일까, 요구 사항일까?
차이는 미묘하지만, 개발자에게는 중대한 의미가 있다.

1. _인사팀에서만 직원 기록을 열람할 수 있다._
개발자는 애플리케이션이 데이터에 접근할 때마다 인사팀인지 확인하는 코드를 작성할 것이다.

2. _권한이 있는 사용자만이 직원 기록에 접근할 수 있다._
개발자는 일종의 접근 관리 시스템을 설계하고 구현할 것이다.
그러면 **정책이 바뀔 때 시스템의 메타 데이터만 업데이트** 하면 된다.

**정책은 메타 데이터다. 시스템은 다양한 정책을 처리할 수 있도록 일반적으로 구현해야 한다.**

### 요구 사항 문서화

모든 것을 상세하게 정의한 문서를 만든 것은 두 가지 면에서 틀렸다.

1. 의뢰인은 원하는 것을 처음에는 잘 모르기 때문에 법률 문서에 준하는 수준으로 만드는 문서는 사상누각에 불과하다.
2. 개발자를 위해서 쓰는 요구 사항 문서는 의뢰인의 관심사가 아니기 때문에 의뢰인은 요구 사항 문서를 읽지 않는다.

**인덱스 스토리**는 애플리케이션의 작은 일부가 사용자 관점에서 어떻게 작동해야 하는지를 적는 것이다.
이렇게 적으면 요구 사항을 화이트보드에 붙일 수도 있고, 상태나 우선순위를 표현하기 위해 이리저리 옮길 수도 있다.

## Topic 46 불가능한 퍼즐 풀기

어려운 문제를 해결하는 핵심은 **제약을 인식하는 것**과 더불어 **주어진 자유도를 파악하는 것**이다.
모든 선입견을 의심하고 그것이 진짜 바꿀 수 없는 제약인지 가늠해 봐야 한다.

잠깐 다른 일을 하고 있을 때 갑자기 답이 떠오를 수도 있으니 문제를 잠시 손에서 놓는 것도 방법이다.

> 저는 일단 퇴근하고 다음 날 맑은 정신으로 보면 좀 낫더라구요
## Topic 47 함께 일하기

### 콘웨이의 법칙

시스템을 설계하는 조직은 조직의 의사소통 구조를 그대로 본뜬 설계를 만들기 마련이다.
조직의 사회적 구조 및 의사소통 경로가 그들이 만드는 제품에 반영된다는 것이다.
이 원칙을 역으로 이용해 만들고 싶은 코드 구조에 맞추어 팀을 조직할 수 있다.
예를 들어 팀이 여러 지역으로 나뉘어 있으면 더 모듈화, 분산화된 소프트웨어를 만드는 경향이 있다.

> 짝 프로그래밍과 몹 프로그래밍에 대한 부분은 공감하기 어렵네요
## Topic 48 애자일의 핵심

애자일은 '기민하다'는 뜻의 형용사다. 즉, 무언가를 하는 방식이다.
기민함 = 변화에 대응하는 것 = 미지의 것에 대응하는 것

모든 것은 결국 불확실성을 어떻게 다룰 것인가 하는 문제에 달렸다.
피드백을 모으고 그에 맞게 행동함으로써 불확실성을 헤쳐 나가라.

애자일이 전반적으로 작동하게 하려면 좋은 설계를 만들어야 한다.
좋은 설계는 무언가를 바꾸기 쉽게 하기 때문이다.

0 comments on commit be914e9

Please sign in to comment.