[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -1,97 +1,280 @@
|
||||
---
|
||||
id: wiki-2026-0508-collaborative-programming-pair-m
|
||||
title: "Collaborative Programming (Pair & Mob)"
|
||||
id: wiki-2026-0508-collaborative-programming
|
||||
title: Collaborative Programming (Pair & Mob)
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [P-REINFORCE-AUTO-WIKI-DEV-004]
|
||||
aliases: [pair programming, mob programming, ensemble programming, driver-navigator, real-time collaboration]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.95
|
||||
tags: [development, pair-programming, mob-programming, collaboration, synchronous-review, p-reinforce]
|
||||
confidence_score: 0.88
|
||||
verification_status: applied
|
||||
tags: [collaborative-programming, pair-programming, mob-programming, ensemble, agile, knowledge-transfer, code-review]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-01
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
language: process
|
||||
framework: Live Share / Tuple / Pop / Replit Multiplayer
|
||||
---
|
||||
|
||||
# [[Collaborative Programming (Pair & Mob)|Collaborative Programming (Pair & Mob]]
|
||||
# Collaborative Programming (Pair & Mob)
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> "코드 작성과 리뷰를 실시간으로 통합하여 피드백 루프를 극단적으로 단축시키고, 집단 지성을 통해 고난도 문제 해결과 지식 전파를 가속화하는 동기식 협업 모델."
|
||||
## 매 한 줄
|
||||
> **"매 real-time review + 매 collective knowledge"**. 매 PR 의 lag 의 X — 매 instant. 매 pair (2) / mob (3+, ensemble). 매 modern: 매 LLM-aided pair (Cursor pair with AI). 매 AI 시대 의 still relevant — 매 design decision 의 human collective.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
동기식 협업 프로그래밍은 비동기 리뷰의 지연을 제거하고 코드의 즉각적인 무결성을 확보합니다.
|
||||
## 매 핵심
|
||||
|
||||
1. **Pair Programming**:
|
||||
* **Driver & Navigator**: 한 명은 코드를 작성(Driver)하고, 다른 한 명은 로직과 설계 방향을 검토(Navigator)합니다.
|
||||
* **실시간 피드백**: 코드 작성 시점에 즉시 리뷰가 이루어지므로, PR 대기 시간 없이 높은 신뢰도의 코드를 생산합니다.
|
||||
2. **Mob Programming**:
|
||||
* 팀 전체가 하나의 컴퓨터로 하나의 문제를 해결합니다.
|
||||
* 아키텍처 결정이나 익숙하지 않은 복잡한 도메인을 다룰 때 지식 사일로를 제거하는 데 탁월합니다.
|
||||
3. **지식 전파 및 온보딩**:
|
||||
* 시니어의 암묵지 전수와 팀 컨벤션의 자연스러운 체득을 돕는 강력한 교육 도구로 활용됩니다.
|
||||
### Pair Programming
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **리소스와 피로도**: 두 명 이상의 개발자가 동시에 투입되므로 자원 소모가 크며, 높은 집중력 요구로 인해 번아웃이 발생할 수 있습니다. 60~90분 단위의 타임박스 세션과 정기적인 휴식 정책이 필수입니다.
|
||||
- **하이브리드 전략**: 모든 작업에 적용하기보다 고위험군(복잡한 아키텍처, 보안 민감 기능)에 집중하고, 단순 작업은 비동기 리뷰로 처리하는 선별적 적용이 효율적입니다.
|
||||
#### Driver-Navigator
|
||||
- **Driver**: 매 keyboard, 매 tactical.
|
||||
- **Navigator**: 매 strategic, 매 review.
|
||||
- **Switch**: 매 5-25 분.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- Asynchronous Code Review: 동기식 모델과 대비되는 일반적 방식.
|
||||
- Knowledge Sharing: 협업을 통한 지식 전파 효과.
|
||||
- Shift-Left Security: 작성 시점에 보안을 검토하는 최전선 전략.
|
||||
- [[Agile Development|Agile Development]]: 빠른 피드백과 소통을 중시하는 철학적 배경.
|
||||
- Pull Request Workflow: 최종 결과물이 시스템에 통합되는 통로.
|
||||
---
|
||||
#### Ping-pong (TDD-paired)
|
||||
- A 매 test, B 매 implement.
|
||||
- 매 switch.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
#### Strong-style
|
||||
- "For an idea to go from your head into the computer, it MUST go through someone else's hands."
|
||||
- → 매 navigator 의 thinking, 매 driver 의 typing 만.
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
### Mob (Ensemble) Programming
|
||||
- 매 3+ developer + 매 1 keyboard.
|
||||
- 매 매 short rotation (4-10 분).
|
||||
- 매 모든 brain 의 active.
|
||||
- 매 high-stakes / complex problem.
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### 매 benefit
|
||||
1. **Real-time review**: 매 0-lag.
|
||||
2. **Knowledge transfer**: 매 senior 의 tacit.
|
||||
3. **Reduced bus factor**.
|
||||
4. **Onboarding**: 매 fast.
|
||||
5. **Decision quality**.
|
||||
6. **Less context switch** (one task focused).
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### 매 cost
|
||||
1. **Resource**: 매 N person 의 1 task.
|
||||
2. **Fatigue**: 매 high cognitive load.
|
||||
3. **Personality fit**.
|
||||
4. **Remote 의 어려움** (overcomeable).
|
||||
5. **Boring task 의 over-engineer 의 risk**.
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### 매 effective use case
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
#### Pair
|
||||
- Complex bug.
|
||||
- New feature design.
|
||||
- Onboarding (junior + senior).
|
||||
- Cross-functional (frontend + backend).
|
||||
- Refactoring critical area.
|
||||
- Security-sensitive code.
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
#### Mob
|
||||
- Architecture decision.
|
||||
- Domain modeling.
|
||||
- New dev environment setup.
|
||||
- Big incident response.
|
||||
- Knowledge crystallization.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
### 매 not effective
|
||||
- 매 simple CRUD.
|
||||
- 매 documentation.
|
||||
- 매 mechanical refactor.
|
||||
- 매 deep flow individual work.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
### 매 modern tool
|
||||
- **VS Code Live Share**: 매 Microsoft.
|
||||
- **Tuple**: 매 macOS pair.
|
||||
- **Pop**: 매 web-based.
|
||||
- **Replit Multiplayer**: 매 cloud IDE.
|
||||
- **JetBrains Code With Me**: 매 IntelliJ family.
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
### 매 LLM-aided pair (2024+)
|
||||
- 매 Cursor: 매 AI 의 pair.
|
||||
- 매 Copilot: 매 AI 의 navigator hint.
|
||||
- 매 Cline / Aider: 매 agentic.
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
→ 매 human-AI pair 의 새 form.
|
||||
|
||||
```text
|
||||
# TODO
|
||||
### 매 timebox / cadence
|
||||
|
||||
#### Pair
|
||||
- 매 25 min on / 5 min break (Pomodoro).
|
||||
- 매 4-6 hour / day max.
|
||||
- 매 2 person 의 stable cadence.
|
||||
|
||||
#### Mob
|
||||
- 매 5-10 min driver rotation.
|
||||
- 매 60 min session + 10 min break.
|
||||
- 매 1 day max with breaks.
|
||||
|
||||
## 💻 패턴 (응용)
|
||||
|
||||
### Pair session (Live Share)
|
||||
```bash
|
||||
# 매 host
|
||||
code . # 매 VS Code
|
||||
# 매 Live Share extension
|
||||
# 매 "Start Collaboration Session"
|
||||
# 매 share link
|
||||
|
||||
# 매 guest
|
||||
# 매 join via link
|
||||
# 매 follow / lead 의 toggle
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
### Mob rotation timer (web)
|
||||
```js
|
||||
// 매 mob rotation timer
|
||||
class MobTimer {
|
||||
constructor(participants, intervalMin = 5) {
|
||||
this.participants = participants;
|
||||
this.interval = intervalMin * 60 * 1000;
|
||||
this.currentDriver = 0;
|
||||
}
|
||||
|
||||
start() {
|
||||
this.timerId = setInterval(() => this.rotate(), this.interval);
|
||||
this.notifyDriver(this.participants[this.currentDriver]);
|
||||
}
|
||||
|
||||
rotate() {
|
||||
this.currentDriver = (this.currentDriver + 1) % this.participants.length;
|
||||
this.notifyDriver(this.participants[this.currentDriver]);
|
||||
}
|
||||
|
||||
notifyDriver(name) {
|
||||
notify(`${name} is now driving for ${this.interval / 60000} min`);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
### Strong-style discipline
|
||||
```
|
||||
Rule: "For an idea to go from your head into the computer,
|
||||
it MUST go through someone else's hands."
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
Driver: 매 type 만 — 매 idea 의 X.
|
||||
Navigator: 매 think 만 — 매 keyboard 의 X.
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
Switch driver 매 25 min.
|
||||
```
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
### Ping-pong TDD
|
||||
```
|
||||
Person A:
|
||||
- Write a failing test.
|
||||
- Pass keyboard.
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
Person B:
|
||||
- Write minimum code to pass.
|
||||
- Refactor.
|
||||
- Write next failing test.
|
||||
- Pass keyboard.
|
||||
|
||||
Person A:
|
||||
- Pass test, refactor, write next test.
|
||||
- ...
|
||||
```
|
||||
|
||||
### LLM-aided pair (Cursor)
|
||||
```
|
||||
Human (driver / navigator):
|
||||
- High-level intent.
|
||||
- Architecture decision.
|
||||
- Final review.
|
||||
|
||||
AI (Cursor):
|
||||
- Code generation suggestion.
|
||||
- Refactor proposal.
|
||||
- Test scaffolding.
|
||||
- Documentation draft.
|
||||
|
||||
Human-AI handoff every few cycles.
|
||||
Human always commits — AI doesn't.
|
||||
```
|
||||
|
||||
### Session retro (10 min)
|
||||
```yaml
|
||||
session_retro:
|
||||
- what_worked: '...'
|
||||
- what_didnt: '...'
|
||||
- knowledge_transferred:
|
||||
- 'X learned about Y'
|
||||
- 'Z explained the W pattern'
|
||||
- decisions_made:
|
||||
- 'Use library X over Y because Z'
|
||||
- next_steps:
|
||||
- '...'
|
||||
```
|
||||
|
||||
### Pair / mob effectiveness measurement
|
||||
```python
|
||||
def measure_collab_value(pair_sessions, control_sessions):
|
||||
"""매 RCT-light comparison."""
|
||||
return {
|
||||
'bug_density_pair': bug_count(pair_sessions) / loc(pair_sessions),
|
||||
'bug_density_solo': bug_count(control_sessions) / loc(control_sessions),
|
||||
'review_time_pair': median([s.review_time for s in pair_sessions]),
|
||||
'review_time_solo': median([s.review_time for s in control_sessions]),
|
||||
'lead_time_pair': median([s.lead_time for s in pair_sessions]),
|
||||
'lead_time_solo': median([s.lead_time for s in control_sessions]),
|
||||
'knowledge_transfer_score': survey([s.team for s in pair_sessions]),
|
||||
}
|
||||
```
|
||||
|
||||
### Hybrid policy (decision tree)
|
||||
```python
|
||||
def should_pair(task):
|
||||
if task.complexity >= 'high': return True
|
||||
if task.security_sensitive: return True
|
||||
if task.crosses_module_boundary: return True
|
||||
if task.assigned_to_junior and team.has_senior_available(): return True
|
||||
if task.architecture_decision: return 'mob' # 매 mob 의 better
|
||||
return False # 매 solo + async review
|
||||
```
|
||||
|
||||
## 🤔 결정 기준
|
||||
| 상황 | Mode |
|
||||
|---|---|
|
||||
| Complex bug | Pair |
|
||||
| Architecture | Mob |
|
||||
| Onboarding | Pair (senior + junior) |
|
||||
| Routine CRUD | Solo + async review |
|
||||
| Documentation | Solo |
|
||||
| Cross-functional | Pair |
|
||||
| Incident response | Mob |
|
||||
| Mechanical refactor | Solo |
|
||||
|
||||
**기본값**: 매 hybrid — 매 pair / mob 의 high-stakes, 매 async 의 routine.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Software-Engineering]] · [[Agile]] · [[Knowledge-Management]]
|
||||
- 변형: [[Pair-Programming]] · [[Mob-Programming]] · [[Ping-Pong-TDD]] · [[Strong-Style-Pair]]
|
||||
- 응용: [[Live-Share]] · [[Tuple]] · [[Pop]] · [[Cursor]] (AI pair)
|
||||
- Adjacent: [[Quality_Code_Review_Modern]] · [[Asset-Specific-Knowledge]] · [[Cognitive Constraints]] · [[Codebase_Onboarding_Guide]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 team practice. 매 onboarding. 매 critical work. 매 AI pair design.
|
||||
**언제 X**: 매 routine work (overhead). 매 introvert-only team (force X).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **모든 task 의 pair**: 매 cost.
|
||||
- **No rotation in mob**: 매 1 driver 만.
|
||||
- **No timebox**: 매 burnout.
|
||||
- **No retro**: 매 learning lose.
|
||||
- **Pair 의 unequal participation** (silent navigator): 매 cost X.
|
||||
- **AI pair 의 sole reliance**: 매 human collective lose.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Williams pair programming research, Zuill mob programming, GitHub Engineering case studies).
|
||||
- 신뢰도 A.
|
||||
- Related: [[Quality_Code_Review_Modern]] · [[Codebase_Onboarding_Guide]] · [[Cognitive Constraints]] · [[Asset-Specific-Knowledge]] · [[Branching Strategies]].
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — pair / mob style + LLM pair + 매 timer / TDD / measurement code |
|
||||
|
||||
Reference in New Issue
Block a user