🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
431 lines
13 KiB
Markdown
431 lines
13 KiB
Markdown
---
|
|
description: 기능 구체화 - 각 기능을 사용자 가치 관점에서 구체화
|
|
---
|
|
|
|
## User Input
|
|
|
|
```text
|
|
$ARGUMENTS
|
|
```
|
|
|
|
User input **must** be considered.
|
|
|
|
## Overview
|
|
|
|
**This is Step 2 of the logical thinking 7-step workflow**:
|
|
|
|
```
|
|
논리적 사고 7단계:
|
|
1. /appkit.new → 아이디어 스케치 (어떤 서비스인지?)
|
|
2. /appkit.spec → 기능 구체화 (뭐가 필요할까? 누가 쓸까?) ← YOU ARE HERE
|
|
3. /appkit.customer → 고객 스토리 (고객의 하루, 고민, 해결)
|
|
4. /appkit.sales → 세일즈 랜딩 구성 (어떻게 설득할까?)
|
|
5. /appkit.mvp → MVP 범위 정하기 (최소한으로 검증하려면?)
|
|
6. /appkit.merge → 기획 정돈 (흩어진 기획 통합)
|
|
7. /appkit.design → 개발 준비 (API, ERD, 기술 스펙)
|
|
```
|
|
|
|
User inputs in format: `/appkit.spec <spec-id> "<natural language description>"`
|
|
|
|
Examples:
|
|
- `/appkit.spec 003-booking "search and book courts from main screen"`
|
|
- `/appkit.spec 003-booking "time deal 30% discount, within 2 days of booking date"`
|
|
- `/appkit.spec 004-promotion "no duplicate coupon use, max 40% discount"`
|
|
|
|
**Core Concepts**:
|
|
- **Incremental detailing**: Don't write everything at once
|
|
- **Preserve existing content**: Previous content + new content added
|
|
- **Natural language input**: User inputs comfortably in natural language
|
|
|
|
**Note**: As you detail multiple specs, concepts may overlap or conflict. This is expected! The `/appkit.merge` command (Step 3) will consolidate these later.
|
|
|
|
## Execution Flow
|
|
|
|
### 1. Input Parsing
|
|
|
|
**Format**: `/appkit.spec <spec-id> "<natural language description>"`
|
|
|
|
**Parsing**:
|
|
```
|
|
Example: /appkit.spec 003-booking "searchable from main screen"
|
|
|
|
Extract:
|
|
- spec-id: 003-booking
|
|
- natural language description: "searchable from main screen"
|
|
```
|
|
|
|
**Validation**:
|
|
- Error if spec-id is empty
|
|
- Error if natural language description is empty
|
|
|
|
### 2. Script Execution
|
|
|
|
**Script**: `.app/scripts/get-spec-path.sh --json --spec-id "003-booking"`
|
|
|
|
**Example Output**:
|
|
```json
|
|
{
|
|
"SPEC_FILE": "docs/appkit/specs/003-booking/spec.md",
|
|
"SPEC_DIR": "docs/appkit/specs/003-booking"
|
|
}
|
|
```
|
|
|
|
**Error Handling**:
|
|
- If spec directory doesn't exist: "Spec 003-booking does not exist. Run /appkit.new first."
|
|
|
|
### 3. Load Existing Spec
|
|
|
|
**Read File**: `docs/appkit/specs/003-booking/spec.md`
|
|
|
|
**Check Status**:
|
|
1. **Empty template**:
|
|
- Not yet detailed with `/appkit.spec`
|
|
- All sections have `[This section will be filled...]`
|
|
|
|
2. **Partially written**:
|
|
- Some sections filled
|
|
- Some sections still empty
|
|
|
|
3. **Fully written**:
|
|
- Most sections filled
|
|
- Can add/modify
|
|
|
|
### 4. Natural Language Analysis with User Value Focus
|
|
|
|
**Input Analysis**: "search and book available courts from main screen at once"
|
|
|
|
**고객 가치 분석**:
|
|
```
|
|
핵심 질문:
|
|
- 누가? → 퇴근길 직장인, 시간이 없는 사람
|
|
- 언제? → 이동 중, 짬날 때
|
|
- 왜? → 빠르게 주말 운동 계획 세우려고
|
|
- 어떻게? → 한 화면에서 모든 것 해결
|
|
- 가치? → 시간 절약 (15분 → 3초)
|
|
|
|
Map to sections:
|
|
- User Value: 3초 만에 예약 완료
|
|
- User Journey:
|
|
- 앱 열기 → 날짜/시간 선택 → 예약 → 완료
|
|
- 총 소요 시간: 3초
|
|
- Pain Points Solved:
|
|
- 전화 대기 없음
|
|
- 여러 코트 동시 확인
|
|
- 즉시 확정
|
|
|
|
Business Rules (고객 관점):
|
|
- 실시간 업데이트 (놓치지 않게)
|
|
- 가격 투명 공개 (비교 가능)
|
|
- 즉시 확정 알림 (안심)
|
|
```
|
|
|
|
**Input Analysis 2**: "time deal within 2 days of booking date, 30% discount"
|
|
|
|
**고객 가치 분석**:
|
|
```
|
|
핵심 질문:
|
|
- 누가? → 시간 유연한 프리랜서, 학생
|
|
- 언제? → 갑자기 시간 생겼을 때
|
|
- 왜? → 저렴하게 운동하고 싶어서
|
|
- 어떻게? → 자동으로 할인 적용
|
|
- 가치? → 30% 비용 절감
|
|
|
|
Map to sections:
|
|
- User Value: 정가의 70%로 운동
|
|
- User Scenario:
|
|
- "내일 시간 비었네?" → 앱 확인 → "30% 할인!" → 즉시 예약
|
|
- Emotional Journey:
|
|
- 발견 (😮) → 기쁨 (😊) → 만족 (😍)
|
|
|
|
Business Rules (고객 이익):
|
|
- 자동 적용 (따로 쿠폰 입력 안 해도 됨)
|
|
- 명확한 조건 표시 (언제 할인되는지 투명)
|
|
- 다른 할인과 비교 (가장 이득인 것 자동 선택)
|
|
```
|
|
|
|
### 5. Spec Update (Incremental)
|
|
|
|
**Principles**:
|
|
1. **Preserve existing content**: Never delete
|
|
2. **Add new content**: Add natural language analysis results to relevant sections
|
|
3. **Prevent duplicates**: Don't add already existing content
|
|
4. **Maintain consistency**: Keep existing format and tone
|
|
|
|
**Update Example**:
|
|
|
|
**Before** (empty template):
|
|
```markdown
|
|
## User Journey & Screen Flow
|
|
[This section will be filled by /appkit.spec command]
|
|
|
|
## Business Rules
|
|
[This section will be filled by /appkit.spec command]
|
|
```
|
|
|
|
**After** (first `/appkit.spec` execution):
|
|
```markdown
|
|
## User Journey & Screen Flow
|
|
|
|
### 1. Main Screen
|
|
- **UI Elements**: Search bar (date, time), recommended court list
|
|
- **CTA**: "Search" button
|
|
- **Next**: Search results screen
|
|
|
|
### 2. Search Results Screen
|
|
- **UI Elements**: Filters (price, distance, rating), court cards (image, name, price, distance)
|
|
- **CTA**: Click court card
|
|
- **Next**: Court detail screen
|
|
|
|
### 3. Court Detail Screen
|
|
- **UI Elements**: Court info, reviews, available time slots
|
|
- **CTA**: "Book" button
|
|
- **Next**: Payment screen
|
|
|
|
## Business Rules
|
|
### Search Criteria
|
|
- Date: After today
|
|
- Time slot: Selectable
|
|
- Results: Show only available courts
|
|
```
|
|
|
|
**After** (second `/appkit.spec` execution - "sort by price and distance"):
|
|
```markdown
|
|
## User Journey & Screen Flow
|
|
|
|
### 1. Main Screen
|
|
- **UI Elements**: Search bar (date, time), recommended court list
|
|
- **CTA**: "Search" button
|
|
- **Next**: Search results screen
|
|
|
|
### 2. Search Results Screen
|
|
- **UI Elements**: Filters (price, distance, rating), sort options (price/distance), court cards # Updated
|
|
- **CTA**: Click court card
|
|
- **Next**: Court detail screen
|
|
|
|
### 3. Court Detail Screen
|
|
- **UI Elements**: Court info, reviews, available time slots
|
|
- **CTA**: "Book" button
|
|
- **Next**: Payment screen
|
|
|
|
## Business Rules
|
|
### Search Criteria
|
|
- Date: After today
|
|
- Time slot: Selectable
|
|
- Results: Show only available courts
|
|
|
|
### Sort Options # Added
|
|
- By price: Lowest first
|
|
- By distance: Closest first
|
|
- Default: By price
|
|
```
|
|
|
|
**After** (third `/appkit.spec` execution - "time deal 30% discount"):
|
|
```markdown
|
|
## Pricing & Promotion Logic
|
|
### Time Deal # New section added
|
|
- Condition: Within 2 days of booking date
|
|
- Discount rate: 30%
|
|
- Application: Automatic
|
|
```
|
|
|
|
### 6. Auto-Completeness Check (고객 가치 중심)
|
|
|
|
After updating spec, automatically check customer value completeness:
|
|
|
|
**Check Sections**:
|
|
- ✅ User Value (고객이 얻는 가치)
|
|
- ✅ Target User (누가 쓸까?)
|
|
- ✅ User Scenario (언제/어떻게 쓸까?)
|
|
- ⏳ Pain Points Solved (해결되는 문제)
|
|
- ❌ Success Metrics (어떻게 성공 측정?)
|
|
- ⚠️ Edge Cases (예외 상황)
|
|
|
|
**Report to User**:
|
|
```markdown
|
|
✅ Spec 002-booking 고객 가치 업데이트!
|
|
|
|
💡 핵심 가치 분석:
|
|
- 누가: 30대 직장인 (퇴근길)
|
|
- 언제: 이동 중 짬날 때
|
|
- 왜: 주말 운동 예약
|
|
- 가치: 15분 → 3초 시간 절약
|
|
|
|
📝 업데이트된 내용:
|
|
- User Value: 3초 예약으로 시간 절약
|
|
- User Scenario: 퇴근길 지하철 예약 시나리오
|
|
- Pain Points: 전화 대기, 불확실성 해결
|
|
|
|
📋 완성도 체크:
|
|
- ✅ User Value (명확)
|
|
- ✅ Target User (구체적)
|
|
- ✅ User Scenario (생생함)
|
|
- ⏳ Pain Points (더 추가 가능)
|
|
💡 제안: "주말 만석으로 운동 못함" 추가
|
|
- ❌ Success Metrics (미작성)
|
|
💡 제안: "평균 예약 시간 3초 이하"
|
|
- ⚠️ Edge Cases (미흡)
|
|
💡 제안: "동시 예약 충돌 처리"
|
|
|
|
💡 다음 단계:
|
|
더 많은 사용자 시나리오 추가:
|
|
/appkit.spec 002-booking "프리랜서가 평일 낮 할인받기"
|
|
/appkit.spec 002-booking "대학생 그룹 예약으로 절약"
|
|
|
|
📄 전체 spec 보기: docs/appkit/specs/002-booking/spec.md
|
|
|
|
📍 다음 단계: Step 4-5 - /appkit.customer (타겟 고객 정의 & 스토리텔링)
|
|
```
|
|
|
|
### 7. Completeness Check Criteria
|
|
|
|
**Section Status**:
|
|
- ✅ **Well-written**: Section has concrete content, no ambiguity
|
|
- ⏳ **Partially written**: Section exists but lacks details
|
|
- ⚠️ **Vague**: Section has content but vague or missing key parts
|
|
- ❌ **Not written yet**: Section is empty or only has placeholder
|
|
|
|
**Required Sections** (at minimum):
|
|
1. User Journey & Screen Flow (with screen details)
|
|
2. Business Rules
|
|
3. Dependencies
|
|
|
|
**Recommended Sections** (depending on spec type):
|
|
- Pricing & Promotion Logic (if pricing/discounts involved)
|
|
- Payment Flow (if payments involved)
|
|
- Cancellation & Refund (if cancellations possible)
|
|
- Edge Cases (always recommended)
|
|
|
|
## Section Mapping Guide (고객 가치 중심)
|
|
|
|
Natural language input → Customer value section mapping:
|
|
|
|
### User Value Related
|
|
**Keywords**: "절약", "빠른", "편리한", "쉬운", "자동", "한번에"
|
|
**Examples**:
|
|
- "3초 만에 예약" → User Value: 시간 절약
|
|
- "자동 할인 적용" → User Value: 비용 절감
|
|
- "원터치 결제" → User Value: 편의성
|
|
|
|
### Target User Related
|
|
**Keywords**: "직장인", "학생", "프리랜서", "주부", "시니어"
|
|
**Examples**:
|
|
- "바쁜 직장인을 위한" → Target User: 30-40대 직장인
|
|
- "학생 할인" → Target User: 대학생
|
|
|
|
### User Scenario Related
|
|
**Keywords**: "퇴근길", "점심시간", "주말", "갑자기", "급하게"
|
|
**Examples**:
|
|
- "퇴근길 지하철에서" → User Scenario: 이동 중 예약
|
|
- "주말 아침 급하게" → User Scenario: 당일 예약
|
|
|
|
### Payment Flow Related
|
|
**Keywords**: "payment", "fee", "payment method", "card", "cash", "bank transfer"
|
|
**Examples**:
|
|
- "online payment 5% fee" → Payment Flow
|
|
- "cash payment no fee" → Payment Flow
|
|
|
|
### Cancellation & Refund Related
|
|
**Keywords**: "cancel", "refund", "change", "modify"
|
|
**Examples**:
|
|
- "100% refund 24h before" → Cancellation & Refund
|
|
- "1 booking change allowed" → Cancellation & Refund
|
|
|
|
### Edge Cases Related
|
|
**Keywords**: "fail", "error", "concurrent", "duplicate", "timeout", "when empty", "exceed"
|
|
**Examples**:
|
|
- "first-come-first-served for concurrent bookings" → Edge Cases
|
|
- "rollback booking on payment failure" → Edge Cases
|
|
|
|
### Dependencies Related
|
|
**Keywords**: "need", "depend", "integrate", "reference"
|
|
**Inference**: When using data or functionality from other specs
|
|
|
|
## Important Notes
|
|
|
|
### 🔴 Mandatory Requirements
|
|
|
|
1. **Incremental update**:
|
|
- Never delete existing content
|
|
- Only add new content
|
|
- Prevent duplicates
|
|
|
|
2. **Natural language analysis**:
|
|
- Carefully analyze user input
|
|
- Map to appropriate sections
|
|
- If inference is ambiguous, add to most relevant section
|
|
|
|
3. **Maintain consistency**:
|
|
- Keep existing format and tone
|
|
- Consistent markdown style
|
|
- Unified terminology
|
|
|
|
4. **Auto-completeness check**:
|
|
- Check completeness after every update
|
|
- Provide next step suggestions
|
|
- Point out vague or missing parts
|
|
|
|
### 🟡 Analysis Guidelines
|
|
|
|
1. **Multiple section updates**:
|
|
- Single natural language input can affect multiple sections
|
|
- Update all relevant sections
|
|
|
|
2. **Inference and expansion**:
|
|
- Don't just add explicit content
|
|
- Include reasonable inferences
|
|
- Example: "search" → search criteria, result display, empty result handling
|
|
|
|
3. **Cross-reference**:
|
|
- Specify in Dependencies if related to other specs
|
|
- Mention policy references if related to policies
|
|
|
|
### 🟢 Screen Flow Details
|
|
|
|
When updating User Journey & Screen Flow, include:
|
|
|
|
**For each screen**:
|
|
1. **Screen name**: Clear, descriptive name
|
|
2. **UI Elements**: Key visual elements users see
|
|
3. **CTA (Call-to-Action)**: Main buttons or actions
|
|
4. **Next**: Which screen comes next
|
|
|
|
**Example**:
|
|
```markdown
|
|
### 2. Search Results Screen
|
|
- **UI Elements**:
|
|
- Filter bar (price range, distance, rating)
|
|
- Sort dropdown (price/distance/rating)
|
|
- Court cards with: thumbnail, name, price, distance, rating
|
|
- "No results" message (when empty)
|
|
- **CTA**:
|
|
- Click court card → Court detail
|
|
- Adjust filters → Refresh results
|
|
- **Next**: Court detail screen or refined results
|
|
```
|
|
|
|
## Example Flow
|
|
|
|
```
|
|
# First execution
|
|
User: /appkit.spec 003-booking "search courts from main screen"
|
|
Claude: ✅ User Journey & Screen Flow, Business Rules updated
|
|
📋 Payment Flow, Cancellation missing
|
|
💡 Next: Add payment policy
|
|
|
|
# Second execution
|
|
User: /appkit.spec 003-booking "sort by price and distance"
|
|
Claude: ✅ User Journey, Business Rules updated (preserved + added)
|
|
📋 Payment Flow, Cancellation still missing
|
|
|
|
# Third execution
|
|
User: /appkit.spec 003-booking "time deal 30% discount"
|
|
Claude: ✅ Pricing & Promotion Logic added (new section)
|
|
📋 Payment Flow, Cancellation still missing
|
|
|
|
# Fourth execution
|
|
User: /appkit.spec 003-booking "online payment 5% fee"
|
|
Claude: ✅ Payment Flow added (new section)
|
|
📋 Only Cancellation missing now
|
|
💡 Almost complete! Just add cancellation policy
|
|
```
|