[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -0,0 +1,369 @@
|
||||
---
|
||||
id: quality-pair-programming
|
||||
title: Pair Programming — Driver / Navigator / Remote
|
||||
category: Coding
|
||||
status: draft
|
||||
source_trust_level: B
|
||||
verification_status: conceptual
|
||||
created_at: 2026-05-09
|
||||
updated_at: 2026-05-09
|
||||
tags: [quality, pair-programming, vibe-coding]
|
||||
tech_stack: { language: "Process", applicable_to: ["Engineering"] }
|
||||
applied_in: []
|
||||
aliases: [pair programming, mob programming, ensemble, driver navigator, pairing tools]
|
||||
---
|
||||
|
||||
# Pair Programming
|
||||
|
||||
> 둘이 한 keyboard. **Code quality + knowledge transfer + 학습**. Driver/Navigator + remote (VSCode Live Share / Tuple). 큰 / 복잡 / 새 영역 효과적.
|
||||
|
||||
## 📖 핵심 개념
|
||||
- Driver: 키보드 + 작은 step.
|
||||
- Navigator: 큰 그림 + review.
|
||||
- Swap: 매 15-20 min.
|
||||
- Mob: 3+ 명 (Ensemble).
|
||||
|
||||
## 💻 코드 패턴
|
||||
|
||||
### 시작 ritual
|
||||
```
|
||||
1. 목표 합의 ("왜 pair?")
|
||||
2. Time box (1-2 hour)
|
||||
3. Driver 정함
|
||||
4. 시작
|
||||
```
|
||||
|
||||
### Driver / Navigator 책임
|
||||
```
|
||||
Driver:
|
||||
- 입력 (keyboard)
|
||||
- Implementation 의 작은 step
|
||||
- Naming / 작은 결정
|
||||
|
||||
Navigator:
|
||||
- 다음 step 생각
|
||||
- "여기서 X 가 빠짐"
|
||||
- Edge case 발견
|
||||
- Quality / pattern
|
||||
```
|
||||
|
||||
### Strong-style pairing (Llewellyn Falco)
|
||||
```
|
||||
"For the idea to go from your head into the keyboard,
|
||||
it must go through someone else's hands."
|
||||
|
||||
Navigator 가 의도 → Driver 가 implement.
|
||||
역할 swap 없이.
|
||||
|
||||
→ Pure transfer.
|
||||
```
|
||||
|
||||
### Ping-pong (TDD)
|
||||
```
|
||||
1. A: red test
|
||||
2. B: green code
|
||||
3. B: red test
|
||||
4. A: green code
|
||||
...
|
||||
|
||||
→ TDD + pair.
|
||||
둘 다 active engagement.
|
||||
```
|
||||
|
||||
### Swap rate
|
||||
```
|
||||
15-20 min: 일반.
|
||||
5 min: rapid (작은 task).
|
||||
30+ min: 1 명 dominant — bad.
|
||||
|
||||
→ Pomodoro 같은 timer.
|
||||
```
|
||||
|
||||
### Mob programming (3+ 명)
|
||||
```
|
||||
1 keyboard, 모두 watching.
|
||||
매 5-10 min driver swap.
|
||||
Whole team learning.
|
||||
|
||||
→ 주로 1 day / week.
|
||||
```
|
||||
|
||||
### When to pair
|
||||
```
|
||||
✅ 새 feature design
|
||||
✅ 복잡 bug
|
||||
✅ Junior onboarding
|
||||
✅ Production 위험 변경
|
||||
✅ 새 기술 학습
|
||||
✅ Critical refactor
|
||||
|
||||
❌ 단순 작업
|
||||
❌ 둘 다 모름
|
||||
❌ 둘 다 피곤
|
||||
❌ Personality conflict
|
||||
```
|
||||
|
||||
### Remote pair tools
|
||||
```
|
||||
1. VS Code Live Share — built-in
|
||||
2. Tuple — Mac, low-latency
|
||||
3. Pop / CodeTogether
|
||||
4. Jetbrains Code With Me
|
||||
5. Zoom screen share + voice (basic)
|
||||
```
|
||||
|
||||
### VS Code Live Share
|
||||
```
|
||||
Host:
|
||||
- Cmd+Shift+P → "Live Share: Start"
|
||||
- Share link
|
||||
|
||||
Guest:
|
||||
- Click link
|
||||
- Same files / cursor / debug
|
||||
|
||||
→ Free + 통합.
|
||||
```
|
||||
|
||||
### Tuple (Mac, paid, best UX)
|
||||
```
|
||||
- Low-latency screen
|
||||
- Both keyboards
|
||||
- Voice clear
|
||||
- "Shoulder tap"
|
||||
|
||||
→ Real-time pair feel.
|
||||
```
|
||||
|
||||
### Audio quality (critical)
|
||||
```
|
||||
- Mic 좋음 + headphone (echo cancel)
|
||||
- 조용한 환경
|
||||
- Voice clear
|
||||
|
||||
→ Cheap mic = friction.
|
||||
```
|
||||
|
||||
### Etiquette
|
||||
```
|
||||
1. Listening over talking
|
||||
2. "Yes and..." over "no"
|
||||
3. Frequent driver swap
|
||||
4. Break (Pomodoro)
|
||||
5. 한 명 dominate X
|
||||
6. Personal preference 의견 X (fact / pattern)
|
||||
```
|
||||
|
||||
### When pair fails
|
||||
```
|
||||
신호:
|
||||
- 한 명 만 talk
|
||||
- Silence (장시간)
|
||||
- Frustration
|
||||
- "Just let me do it"
|
||||
|
||||
해결:
|
||||
- Take break
|
||||
- Reset goal
|
||||
- Try strong-style
|
||||
- 또는 split + sync later
|
||||
```
|
||||
|
||||
### Pair fatigue
|
||||
```
|
||||
Pair = 정신 강도 높음.
|
||||
2-4 hour / day max.
|
||||
|
||||
→ Solo time + pair time mix.
|
||||
```
|
||||
|
||||
### Junior + Senior pair
|
||||
```
|
||||
Junior driver = 학습.
|
||||
Senior 가 patient — guide question.
|
||||
|
||||
"What if X?"
|
||||
"What error case 가 있을까?"
|
||||
|
||||
→ 답 X — 질문.
|
||||
```
|
||||
|
||||
### Junior + Junior pair
|
||||
```
|
||||
둘 다 새 시도 — 위험.
|
||||
|
||||
해결:
|
||||
- Senior available (ask)
|
||||
- 작은 task
|
||||
- Frequent commit + review
|
||||
```
|
||||
|
||||
### Senior + Senior pair
|
||||
```
|
||||
복잡 / critical task.
|
||||
빠른 상호 review.
|
||||
큰 architectural decision.
|
||||
|
||||
→ Most efficient pair.
|
||||
```
|
||||
|
||||
### Pair vs solo
|
||||
```
|
||||
Pair:
|
||||
+ Quality (built-in review)
|
||||
+ Knowledge sharing
|
||||
+ 학습
|
||||
- 2x time (단순 task)
|
||||
- Energy intensive
|
||||
|
||||
Solo:
|
||||
+ Deep focus
|
||||
+ Faster (단순)
|
||||
- Knowledge silo
|
||||
- No real-time review
|
||||
```
|
||||
|
||||
→ Mix.
|
||||
|
||||
### Hybrid: pair design + solo implement
|
||||
```
|
||||
30 min pair: design + interface.
|
||||
2 hour solo: implementation.
|
||||
30 min pair: review + integrate.
|
||||
|
||||
→ Pair 의 가치 + solo 의 효율.
|
||||
```
|
||||
|
||||
### Code review vs pair
|
||||
```
|
||||
Pair: real-time, learn together.
|
||||
Review: async, 더 깊은 think.
|
||||
|
||||
→ 다른 가치. 둘 다.
|
||||
```
|
||||
|
||||
### Mob programming benefit
|
||||
```
|
||||
- 모두 학습
|
||||
- 모두 ownership
|
||||
- Knowledge sharing 강
|
||||
- Bus factor 0
|
||||
|
||||
비용:
|
||||
- 5 명 × 4 hour = 20 hour
|
||||
- Single output
|
||||
```
|
||||
|
||||
→ 학습 prioritize 시 가치.
|
||||
|
||||
### Ensemble (modern mob)
|
||||
```
|
||||
모든 팀이 1 task on 1 keyboard.
|
||||
"Driver doesn't think, navigator doesn't type."
|
||||
Swap 매 4 min.
|
||||
|
||||
→ Woody Zuill 가 popularize.
|
||||
매일 / 매주 1 day.
|
||||
```
|
||||
|
||||
### Pair manifesto / norms
|
||||
```
|
||||
1. We commit to pair (둘 다 attention)
|
||||
2. We keep it small (작은 step)
|
||||
3. We rotate driver (15-20 min)
|
||||
4. We respectful disagree
|
||||
5. We celebrate solutions
|
||||
```
|
||||
|
||||
→ Team agreement.
|
||||
|
||||
### Async pair (timezones)
|
||||
```
|
||||
Code share + comment / video:
|
||||
- 1 person 가 work + record
|
||||
- 2 person 가 watch + comment
|
||||
- Sync briefly daily
|
||||
|
||||
→ Imperfect but possible.
|
||||
```
|
||||
|
||||
### Track pair time
|
||||
```
|
||||
- Whose pair? (week 별)
|
||||
- 어떤 task?
|
||||
- 효과?
|
||||
|
||||
→ 정기 retro.
|
||||
```
|
||||
|
||||
### Pair 가 productivity (debate)
|
||||
```
|
||||
Pair:
|
||||
+ Output 가 less than 2x BUT
|
||||
+ Quality higher
|
||||
+ Learning faster
|
||||
+ Bus factor lower
|
||||
+ Less rework
|
||||
|
||||
→ Long-term productivity ↑.
|
||||
```
|
||||
|
||||
### Pair onboarding (new hire)
|
||||
```
|
||||
Week 1: Pair with senior (mentor)
|
||||
Week 2: Pair with peer
|
||||
Week 3+: Mostly solo + occasional pair
|
||||
|
||||
→ Strong onboarding.
|
||||
```
|
||||
|
||||
### Tools for pair-friendly
|
||||
```
|
||||
- Conventional naming (모두 이해)
|
||||
- Comments (즉시 context)
|
||||
- Small commits (clear progress)
|
||||
- Test first (shared understanding)
|
||||
- Monorepo (open code)
|
||||
```
|
||||
|
||||
### Anti-pattern: silent pair
|
||||
```
|
||||
"같이 앉아있지만 묵묵부답"
|
||||
= solo + 추가 person.
|
||||
|
||||
해결:
|
||||
- 매 5 min "what are you thinking?"
|
||||
- Strong-style force conversation
|
||||
- Frequent swap
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준
|
||||
| 상황 | 추천 |
|
||||
|---|---|
|
||||
| Junior onboarding | Pair (senior + junior) |
|
||||
| 복잡 bug | Pair |
|
||||
| 새 feature design | Pair (또는 mob) |
|
||||
| 단순 작업 | Solo |
|
||||
| 큰 architecture | Mob |
|
||||
| Critical security | Pair |
|
||||
| Quick prototype | Solo |
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **한 명 dominate (90% time driver)**: 다른 사람 학습 X.
|
||||
- **No swap**: fatigue + 한 perspective.
|
||||
- **Silent pair**: solo + person.
|
||||
- **Audio bad**: friction.
|
||||
- **All-day pair**: burnout. 2-4 hour max.
|
||||
- **Strong personality 매 day pair**: clash.
|
||||
- **Pair 의 metric (output, line)**: 의미 없음.
|
||||
|
||||
## 🤖 LLM 활용 힌트
|
||||
- 새 기술 / 복잡 = pair.
|
||||
- 매 15-20 min swap.
|
||||
- Tuple / Live Share remote.
|
||||
- Strong-style 가 powerful.
|
||||
|
||||
## 🔗 관련 문서
|
||||
- [[Quality_Mentoring]]
|
||||
- [[Productivity_Code_Review]]
|
||||
- [[Quality_Refactoring]]
|
||||
Reference in New Issue
Block a user