견적은 작업 완료, 기능 개발 또는 전체 프로젝트 납품에 필요한 작업량을 정량적으로 평가하는 것입니다. 모바일 개발에서 견적은 스프린트 계획, 비용 결정, 클라이언트 기대치 관리에 사용됩니다. Project Management Institute, 2024에 따르면 프로젝트 초기 단계의 견적 오차는 100%에 달할 수 있으며, 이는 견적을 개발에서 가장 어려운 분야 중 하나로 만듭니다.
핵심 사항
견적 (영어 estimate — 평가)은 작업을 완료하는 데 필요한 시간이나 작업량을 예측하는 것입니다. 모바일 개발에서 견적은 시간, 일, 스토리 포인트 또는 금전적 가치로 표현될 수 있습니다. 견적의 목적은 정확한 예측이 아니라 의사 결정을 위한 불확실성을 줄이는 것입니다.
견적은 오차 범위가 있는 예측입니다. 약속은 특정 날짜까지 작업을 완료하겠다는 약속입니다. 차이는 중요합니다: 견적은 "아마 5일"이라고 말하고, 약속은 "5일 안에 하겠다"고 말합니다. 관리자들은 종종 이 개념을 혼동하여 견적을 오차가 허용되지 않는 마감일로 바꿉니다.
견적 프로세스는 그 결과만큼 중요합니다. 팀이 작업 견적에 대해 논의할 때 숨겨진 요구사항, 종속성 및 위험이 드러납니다. 최종 숫자가 부정확하더라도 논의를 통해 모든 참가자가 작업을 이해할 수 있습니다. 따라서 집단 견적 방법(Planning Poker)이 개별 방법보다 효과적입니다.
프로젝트 단계와 세부 수준에 따라 여러 견적 방법이 있습니다. 방법 선택은 사용 가능한 데이터와 필요한 정확도에 따라 달라집니다.
| 방법 | 유형 | 정확도 | 사용 시기 |
|---|---|---|---|
| Planning Poker | 전문가, 집단 | 높음 (스프린트 내) | 스프린트 작업 견적 |
| T-Shirt sizing | 전문가, 신속 | 중간 | 예비 에픽 견적 |
| 유사 견적 | 이력 기반 | 중간 | 유사한 과거 작업 |
| 3점 견적 (PERT) | 확률론적 | 중간 이상 | 불확실성이 높은 작업 |
| 파라메트릭 | 공식 기반 | 데이터에 따라 다름 | 반복 가능한 측정 작업 |
Planning Poker는 Agile에서 가장 인기 있는 견적 방법입니다. 각 개발자는 피보나치 수(1, 2, 3, 5, 8, 13, 21)가 적힌 카드 덱을 받습니다. 작업 논의 후 모두가 동시에 카드를 공개합니다. 견적이 다른 경우, 최소 및 최대 견적을 낸 개발자가 자신의 논리를 설명하고 재투표가 진행됩니다. 이 방법은 권위 편향을 제거하고 더 정확한 견적을 제공합니다.
T-Shirt sizing은 티셔츠 크기(XS, S, M, L, XL, XXL)로 대략적인 견적을 내는 방법입니다. 이 방법은 세부 사항이 알려지지 않은 초기 단계에서 큰 작업(에픽)을 빠르게 견적하는 데 사용됩니다. 이후 각 작업은 분해되어 Planning Poker에서 견적됩니다. T-Shirt sizing은 작업당 5-10분이 소요되지만 규모의 대략적인 수준만 제공합니다.
PERT는 낙관적(O), 비관적(P), 가장 가능성 높은(M) 세 가지 견적을 사용합니다. 최종 견적은 (O + 4M + P) / 6 공식으로 계산됩니다. 이 방법은 불확실성을 고려하여 단일 견적보다 더 현실적인 결과를 제공합니다. PERT는 특히 위험이 높거나 새로운 기술이 포함된 작업에 유용합니다.
견적 정확도는 프로젝트 단계와 알려진 정보의 양에 따라 달라집니다. 견적이 빠를수록 오차 범위가 커집니다 — 이는 정상이며 계획에 반영되어야 합니다.
불확실성의 원뿔(Cone of Uncertainty)은 프로젝트가 진행됨에 따라 견적 오차가 어떻게 감소하는지 설명하는 모델입니다. 개념 단계에서 오차 범위는 400%입니다(작업에 1~4개월이 소요될 수 있음). 스프린트 단계에서는 20%(1~1.2개월)입니다. 이 모델을 이해하면 초기 단계에서 정확한 견적을 요구하지 않는 데 도움이 됩니다.
상대 견적(스토리 포인트)은 절대 견적(시간)보다 더 정확합니다. 사람들은 시간을 추정하는 것보다 작업을 비교하는 데 더 능숙하기 때문입니다. "이 작업은 저 작업보다 두 배 복잡하다"는 "이 작업은 8시간이 걸릴 것이다"보다 더 신뢰할 수 있는 판단입니다. 상대 견적은 특정 개발자에 의존하지 않으며 담당자가 변경되어도 정확도를 유지합니다.
견적 정확도는 체계적인 접근, 집단 논의, 과거 실수 분석을 통해 향상될 수 있습니다. 몇 가지 입증된 방법이 있습니다.
2일 이상으로 견적된 모든 작업은 하위 작업으로 분해되어야 합니다. 원칙: 작업을 50% 이상의 정확도로 견적할 수 없다면 너무 큰 것입니다. 이해 가능하고 견적 가능한 단계로 나누십시오. 분해 후 총 견적은 초기 견적보다 1.5-2배 더 큰 경우가 많습니다.
견적 이력을 유지하고 실제 작업량과 비교하십시오. 예: "3 스토리 포인트로 견적된 작업은 평균 4일이 소요되며, 2일이 아닙니다". 예측에 팀 velocity를 사용하십시오: 팀이 스프린트당 20 스토리 포인트를 완료한다면 30을 계획하지 마십시오. 과거 견적 정확도 분석은 견적 기술을 향상시키는 최고의 훈련입니다.
앵커링은 처음에 언급된 견적이 모든 참가자에게 영향을 미치는 심리적 효과입니다. Planning Poker에서 앵커링을 피하려면 순서대로가 아니라 모두가 동시에 카드를 공개합니다. 보정은 견적과 실제 결과를 정기적으로 비교하는 것입니다: 10-20 스프린트 후 팀은 피드백을 통해 더 정확하게 견적하는 법을 배웁니다.
모든 작업에는 숨은 위험이 있습니다: 개발자 질병, API 문제, 요구사항 변경. 견적에 위험 조정 계수를 추가하십시오: 고위험 작업에는 1.5-2의 승수, 저위험 작업에는 1.1-1.2를 적용합니다. 어떤 위험이 고려되었으며 일정에 어떻게 영향을 미치는지 클라이언트에게 투명하게 보여주십시오.
견적 실수는 팀의 성숙도에 관계없이 대부분의 팀에서 반복됩니다. 이러한 실수를 아는 것이 수정의 첫걸음입니다.
가장 흔한 실수는 최상의 시나리오로 견적하는 것입니다: "모든 것이 완벽하게 진행된다면 3일 안에 할 수 있다". 현실에서는 아무것도 완벽하게 진행되지 않습니다: 버그, 요구사항에 대한 질문, 종속 작업. 해결책: 낙관적이 아닌 가장 가능성 높은 시나리오로 견적하십시오. 변동성을 고려하기 위해 PERT를 사용하십시오.
관리자가 "금요일까지 필요하다"고 말하면 개발자는 무의식적으로 견적을 그 마감일에 맞춥니다. 압박 속의 견적은 항상 과소평가되며 기한을 놓치게 됩니다. 해결책: 견적은 마감일보다 먼저 이루어져야 하며, 그 반대가 되어서는 안 됩니다. 먼저 팀이 견적하고, 그런 다음 당사자들이 일정에 합의합니다.
작업 복잡성(얼마나 생각해야 하는지)과 시간(얼마나 해야 하는지)은 다른 메트릭입니다. 작업은 단순하지만 시간이 많이 걸릴 수 있고(10개 화면 구축), 복잡하지만 빠를 수 있습니다(레거시 코드에서 버그 찾기). 스토리 포인트는 일반적으로 복잡성을 견적하고, 시간은 팀 velocity에서 파생됩니다.
개발자는 하나의 작업에 8시간 연속으로 작업하지 않습니다: 회의, 코드 리뷰, 동료 지원, 관리 작업이 근무 시간의 30-50%를 소비합니다. 컨텍스트 스위칭은 견적에 고려되어야 합니다: 실제로 개발자는 하루에 3-4시간만 코드를 작성합니다.
자주 묻는 질문
개발은 불확실성이 높은 창의적인 과정입니다. 모든 단계가 알려진 건설이나 제조와 달리, IT에서는 각 작업이 고유합니다. 알려지지 않은 미지수(unknown unknowns)가 부정확성의 주요 원인입니다. 경험이 많은 팀도 30-50%의 견적에서 틀립니다. 이는 정상이며 계획에 반영되어야 합니다.
스토리 포인트는 상대적이고 담당자에 의존하지 않기 때문에 스프린트 계획에 더 좋습니다. 시간은 계약 및 외부 보고에 필요하지만 정확도가 떨어집니다. 최적의 조합: 작업은 스토리 포인트로 견적하고, 기한은 팀 velocity를 통해 달력 일수로 변환합니다.
알려지지 않은 기술이 포함된 작업의 경우 먼저 스파이크(시간 제한 조사)를 사용하십시오. 조사 후 팀은 복잡성을 이해하고 현실적인 견적을 제공할 수 있습니다. 일반 견적에 2-3의 승수를 적용하고 예상치 못한 어려움에 대비해 50% 버퍼를 추가하십시오.
분해 내역을 보여주십시오 — 작업을 개별 견적이 있는 하위 작업으로 나누십시오. 시간이 어떻게 구성되는지 설명하십시오: 개발, 테스트, 코드 리뷰, 문서화. 대안을 제시하십시오: 범위 축소, 기능 단순화, 또는 단계적 분할. 요구사항을 변경하지 않고 견적을 낮추지 마십시오.
재견적은 작업에 대한 새로운 정보가 나타날 때 필요합니다: 추가 요구사항 발견, 기술적 제약 발견, 우선순위 변경. 스프린트 내에서는 작업이 재견적되지 않습니다 — 완료에 집중합니다. 스프린트 사이에는 grooming 중에 백로그가 재견적됩니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.