Split View: SW 개발 방법론과 Vibe 코딩: 전통적 방법론에서 AI 보조 개발까지 완전 가이드
SW 개발 방법론과 Vibe 코딩: 전통적 방법론에서 AI 보조 개발까지 완전 가이드
SW 개발 방법론과 Vibe 코딩: 전통적 방법론에서 AI 보조 개발까지 완전 가이드
소프트웨어 개발 방법론은 수십 년에 걸쳐 진화해 왔습니다. 1970년대의 Waterfall에서 2001년 Agile 선언, 그리고 2025년 이후 AI 보조 개발(Vibe Coding)까지 — 각 시대마다 더 나은 소프트웨어를 만들기 위한 끊임없는 혁신이 있었습니다. 이 가이드에서는 전통적 방법론의 핵심 원리를 이해하고, AI를 개발 생명주기 전반에 통합하는 실전 전략을 다룹니다.
1. 전통적 SW 개발 방법론
1.1 Waterfall (폭포수 모델)
Waterfall은 Winston Royce가 1970년에 제안한 순차적 개발 방법론입니다. 각 단계가 완료된 후에야 다음 단계로 진행합니다.
단계별 흐름:
요구사항 분석 → 시스템 설계 → 구현 → 통합/테스팅 → 운영/유지보수
장점:
- 명확한 단계와 산출물 정의
- 문서화가 철저해 유지보수 용이
- 고정된 범위와 예산 관리에 적합
- 규제 산업(의료, 항공우주)에서 여전히 활용
단점:
- 요구사항 변경에 매우 경직됨
- 테스팅이 후반부에 집중되어 결함 발견이 늦음
- 고객 피드백 반영 시점이 너무 늦음
- 대형 프로젝트에서 실패율이 높음 (CHAOS Report 기준 약 70%)
Waterfall이 적합한 상황:
- 요구사항이 완전히 확정된 단기 프로젝트
- 규제/컴플라이언스 요구가 강한 도메인
- 외주 계약 기반 고정 범위 프로젝트
1.2 V-Model
V-Model은 Waterfall의 변형으로, 각 개발 단계에 대응하는 테스트 단계를 명시적으로 매핑합니다.
요구사항 분석 ────────────── 인수 테스트
시스템 설계 ──────────── 시스템 테스트
아키텍처 설계 ──────── 통합 테스트
상세 설계 ────────── 단위 테스트
구현 (코딩)
V-Model의 핵심은 "검증(Verification)과 확인(Validation)"입니다. 왼쪽 내리막은 개발 활동, 오른쪽 오르막은 테스트 활동입니다. 임베디드 시스템, 의료기기 소프트웨어 개발에 널리 사용됩니다.
1.3 Spiral 모델
Barry Boehm이 1986년에 제안한 Spiral 모델은 리스크 분석을 중심에 두는 반복적 방법론입니다.
4개 사분면 반복:
- 목표/대안/제약 식별
- 리스크 평가 및 해결
- 개발 및 검증
- 다음 단계 계획
각 나선(Spiral)은 이전보다 더 구체적인 산출물을 만들어 냅니다. 리스크가 높은 대형 정부/국방 프로젝트에 적합하지만, 복잡성과 비용이 높습니다.
2. Agile 방법론
2.1 Agile 선언의 탄생
2001년 2월, 17명의 소프트웨어 개발자들이 유타주 스노우버드에 모여 Agile 소프트웨어 개발 선언을 작성했습니다.
4가지 핵심 가치:
- 프로세스와 도구보다 개인과 상호작용
- 포괄적인 문서보다 작동하는 소프트웨어
- 계약 협상보다 고객과의 협력
- 계획 준수보다 변화에 대응
12가지 원칙 중 핵심:
- 고객 만족을 위한 지속적인 소프트웨어 배포
- 짧은 주기(2주~2개월)로 작동하는 소프트웨어 제공
- 기술적 탁월성과 좋은 설계에 지속적 관심
- 단순성 — 하지 않아도 되는 일의 양을 최대화하는 기술
2.2 Scrum 프레임워크
Scrum은 가장 널리 사용되는 Agile 프레임워크입니다. Ken Schwaber와 Jeff Sutherland가 1990년대에 개발했습니다.
Scrum의 세 가지 기둥:
- 투명성(Transparency): 프로세스와 작업을 모두에게 공개
- 검사(Inspection): 진행 상황을 정기적으로 검토
- 적응(Adaptation): 문제 발견 시 즉각적으로 조정
Scrum 팀 구성:
- Product Owner(PO): 백로그 관리, 비즈니스 가치 최대화
- Scrum Master: 팀 코치, 장애물 제거, 프로세스 수호
- Development Team: 자기 조직적, 3~9명의 개발자
Scrum Ceremonies (이벤트):
| 이벤트 | 주기 | 목적 | 시간 제한 |
|---|---|---|---|
| Sprint | 1~4주 | 개발 주기 | - |
| Sprint Planning | Sprint 시작 | 목표와 작업 선정 | 8시간/month |
| Daily Scrum | 매일 | 동기화, 장애물 식별 | 15분 |
| Sprint Review | Sprint 종료 | 완료 작업 데모 | 4시간/month |
| Sprint Retrospective | Sprint 종료 | 프로세스 개선 | 3시간/month |
Scrum Artifacts (산출물):
- Product Backlog: 모든 요구사항의 우선순위 목록 (PO 소유)
- Sprint Backlog: 현재 Sprint에서 완료할 작업 목록
- Increment: Sprint 완료 시 나오는 잠재적 릴리즈 가능 제품
Definition of Done (완료의 정의) 예시:
- 코드 리뷰 완료
- 단위 테스트 통과 (커버리지 80% 이상)
- 통합 테스트 통과
- 문서 업데이트
- 스테이징 환경 배포 성공
2.3 Kanban
Kanban은 Toyota의 생산 시스템에서 유래한 시각적 워크플로우 관리 방법론입니다.
핵심 원칙:
- 현재 하는 일을 시각화
- 진행 중 작업(WIP) 제한
- 흐름 관리
- 명시적 프로세스 정책
- 피드백 루프 구현
- 협력적 개선
Kanban 보드 예시:
Backlog | Ready | In Progress (WIP: 3) | Review | Done
--------|-------|----------------------|--------|------
Task 5 |Task 4 | Task 3 |Task 2 |Task 1
Task 6 | | Task 7 | |
| | Task 8 | |
Scrum vs Kanban:
| 항목 | Scrum | Kanban |
|---|---|---|
| 주기 | 고정 Sprint | 연속 흐름 |
| 변경 | Sprint 내 변경 제한 | 언제든 변경 가능 |
| 역할 | 명확한 역할 | 역할 없음 |
| 측정 | 속도(Velocity) | 사이클 타임, 처리량 |
| 적합한 팀 | 새 기능 개발 | 유지보수, 운영 |
2.4 SAFe (Scaled Agile Framework)
SAFe는 대규모 조직에서 Agile을 적용하기 위한 프레임워크입니다.
4가지 레벨:
- Team Level: Scrum/Kanban 팀 (5~11명)
- Program Level: Agile Release Train (ART, 50~125명)
- Large Solution Level: 복수 ART 조율
- Portfolio Level: 전략과 투자 결정
Program Increment (PI) Planning:
- 8~12주 주기
- 전체 ART가 참여하는 2일 이벤트
- 다음 PI의 목표와 의존성 시각화
3. 요구사항 단계와 Vibe 코딩
3.1 User Stories + AI
전통적 User Story 형식:
As a [role], I want [feature], so that [benefit].
AI를 활용한 User Story 작성:
프롬프트 예시:
다음 비즈니스 요구사항에서 User Story를 작성해줘:
"온라인 쇼핑몰에서 고객이 구매 이력을 기반으로 추천 상품을 받고 싶어한다"
다음 형식으로 작성해:
- User Story (As/I want/So that)
- Acceptance Criteria (Given/When/Then)
- Story Points 추정
- 잠재적 엣지 케이스 5개
AI가 생성한 User Story 예시:
User Story: 맞춤형 상품 추천
As a 반복 구매 고객,
I want 내 구매 이력을 기반한 상품 추천을 홈 화면에서 보고 싶다,
So that 관심 있는 상품을 빠르게 발견할 수 있다.
Acceptance Criteria:
- Given 3회 이상 구매한 고객이
- When 홈 화면에 접속하면
- Then 구매 이력 기반 상위 10개 추천 상품이 표시된다
- And 각 추천에는 "왜 추천되었는지" 이유가 표시된다
- And 관심 없음 버튼으로 해당 추천을 숨길 수 있다
3.2 Event Storming with Claude
Event Storming은 Alberto Brandolini가 개발한 도메인 탐색 워크숍 기법입니다. Claude와 함께 디지털 Event Storming을 진행할 수 있습니다.
워크숍 진행 방식:
1단계: 도메인 이벤트 식별 (오렌지 포스트잇)
→ Claude에게 "이커머스 주문 도메인에서 발생하는 모든 도메인 이벤트를 나열해줘"
2단계: 커맨드 식별 (파란 포스트잇)
→ "각 이벤트를 발생시키는 커맨드는 무엇인가?"
3단계: 액터 식별 (노란 포스트잇)
→ "각 커맨드를 실행하는 액터(사용자/시스템)는?"
4단계: 집합체(Aggregate) 식별 (노란 큰 포스트잇)
→ "관련 이벤트와 커맨드를 묶는 집합체는?"
5단계: 경계 컨텍스트(Bounded Context) 정의
→ "집합체들을 논리적 경계로 그룹화"
Claude 프롬프트 예시:
이커머스 플랫폼의 주문 처리 도메인에 대한 Event Storming을 진행해줘.
다음 형식으로 출력해:
도메인 이벤트 (과거형):
- OrderPlaced (주문됨)
- PaymentProcessed (결제처리됨)
...
각 이벤트에 대해:
1. 트리거 커맨드
2. 선행 조건
3. 후행 결과
4. 관련 집합체
3.3 CLAUDE.md로 컨텍스트 제공
CLAUDE.md는 Claude가 프로젝트를 처음 만났을 때 읽는 컨텍스트 파일입니다. 요구사항 단계부터 잘 작성된 CLAUDE.md는 AI 보조 개발의 품질을 크게 향상시킵니다.
CLAUDE.md 작성 예시:
# 프로젝트 컨텍스트
## 프로젝트 개요
이커머스 플랫폼 백엔드 서비스 (Node.js + TypeScript)
## 기술 스택
- Runtime: Node.js 20, TypeScript 5.3
- Framework: NestJS 10
- Database: PostgreSQL 16 (TypeORM), Redis 7
- Message Queue: RabbitMQ
- Testing: Jest, Supertest
## 아키텍처 결정
- DDD (Domain-Driven Design) 적용
- CQRS 패턴 사용
- 이벤트 소싱 적용 (주문 집합체)
## 코딩 컨벤션
- 함수형 프로그래밍 선호
- 불변 데이터 구조 사용
- 에러 처리: Result 타입 패턴 (neverthrow 라이브러리)
## 금지 사항
- any 타입 사용 금지
- console.log 대신 winston logger 사용
- 직접 DB 쿼리 금지 (Repository 패턴 사용)
## 테스트 요구사항
- 단위 테스트 커버리지 90% 이상
- 모든 public API에 통합 테스트 필수
- E2E 테스트: 핵심 결제 플로우
## 현재 작업 컨텍스트
Sprint 3: 추천 시스템 구현
- User Story: US-123 구매 이력 기반 추천
- 기술 부채: 레거시 ProductService 리팩토링 필요
4. 설계 단계: AI 보조 설계
4.1 Architecture Decision Records (ADRs)
ADR은 중요한 아키텍처 결정과 그 이유를 기록하는 문서입니다. AI와 함께 ADR을 작성하면 더 체계적인 의사결정이 가능합니다.
ADR 템플릿:
# ADR-001: 데이터베이스 선택
## 상태
승인됨 (2026-03-17)
## 컨텍스트
추천 시스템을 위한 데이터베이스가 필요함.
요구사항:
- 초당 10,000 읽기 요청 처리
- 상품 간 관계 그래프 쿼리
- 실시간 업데이트
## 결정
PostgreSQL + pgvector 확장을 선택
## 대안들
1. MongoDB: 유연한 스키마이나 복잡한 관계 쿼리 약함
2. Neo4j: 그래프 DB이나 팀 경험 부족, 운영 복잡성
3. Redis + PostgreSQL: 캐싱 레이어 추가로 성능 보완
## 결과
- 긍정: pgvector로 벡터 유사도 검색 가능
- 긍정: 팀의 PostgreSQL 경험 활용
- 부정: 초대형 그래프 쿼리 시 성능 한계
- 부정: pgvector 설정 및 인덱싱 학습 필요
Claude를 활용한 ADR 작성:
우리 시스템의 메시지 큐 선택에 대한 ADR을 작성해줘.
요구사항:
- 초당 50,000 메시지 처리
- At-least-once 전달 보장
- 메시지 재처리 기능
- 팀 규모: 5명
후보: Kafka, RabbitMQ, AWS SQS
각 대안의 장단점과 우리 상황에 맞는 최적 선택을 추천해줘.
4.2 AI 보조 설계 리뷰
다음 클래스 다이어그램을 리뷰해줘:
[다이어그램 붙여넣기]
확인 사항:
1. SOLID 원칙 위반 여부
2. 순환 의존성
3. 인터페이스 분리 기회
4. DDD 관점에서 집합체 경계 적절성
5. 개선 제안
5. 구현 단계: Vibe 코딩 실전
5.1 AI 보조 TDD (Test-Driven Development)
전통적 TDD: Red → Green → Refactor
AI 보조 TDD 흐름:
1. 요구사항을 Claude에게 설명
2. Claude가 실패하는 테스트 코드 생성
3. 개발자가 테스트 검증 및 수정
4. Claude가 테스트를 통과하는 최소 구현 생성
5. 개발자와 Claude가 함께 리팩토링
예시 — 추천 서비스 TDD:
// 1단계: Claude가 생성한 실패 테스트
describe('RecommendationService', () => {
describe('getPersonalizedRecommendations', () => {
it('should return top 10 recommendations based on purchase history', async () => {
// Arrange
const userId = 'user-123'
const purchaseHistory = [
{ productId: 'prod-1', category: 'Electronics', purchasedAt: new Date() },
{ productId: 'prod-2', category: 'Electronics', purchasedAt: new Date() },
]
mockPurchaseRepository.findByUserId.mockResolvedValue(purchaseHistory)
mockProductRepository.findSimilar.mockResolvedValue(generateMockProducts(15))
// Act
const result = await service.getPersonalizedRecommendations(userId)
// Assert
expect(result).toHaveLength(10)
expect(result[0]).toMatchObject({
productId: expect.any(String),
score: expect.any(Number),
reason: expect.any(String),
})
expect(mockPurchaseRepository.findByUserId).toHaveBeenCalledWith(userId)
})
it('should return popular products when no purchase history exists', async () => {
mockPurchaseRepository.findByUserId.mockResolvedValue([])
mockProductRepository.findPopular.mockResolvedValue(generateMockProducts(10))
const result = await service.getPersonalizedRecommendations('new-user')
expect(result).toHaveLength(10)
expect(mockProductRepository.findPopular).toHaveBeenCalled()
})
it('should exclude already purchased products from recommendations', async () => {
const purchasedProductId = 'prod-already-bought'
mockPurchaseRepository.findByUserId.mockResolvedValue([
{ productId: purchasedProductId, category: 'Books' },
])
const recommendations = generateMockProducts(12)
recommendations[0].productId = purchasedProductId
mockProductRepository.findSimilar.mockResolvedValue(recommendations)
const result = await service.getPersonalizedRecommendations('user-123')
expect(result.map((r) => r.productId)).not.toContain(purchasedProductId)
})
})
})
5.2 AI와 페어 프로그래밍
효과적인 AI 페어 프로그래밍 패턴:
패턴 1: 드라이버-네비게이터
- 개발자가 드라이버(코드 작성)
- Claude가 네비게이터(방향 제시, 리뷰)
패턴 2: 핑퐁 TDD
- Claude가 테스트 작성
- 개발자가 구현
- Claude가 리팩토링 제안
- 개발자가 수락/거절
패턴 3: 탐험적 프로그래밍
- Claude가 빠른 프로토타입 생성
- 개발자가 실험하고 학습
- 함께 프로덕션 수준으로 개선
5.3 Claude를 활용한 코드 리뷰
다음 PR을 리뷰해줘:
[코드 붙여넣기]
리뷰 기준:
1. 버그 및 엣지 케이스
2. 성능 이슈 (N+1 쿼리, 메모리 누수)
3. 보안 취약점 (SQL 인젝션, XSS, 인증/인가)
4. 코딩 컨벤션 (CLAUDE.md 기준)
5. 테스트 커버리지
6. 가독성 및 유지보수성
각 이슈에 대해:
- 심각도: Critical/Major/Minor
- 개선 코드 예시
- 이유 설명
6. 테스팅 단계: AI 기반 테스트 자동화
6.1 AI 생성 테스트 케이스
동등 분할 및 경계값 분석 자동화:
다음 함수에 대한 포괄적인 테스트 케이스를 생성해줘:
function calculateShippingFee(weight: number, distance: number, isPremium: boolean): number
비즈니스 규칙:
- 무게 0~1kg: 기본 요금 3000원
- 무게 1~5kg: kg당 500원 추가
- 무게 5kg 초과: 전체 20% 추가
- 거리 100km 초과: 1000원 추가
- 프리미엄 회원: 10% 할인
- 무료 배송 조건: 프리미엄 + 10kg 미만
테스트 케이스 생성 시:
- 경계값 분석 적용
- 동등 분할 클래스 식별
- 음수, 0, 극단값 포함
- 복합 조건 테스트
- Jest 형식으로 작성
6.2 뮤테이션 테스팅
뮤테이션 테스팅은 테스트의 품질을 측정하는 방법입니다. 코드에 의도적인 버그(뮤턴트)를 주입해 테스트가 이를 잡아내는지 확인합니다.
Stryker.js 설정:
{
"mutate": ["src/**/*.ts", "!src/**/*.spec.ts"],
"testRunner": "jest",
"reporters": ["html", "clear-text", "progress"],
"thresholds": {
"high": 80,
"low": 60,
"break": 50
}
}
Claude를 활용한 뮤테이션 분석:
다음 뮤테이션 테스팅 결과를 분석하고 생존한 뮤턴트를 잡는 테스트를 추가해줘:
생존한 뮤턴트:
1. Line 45: `>` 를 `>=` 로 변경 → 테스트가 감지 못함
2. Line 72: `&&` 를 `||` 로 변경 → 테스트가 감지 못함
현재 테스트 코드:
[테스트 코드 붙여넣기]
6.3 속성 기반 테스팅 (Property-Based Testing)
import fc from 'fast-check'
describe('ShippingFee property-based tests', () => {
it('premium members always pay less than or equal to regular members', () => {
fc.assert(
fc.property(
fc.float({ min: 0.1, max: 100 }),
fc.integer({ min: 1, max: 1000 }),
(weight, distance) => {
const regularFee = calculateShippingFee(weight, distance, false)
const premiumFee = calculateShippingFee(weight, distance, true)
return premiumFee <= regularFee
}
)
)
})
it('shipping fee is always positive', () => {
fc.assert(
fc.property(
fc.float({ min: 0, max: 1000 }),
fc.integer({ min: 0, max: 10000 }),
fc.boolean(),
(weight, distance, isPremium) => {
return calculateShippingFee(weight, distance, isPremium) >= 0
}
)
)
})
})
7. CLAUDE.md 작성 완전 가이드
효과적인 CLAUDE.md는 AI 보조 개발의 품질을 결정짓는 핵심 요소입니다. 다음 템플릿을 참고하세요.
# 프로젝트명 - Claude 컨텍스트 파일
## 프로젝트 개요
- 목적: [한 문장 설명]
- 단계: [MVP/Beta/Production]
- 팀 규모: [n명]
- 주요 도메인: [이커머스/핀테크/헬스케어 등]
## 기술 스택
### Backend
- Language: TypeScript 5.3 (strict mode)
- Runtime: Node.js 20 LTS
- Framework: NestJS 10
- ORM: TypeORM 0.3
- Database: PostgreSQL 16
### Frontend
- Framework: Next.js 14 (App Router)
- Styling: Tailwind CSS 3.4
- State: Zustand 4
### Infrastructure
- Container: Docker + Kubernetes
- CI/CD: GitHub Actions
- Cloud: AWS (EKS, RDS, ElastiCache)
## 아키텍처
- 패턴: DDD + CQRS + Event Sourcing
- 서비스 분리: 모놀리식 (모듈러 모놀리스)
- API: REST + WebSocket (실시간 알림)
## 코딩 규칙
### 필수 준수
- TypeScript strict 모드: any 타입 절대 금지
- 함수 길이: 30줄 이하 유지
- 중첩 깊이: 3단계 이하
- 에러 처리: Result 패턴 (neverthrow)
- 로깅: winston logger (console.log 금지)
### 명명 규칙
- 클래스: PascalCase
- 함수/변수: camelCase
- 상수: UPPER_SNAKE_CASE
- 파일: kebab-case.ts
- 테스트 파일: \*.spec.ts
### 디렉토리 구조
src/ modules/ order/ domain/ entities/ value-objects/ events/ application/ commands/ queries/ infrastructure/ repositories/ presentation/ controllers/ dtos/
## 테스트 전략
- 단위 테스트: 도메인 로직 (커버리지 90%)
- 통합 테스트: API 엔드포인트 (커버리지 80%)
- E2E: 핵심 비즈니스 플로우 3개
- 뮤테이션 테스트: 뮤턴트 생존율 20% 이하
## 현재 Sprint 컨텍스트
Sprint 3 (2026-03-10 ~ 2026-03-24)
목표: 추천 시스템 v1 출시
진행 중:
- US-123: 구매 이력 기반 추천 API (담당: 김개발)
- US-124: 실시간 추천 업데이트 WebSocket (담당: 이개발)
완료:
- US-121: 추천 알고리즘 기초 구현
- US-122: 추천 데이터 파이프라인
기술 부채:
- ProductService 레거시 코드 리팩토링 필요
- 테스트 없는 UserRepository 커버리지 향상 필요
## 금지 사항
- 직접 SQL 쿼리 (Repository 패턴 사용)
- 동기 파일 I/O (fs.readFileSync 등)
- 하드코딩된 시크릿 (환경 변수 사용)
- 무분별한 try-catch (에러 타입 명시)
8. 실전 예시: Next.js 앱 Vibe 코딩 워크플로우
8.1 프로젝트 초기화
# 1단계: 프로젝트 생성
npx create-next-app@latest my-shop --typescript --tailwind --app
# 2단계: CLAUDE.md 생성 (첫 번째 Claude 프롬프트)
CLAUDE.md 초기 설정 프롬프트:
Next.js 14 App Router 기반 이커머스 프로젝트를 시작합니다.
다음 요구사항으로 CLAUDE.md를 생성해줘:
- 상품 목록, 상세, 장바구니, 결제 기능
- TypeScript strict 모드
- Tailwind CSS + shadcn/ui
- Zustand 상태관리
- React Query v5 서버 상태관리
- Prisma + PostgreSQL
- NextAuth.js 인증
- Vitest + Testing Library 테스트
팀 컨벤션:
- 컴포넌트: shadcn/ui 기반 원자적 설계
- 서버 컴포넌트 기본, 클라이언트 컴포넌트 최소화
- 에러 바운더리 + Suspense 패턴
8.2 기능 개발 플로우
1단계: User Story 정의
US-001: 장바구니에 상품 추가
As a 쇼핑객
I want 상품 상세 페이지에서 장바구니에 상품을 추가하고 싶다
So that 나중에 한번에 구매할 수 있다
Acceptance Criteria:
- Given 상품 상세 페이지에서
- When "장바구니 담기" 버튼을 클릭하면
- Then 선택한 옵션(사이즈, 색상)과 수량이 장바구니에 추가된다
- And 장바구니 아이콘에 수량이 업데이트된다
- And 이미 담긴 상품은 수량이 증가한다
2단계: 구현 요청
위 User Story를 구현해줘.
기술 요구사항:
- Zustand store에 cartSlice 추가
- Server Action으로 장바구니 서버 동기화
- Optimistic Update 적용
- 재고 체크 (useQuery로 실시간)
- 에러 처리: 재고 부족, 네트워크 오류
- 애니메이션: 장바구니 아이콘 bounce
파일 구조:
- store/cartStore.ts
- components/product/AddToCartButton.tsx
- app/actions/cart.ts
- hooks/useCart.ts
3단계: 테스트 작성
위 구현에 대한 테스트를 작성해줘:
1. cartStore 단위 테스트 (Vitest)
2. AddToCartButton 컴포넌트 테스트 (Testing Library)
3. cart Server Action 통합 테스트
4. 속성 기반 테스트 (재고 제약 조건)
퀴즈로 배우기
Q1: Waterfall과 Agile의 근본적인 차이점은?
정답: Waterfall은 단계가 순차적으로 진행되며 변경이 어렵고, Agile은 짧은 반복 주기(Sprint)로 변경에 유연하게 대응합니다.
설명: Waterfall에서는 요구사항 단계가 완전히 끝난 뒤 설계 단계가 시작되므로, 설계 단계에서 요구사항을 변경하면 막대한 비용이 발생합니다. 반면 Agile은 2~4주 Sprint마다 작동하는 소프트웨어를 배포하므로, 고객 피드백을 빠르게 반영할 수 있습니다. Agile 선언의 핵심 가치는 "계획 준수보다 변화에 대응"입니다.
Q2: Scrum의 세 가지 역할과 각각의 책임은?
정답: Product Owner(백로그 우선순위 관리), Scrum Master(팀 코치 및 장애물 제거), Development Team(자기 조직적 개발)입니다.
설명: Product Owner는 비즈니스 가치를 최대화하기 위해 Product Backlog를 관리하고 우선순위를 결정합니다. Scrum Master는 팀이 Scrum을 올바르게 실천하도록 코칭하고 조직적 장애물을 제거합니다. Development Team은 Sprint 내에서 자기 조직적으로 작업을 분배하고 실행합니다. 중요한 점은 Scrum Master는 팀의 관리자가 아닌 서번트 리더입니다.
Q3: CLAUDE.md에 포함해야 할 핵심 내용 5가지는?
정답: 기술 스택, 아키텍처 결정, 코딩 컨벤션, 현재 Sprint 컨텍스트, 금지 사항입니다.
설명: CLAUDE.md는 AI가 프로젝트 컨텍스트를 이해하는 핵심 파일입니다. 기술 스택은 AI가 올바른 언어/프레임워크로 코드를 생성하게 합니다. 아키텍처 결정(ADR 요약)은 일관된 설계를 유지하게 합니다. 코딩 컨벤션은 팀 스타일에 맞는 코드를 생성하게 합니다. 현재 Sprint 컨텍스트는 현재 집중해야 할 작업을 명확히 합니다. 금지 사항은 알려진 안티패턴을 피하게 합니다.
Q4: V-Model에서 "V자" 구조의 의미는?
정답: 왼쪽 내리막은 개발 단계(요구사항→설계→구현), 오른쪽 오르막은 각 개발 단계에 대응하는 테스트 단계를 나타내며, 검증(Verification)과 확인(Validation)의 대응 관계를 보여줍니다.
설명: V-Model의 핵심은 각 개발 단계가 대응하는 테스트 단계를 갖는다는 것입니다. 예를 들어 요구사항 분석 단계는 인수 테스트와 대응하고, 시스템 설계는 시스템 테스트와, 상세 설계는 단위 테스트와 대응합니다. 이를 통해 테스트 계획을 개발 초기부터 수립할 수 있으며, 특히 임베디드 시스템과 의료기기 소프트웨어 개발에 널리 사용됩니다.
Q5: 속성 기반 테스팅(Property-Based Testing)이 일반 단위 테스팅보다 유리한 상황은?
정답: 비즈니스 불변식(invariant)을 검증할 때, 엣지 케이스가 많을 때, 수학적 속성이 있는 함수(정렬, 역함수 등)를 테스트할 때 유리합니다.
설명: 일반 단위 테스팅은 개발자가 생각한 케이스만 테스트합니다. 속성 기반 테스팅은 "프리미엄 회원은 항상 일반 회원보다 적게 낸다"와 같은 속성(property)을 정의하면, 수천 개의 랜덤 입력을 자동 생성해 해당 속성이 항상 성립하는지 검증합니다. 개발자가 미처 생각하지 못한 엣지 케이스를 발견하는 데 매우 효과적이며, fast-check(JavaScript) 또는 Hypothesis(Python)와 같은 라이브러리로 구현합니다.
Q6: Event Storming의 주요 구성 요소와 각 색상의 의미는?
정답: 오렌지(도메인 이벤트), 파랑(커맨드), 노랑 작은 것(액터), 노랑 큰 것(집합체), 분홍(핫스팟/문제점), 초록(외부 시스템)입니다.
설명: Event Storming은 도메인 전문가와 개발자가 함께 도메인을 탐색하는 워크숍입니다. 도메인 이벤트(오렌지)는 "주문됨", "결제처리됨"처럼 과거에 발생한 사실을 나타냅니다. 커맨드(파랑)는 이벤트를 트리거하는 액션입니다. 집합체(노랑 큰 것)는 관련 이벤트와 커맨드를 묶는 논리적 단위입니다. AI(Claude)를 활용하면 디지털 환경에서 빠르게 Event Storming을 진행할 수 있습니다.
정리
SW 개발 방법론의 선택은 프로젝트 성패를 결정하는 중요한 요소입니다. 전통적 방법론(Waterfall, V-Model)은 요구사항이 명확하고 변경이 적은 도메인에서 가치 있고, Agile(Scrum, Kanban)은 불확실성이 높고 빠른 피드백이 필요한 현대적 제품 개발에 적합합니다.
Vibe 코딩은 특정 방법론을 대체하는 것이 아니라, 모든 방법론의 각 단계에서 AI를 강력한 파트너로 활용하는 개발 패러다임입니다. CLAUDE.md로 컨텍스트를 명확히 제공하고, User Story에서 코드 생성, 테스트 자동화까지 AI를 전략적으로 통합하면 개발 생산성을 획기적으로 향상시킬 수 있습니다.
다음 단계:
- CLAUDE.md 템플릿을 현재 프로젝트에 적용
- Sprint Planning에 AI 보조 User Story 작성 도입
- 뮤테이션 테스팅으로 테스트 품질 측정 시작
SW Development Methodology & Vibe Coding: From Traditional Methods to AI-Assisted Development
SW Development Methodology & Vibe Coding: From Traditional Methods to AI-Assisted Development
Software development methodologies have evolved over decades. From Waterfall in the 1970s to the Agile Manifesto in 2001, and now to AI-assisted development (Vibe Coding) post-2025 — each era has brought continuous innovation in building better software. This guide explores the core principles of traditional methodologies and practical strategies for integrating AI across the entire development lifecycle.
1. Traditional SW Development Methodologies
1.1 Waterfall
Waterfall is a sequential development methodology proposed by Winston Royce in 1970. Each phase must be completed before the next begins.
Phase Flow:
Requirements → System Design → Implementation → Integration/Testing → Operations/Maintenance
Advantages:
- Clear phases and deliverables
- Thorough documentation enables easier maintenance
- Suitable for fixed scope and budget management
- Still used in regulated industries (medical, aerospace)
Disadvantages:
- Very rigid when requirements change
- Testing concentrated at the end means defects discovered late
- Customer feedback incorporated too late
- High failure rate in large projects (~70% per CHAOS Report)
When Waterfall is appropriate:
- Short-term projects with fully confirmed requirements
- Domains with strong regulatory/compliance requirements
- Fixed-scope contract-based outsourcing projects
1.2 V-Model
The V-Model is a variation of Waterfall that explicitly maps a corresponding test phase to each development phase.
Requirements Analysis ─────────── Acceptance Testing
System Design ─────────────── System Testing
Architecture Design ───────── Integration Testing
Detailed Design ───────────── Unit Testing
Implementation (Coding)
The core of V-Model is "Verification and Validation." The left descending side represents development activities; the right ascending side represents testing activities. Widely used in embedded systems and medical device software development.
1.3 Spiral Model
The Spiral model proposed by Barry Boehm in 1986 is an iterative methodology centered on risk analysis.
4 Quadrant Iteration:
- Identify objectives, alternatives, and constraints
- Evaluate and resolve risks
- Develop and verify
- Plan the next phase
Each spiral produces more concrete deliverables than the previous. Suitable for high-risk large government/defense projects, but complex and costly.
2. Agile Methodologies
2.1 The Birth of the Agile Manifesto
In February 2001, 17 software developers gathered at Snowbird, Utah, and wrote the Manifesto for Agile Software Development.
4 Core Values:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
Key Principles from the 12:
- Continuous delivery of valuable software for customer satisfaction
- Deliver working software frequently (2 weeks to 2 months)
- Continuous attention to technical excellence and good design
- Simplicity — the art of maximizing the amount of work not done
2.2 Scrum Framework
Scrum is the most widely used Agile framework. Developed by Ken Schwaber and Jeff Sutherland in the 1990s.
Three Pillars of Scrum:
- Transparency: All processes and work visible to everyone
- Inspection: Regularly review progress
- Adaptation: Immediately adjust when problems are found
Scrum Team Composition:
- Product Owner (PO): Manages backlog, maximizes business value
- Scrum Master: Team coach, removes impediments, guards the process
- Development Team: Self-organizing, 3 to 9 developers
Scrum Ceremonies:
| Event | Cadence | Purpose | Time-box |
|---|---|---|---|
| Sprint | 1 to 4 weeks | Development cycle | — |
| Sprint Planning | Sprint start | Select goal and work | 8 hrs/month |
| Daily Scrum | Daily | Sync, identify blockers | 15 minutes |
| Sprint Review | Sprint end | Demo completed work | 4 hrs/month |
| Sprint Retrospective | Sprint end | Process improvement | 3 hrs/month |
Scrum Artifacts:
- Product Backlog: Prioritized list of all requirements (PO owns)
- Sprint Backlog: List of work to complete in current Sprint
- Increment: Potentially releasable product at Sprint end
Definition of Done Example:
- Code review complete
- Unit tests passing (80%+ coverage)
- Integration tests passing
- Documentation updated
- Staging deployment successful
2.3 Kanban
Kanban is a visual workflow management methodology originating from Toyota's production system.
Core Principles:
- Visualize current work
- Limit Work in Progress (WIP)
- Manage flow
- Make process policies explicit
- Implement feedback loops
- Improve collaboratively
Kanban Board Example:
Backlog | Ready | In Progress (WIP: 3) | Review | Done
--------|-------|----------------------|--------|------
Task 5 |Task 4 | Task 3 |Task 2 |Task 1
Task 6 | | Task 7 | |
| | Task 8 | |
Scrum vs Kanban:
| Item | Scrum | Kanban |
|---|---|---|
| Cadence | Fixed Sprint | Continuous flow |
| Changes | Limited within Sprint | Anytime |
| Roles | Clear defined roles | No prescribed roles |
| Metrics | Velocity | Cycle time, throughput |
| Best for | New feature dev | Maintenance, ops |
2.4 SAFe (Scaled Agile Framework)
SAFe is a framework for applying Agile in large organizations.
4 Levels:
- Team Level: Scrum/Kanban teams (5 to 11 people)
- Program Level: Agile Release Train (ART, 50 to 125 people)
- Large Solution Level: Coordinating multiple ARTs
- Portfolio Level: Strategy and investment decisions
Program Increment (PI) Planning:
- 8 to 12 week cadence
- 2-day event with the entire ART
- Visualize goals and dependencies for the next PI
3. Requirements Phase with Vibe Coding
3.1 User Stories + AI
Traditional User Story format:
As a [role], I want [feature], so that [benefit].
Using AI for User Story creation:
Prompt Example:
Write User Stories from the following business requirement:
"Customers of an online shop want product recommendations based on purchase history"
Format:
- User Story (As/I want/So that)
- Acceptance Criteria (Given/When/Then)
- Story Points estimation
- 5 potential edge cases
AI-Generated User Story Example:
User Story: Personalized Product Recommendations
As a repeat customer,
I want to see product recommendations based on my purchase history on the home screen,
So that I can quickly discover products I am interested in.
Acceptance Criteria:
- Given a customer with 3+ purchases
- When they access the home screen
- Then the top 10 recommendations based on purchase history are displayed
- And each recommendation shows "why it was recommended"
- And a "not interested" button hides that recommendation
3.2 Event Storming with Claude
Event Storming is a domain exploration workshop technique developed by Alberto Brandolini. You can run digital Event Storming sessions with Claude.
Workshop Flow:
Step 1: Identify Domain Events (orange sticky notes)
→ Ask Claude: "List all domain events in the e-commerce order domain"
Step 2: Identify Commands (blue sticky notes)
→ "What commands trigger each event?"
Step 3: Identify Actors (yellow sticky notes)
→ "Who (user/system) executes each command?"
Step 4: Identify Aggregates (large yellow sticky notes)
→ "What aggregates group related events and commands?"
Step 5: Define Bounded Contexts
→ "Group aggregates into logical boundaries"
Claude Prompt Example:
Run an Event Storming for the order processing domain.
Output format:
Domain Events (past tense):
- OrderPlaced
- PaymentProcessed
...
For each event:
1. Triggering command
2. Preconditions
3. Postconditions
4. Related aggregate
3.3 Providing Context with CLAUDE.md
CLAUDE.md is the context file Claude reads when first encountering a project. A well-written CLAUDE.md from the requirements phase greatly improves AI-assisted development quality.
CLAUDE.md Example:
# Project Context
## Project Overview
E-commerce platform backend service (Node.js + TypeScript)
## Tech Stack
- Runtime: Node.js 20, TypeScript 5.3
- Framework: NestJS 10
- Database: PostgreSQL 16 (TypeORM), Redis 7
- Message Queue: RabbitMQ
- Testing: Jest, Supertest
## Architecture Decisions
- DDD (Domain-Driven Design)
- CQRS pattern
- Event Sourcing (Order aggregate)
## Coding Conventions
- Prefer functional programming
- Use immutable data structures
- Error handling: Result type pattern (neverthrow library)
## Forbidden Patterns
- No 'any' type usage
- Use winston logger instead of console.log
- No direct DB queries (use Repository pattern)
## Test Requirements
- Unit test coverage 90%+
- Integration tests required for all public APIs
- E2E tests: core payment flow
## Current Sprint Context
Sprint 3: Recommendation system implementation
- User Story: US-123 Purchase history-based recommendations
- Tech debt: Legacy ProductService needs refactoring
4. Design Phase: AI-Assisted Design
4.1 Architecture Decision Records (ADRs)
ADRs document important architectural decisions and their rationale. Writing ADRs with AI enables more systematic decision-making.
ADR Template:
# ADR-001: Database Selection
## Status
Approved (2026-03-17)
## Context
A database is needed for the recommendation system.
Requirements:
- Handle 10,000 read requests per second
- Graph queries between products
- Real-time updates
## Decision
Select PostgreSQL + pgvector extension
## Alternatives
1. MongoDB: Flexible schema but weak at complex relationship queries
2. Neo4j: Graph DB but team lacks experience, operational complexity
3. Redis + PostgreSQL: Added caching layer for performance
## Consequences
- Positive: pgvector enables vector similarity search
- Positive: Leverages team's PostgreSQL experience
- Negative: Performance limits with very large graph queries
- Negative: Learning required for pgvector setup and indexing
Writing ADRs with Claude:
Write an ADR for our message queue selection.
Requirements:
- Process 50,000 messages per second
- At-least-once delivery guarantee
- Message reprocessing capability
- Team size: 5 people
Candidates: Kafka, RabbitMQ, AWS SQS
Recommend the optimal choice for our situation with pros/cons of each.
4.2 AI-Assisted Design Review
Review the following class diagram:
[paste diagram]
Check for:
1. SOLID principle violations
2. Circular dependencies
3. Interface segregation opportunities
4. Aggregate boundary appropriateness from DDD perspective
5. Improvement suggestions
5. Implementation Phase: Vibe Coding in Practice
5.1 AI-Assisted TDD (Test-Driven Development)
Traditional TDD: Red → Green → Refactor
AI-Assisted TDD Flow:
1. Explain requirements to Claude
2. Claude generates failing test code
3. Developer reviews and adjusts tests
4. Claude generates minimal implementation to pass tests
5. Developer and Claude refactor together
Example — Recommendation Service TDD:
// Step 1: Failing tests generated by Claude
describe('RecommendationService', () => {
describe('getPersonalizedRecommendations', () => {
it('should return top 10 recommendations based on purchase history', async () => {
// Arrange
const userId = 'user-123'
const purchaseHistory = [
{ productId: 'prod-1', category: 'Electronics', purchasedAt: new Date() },
{ productId: 'prod-2', category: 'Electronics', purchasedAt: new Date() },
]
mockPurchaseRepository.findByUserId.mockResolvedValue(purchaseHistory)
mockProductRepository.findSimilar.mockResolvedValue(generateMockProducts(15))
// Act
const result = await service.getPersonalizedRecommendations(userId)
// Assert
expect(result).toHaveLength(10)
expect(result[0]).toMatchObject({
productId: expect.any(String),
score: expect.any(Number),
reason: expect.any(String),
})
expect(mockPurchaseRepository.findByUserId).toHaveBeenCalledWith(userId)
})
it('should return popular products when no purchase history exists', async () => {
mockPurchaseRepository.findByUserId.mockResolvedValue([])
mockProductRepository.findPopular.mockResolvedValue(generateMockProducts(10))
const result = await service.getPersonalizedRecommendations('new-user')
expect(result).toHaveLength(10)
expect(mockProductRepository.findPopular).toHaveBeenCalled()
})
it('should exclude already purchased products from recommendations', async () => {
const purchasedProductId = 'prod-already-bought'
mockPurchaseRepository.findByUserId.mockResolvedValue([
{ productId: purchasedProductId, category: 'Books' },
])
const recommendations = generateMockProducts(12)
recommendations[0].productId = purchasedProductId
mockProductRepository.findSimilar.mockResolvedValue(recommendations)
const result = await service.getPersonalizedRecommendations('user-123')
expect(result.map((r) => r.productId)).not.toContain(purchasedProductId)
})
})
})
5.2 Pair Programming with AI
Effective AI pair programming patterns:
Pattern 1: Driver-Navigator
- Developer as driver (writes code)
- Claude as navigator (provides direction, reviews)
Pattern 2: Ping-Pong TDD
- Claude writes tests
- Developer implements
- Claude suggests refactoring
- Developer accepts/rejects
Pattern 3: Exploratory Programming
- Claude generates rapid prototype
- Developer experiments and learns
- Together refine to production quality
5.3 Code Review with Claude
Review the following PR:
[paste code]
Review criteria:
1. Bugs and edge cases
2. Performance issues (N+1 queries, memory leaks)
3. Security vulnerabilities (SQL injection, XSS, auth/authz)
4. Coding conventions (per CLAUDE.md)
5. Test coverage
6. Readability and maintainability
For each issue:
- Severity: Critical/Major/Minor
- Improved code example
- Explanation of why
6. Testing Phase: AI-Powered Test Automation
6.1 AI-Generated Test Cases
Automated Equivalence Partitioning and Boundary Value Analysis:
Generate comprehensive test cases for the following function:
function calculateShippingFee(weight: number, distance: number, isPremium: boolean): number
Business rules:
- Weight 0-1kg: base fee $3
- Weight 1-5kg: add $0.50/kg
- Weight over 5kg: 20% surcharge on total
- Distance over 100km: add $1
- Premium member: 10% discount
- Free shipping: premium + under 10kg
When generating test cases:
- Apply boundary value analysis
- Identify equivalence partition classes
- Include negatives, zero, extreme values
- Include compound condition tests
- Write in Jest format
6.2 Mutation Testing
Mutation testing measures the quality of your tests by injecting intentional bugs (mutants) into the code and checking whether your tests catch them.
Stryker.js Configuration:
{
"mutate": ["src/**/*.ts", "!src/**/*.spec.ts"],
"testRunner": "jest",
"reporters": ["html", "clear-text", "progress"],
"thresholds": {
"high": 80,
"low": 60,
"break": 50
}
}
Analyzing Mutation Results with Claude:
Analyze the following mutation testing results and add tests to kill surviving mutants:
Surviving mutants:
1. Line 45: Changed '>' to '>=' — tests did not detect
2. Line 72: Changed '&&' to '||' — tests did not detect
Current test code:
[paste test code]
6.3 Property-Based Testing
import fc from 'fast-check'
describe('ShippingFee property-based tests', () => {
it('premium members always pay less than or equal to regular members', () => {
fc.assert(
fc.property(
fc.float({ min: 0.1, max: 100 }),
fc.integer({ min: 1, max: 1000 }),
(weight, distance) => {
const regularFee = calculateShippingFee(weight, distance, false)
const premiumFee = calculateShippingFee(weight, distance, true)
return premiumFee <= regularFee
}
)
)
})
it('shipping fee is always non-negative', () => {
fc.assert(
fc.property(
fc.float({ min: 0, max: 1000 }),
fc.integer({ min: 0, max: 10000 }),
fc.boolean(),
(weight, distance, isPremium) => {
return calculateShippingFee(weight, distance, isPremium) >= 0
}
)
)
})
})
7. Complete Guide to Writing CLAUDE.md
A well-crafted CLAUDE.md is the key factor determining the quality of AI-assisted development.
# ProjectName — Claude Context File
## Project Overview
- Purpose: [one sentence]
- Stage: [MVP/Beta/Production]
- Team size: [n people]
- Domain: [e-commerce/fintech/healthcare etc.]
## Tech Stack
### Backend
- Language: TypeScript 5.3 (strict mode)
- Runtime: Node.js 20 LTS
- Framework: NestJS 10
- ORM: TypeORM 0.3
- Database: PostgreSQL 16
### Frontend
- Framework: Next.js 14 (App Router)
- Styling: Tailwind CSS 3.4
- State: Zustand 4
### Infrastructure
- Container: Docker + Kubernetes
- CI/CD: GitHub Actions
- Cloud: AWS (EKS, RDS, ElastiCache)
## Architecture
- Pattern: DDD + CQRS + Event Sourcing
- Service separation: Modular monolith
- API: REST + WebSocket (real-time notifications)
## Coding Rules
### Must Follow
- TypeScript strict mode: no 'any' type ever
- Function length: keep under 30 lines
- Nesting depth: 3 levels max
- Error handling: Result pattern (neverthrow)
- Logging: winston logger (no console.log)
### Naming Conventions
- Classes: PascalCase
- Functions/variables: camelCase
- Constants: UPPER_SNAKE_CASE
- Files: kebab-case.ts
- Test files: \*.spec.ts
## Test Strategy
- Unit tests: Domain logic (90% coverage)
- Integration tests: API endpoints (80% coverage)
- E2E: 3 core business flows
- Mutation testing: mutant survival rate under 20%
## Current Sprint Context
Sprint 3 (2026-03-10 to 2026-03-24)
Goal: Recommendation system v1 launch
In progress:
- US-123: Purchase history recommendation API
- US-124: Real-time recommendation updates via WebSocket
Technical debt:
- Legacy ProductService refactoring needed
- UserRepository test coverage improvement needed
## Forbidden Patterns
- Direct SQL queries (use Repository pattern)
- Synchronous file I/O (fs.readFileSync etc.)
- Hardcoded secrets (use environment variables)
- Indiscriminate try-catch (specify error types)
8. Practical Example: Next.js App Vibe Coding Workflow
8.1 Project Initialization
# Step 1: Create project
npx create-next-app@latest my-shop --typescript --tailwind --app
# Step 2: Create CLAUDE.md (first Claude prompt)
CLAUDE.md Initial Setup Prompt:
Starting a Next.js 14 App Router-based e-commerce project.
Generate CLAUDE.md with these requirements:
- Product listing, detail, cart, checkout features
- TypeScript strict mode
- Tailwind CSS + shadcn/ui
- Zustand state management
- React Query v5 for server state
- Prisma + PostgreSQL
- NextAuth.js authentication
- Vitest + Testing Library
Team conventions:
- Components: atomic design with shadcn/ui base
- Server components by default, minimize client components
- Error boundary + Suspense patterns
8.2 Feature Development Flow
Step 1: Define User Story
US-001: Add Product to Cart
As a shopper
I want to add a product to my cart from the product detail page
So that I can purchase multiple items at once later
Acceptance Criteria:
- Given I am on a product detail page
- When I click "Add to Cart"
- Then the product with selected options and quantity is added to cart
- And the cart icon updates with the new count
- And if already in cart, quantity is incremented
Step 2: Request Implementation
Implement the above User Story.
Technical requirements:
- Add cartSlice to Zustand store
- Server Action for cart server sync
- Apply Optimistic Update
- Real-time inventory check (useQuery)
- Error handling: out of stock, network error
- Animation: cart icon bounce effect
File structure:
- store/cartStore.ts
- components/product/AddToCartButton.tsx
- app/actions/cart.ts
- hooks/useCart.ts
Step 3: Write Tests
Write tests for the above implementation:
1. cartStore unit tests (Vitest)
2. AddToCartButton component tests (Testing Library)
3. cart Server Action integration tests
4. Property-based tests (inventory constraints)
Quiz
Q1: What is the fundamental difference between Waterfall and Agile?
Answer: Waterfall phases proceed sequentially making changes difficult, while Agile uses short iteration cycles (Sprints) to flexibly respond to changes.
Explanation: In Waterfall, the design phase cannot begin until the requirements phase is fully complete, meaning changes to requirements during design incur enormous costs. In contrast, Agile delivers working software every 2-4 week Sprint, enabling rapid incorporation of customer feedback. A core Agile value is "responding to change over following a plan."
Q2: What are the three Scrum roles and their responsibilities?
Answer: Product Owner (manages backlog priorities), Scrum Master (team coach and impediment remover), Development Team (self-organizing development).
Explanation: The Product Owner manages the Product Backlog and determines priorities to maximize business value. The Scrum Master coaches the team in Scrum practices and removes organizational impediments. The Development Team self-organizes to distribute and execute work within a Sprint. Critically, the Scrum Master is a servant leader, not the team's manager.
Q3: What are the 5 key elements to include in CLAUDE.md?
Answer: Tech stack, architecture decisions, coding conventions, current Sprint context, and forbidden patterns.
Explanation: CLAUDE.md helps AI understand project context. The tech stack ensures AI generates code in the correct language/framework. Architecture decisions maintain consistent design. Coding conventions produce code matching team style. Current Sprint context clarifies what to focus on. Forbidden patterns avoid known anti-patterns.
Q4: What does the "V shape" in V-Model represent?
Answer: The left descending side shows development phases (requirements to implementation), the right ascending side shows test phases corresponding to each development phase, representing the Verification and Validation relationship.
Explanation: The core of V-Model is that each development phase has a corresponding test phase. Requirements analysis corresponds to acceptance testing, system design to system testing, and detailed design to unit testing. This enables test planning from early in development and is widely used in embedded systems and medical device software.
Q5: When is property-based testing more advantageous than regular unit testing?
Answer: When validating business invariants, when there are many edge cases, and when testing functions with mathematical properties (sorting, inverse functions, etc.).
Explanation: Regular unit testing only tests cases the developer thought of. Property-based testing lets you define a property like "premium members always pay less than regular members," then automatically generates thousands of random inputs to verify the property always holds. It is very effective at discovering edge cases developers might miss, implemented with libraries like fast-check (JavaScript) or Hypothesis (Python).
Q6: What are the main Event Storming components and their color codes?
Answer: Orange (domain events), blue (commands), small yellow (actors), large yellow (aggregates), pink (hotspots/problems), green (external systems).
Explanation: Event Storming is a workshop where domain experts and developers explore the domain together. Domain events (orange) represent past facts like "OrderPlaced" or "PaymentProcessed." Commands (blue) are actions that trigger events. Aggregates (large yellow) are logical units grouping related events and commands. Using Claude enables rapid digital Event Storming sessions.
Summary
The choice of SW development methodology is a critical factor in project success. Traditional methodologies (Waterfall, V-Model) provide value in domains with clear requirements and minimal changes, while Agile (Scrum, Kanban) suits modern product development requiring high adaptability and rapid feedback.
Vibe Coding is not a replacement for specific methodologies, but a development paradigm that uses AI as a powerful partner at every phase. By providing clear context through CLAUDE.md and strategically integrating AI from User Story writing to code generation and test automation, you can dramatically improve development productivity.
Next Steps:
- Apply the CLAUDE.md template to your current project
- Introduce AI-assisted User Story writing in Sprint Planning
- Start measuring test quality with mutation testing