Loading...
Loading...
Compare original and translation side by side
undefinedundefinedundefinedundefinedStory: "사용자가 프로필 사진을 업로드할 수 있다"
팀원 A: 3 points (프론트엔드 간단)
팀원 B: 5 points (이미지 리사이징 필요)
팀원 C: 8 points (S3 업로드, 보안 고려)
토론:
- 이미지 처리 라이브러리 사용
- S3 이미 설정됨
- 파일 크기 검증 필요
재투표 → 5 points 합의Story: "用户可上传个人资料照片"
团队成员A: 3 points (前端实现简单)
团队成员B: 5 points (需要图片缩放)
团队成员C: 8 points (需考虑S3上传、安全问题)
讨论:
- 使用图片处理库
- S3已配置完成
- 需要进行文件大小验证
重新投票 → 达成5 points的共识undefinedundefinedundefinedundefinedinterface TaskEstimate {
baseEstimate: number; // 기본 추정
risk: 'low' | 'medium' | 'high';
uncertainty: number; // 0-1
finalEstimate: number; // 조정된 추정
}
function adjustEstimate(estimate: TaskEstimate): number {
let buffer = 1.0;
// 리스크 버퍼
if (estimate.risk === 'medium') buffer *= 1.3;
if (estimate.risk === 'high') buffer *= 1.5;
// 불확실성 버퍼
buffer *= (1 + estimate.uncertainty);
return Math.ceil(estimate.baseEstimate * buffer);
}
// 예시
const task = {
baseEstimate: 5,
risk: 'medium',
uncertainty: 0.2 // 20% 불확실
};
const final = adjustEstimate(task); // 5 * 1.3 * 1.2 = 7.8 → 8 pointsinterface TaskEstimate {
baseEstimate: number; // 基础估算
risk: 'low' | 'medium' | 'high';
uncertainty: number; // 0-1
finalEstimate: number; // 调整后的估算
}
function adjustEstimate(estimate: TaskEstimate): number {
let buffer = 1.0;
// 风险缓冲
if (estimate.risk === 'medium') buffer *= 1.3;
if (estimate.risk === 'high') buffer *= 1.5;
// 不确定性缓冲
buffer *= (1 + estimate.uncertainty);
return Math.ceil(estimate.baseEstimate * buffer);
}
// 示例
const task = {
baseEstimate: 5,
risk: 'medium',
uncertainty: 0.2 // 20% 不确定性
};
const final = adjustEstimate(task); // 5 * 1.3 * 1.2 = 7.8 → 8 pointsundefinedundefinedundefinedundefined#estimation#agile#story-points#planning-poker#sprint-planning#project-management#estimation#agile#story-points#planning-poker#sprint-planning#project-management