답변:
당신이 줄 수있는 최선의 대답은 당신이 더 정확한 견적을 내기 위해 빠른 프로토 타입을 만들 시간을 요청하는 것입니다. 없이 어떤 도구 또는 문제 경험, 당신이주는 어떤 추정치는 본질적으로 의미가 없습니다.
제쳐두고 너무 긴 견적을 제공하는 데는 거의 문제가 없습니다. 예상치 못한 문제가 발생하고 우선 순위가 변경되며 요구 사항이 "업데이트"됩니다. 요청한 시간을 모두 사용하지 않더라도 테스트 시간이 더 많거나 "초기"릴리스가 가능합니다.
나는 항상 내 추정치에서 너무 낙관적이었고, 특히 당신이 상사들에게 불편한 진실을 말할 경험과 자신감이없는 젊은 프로그래머 일 때 당신의 삶에 많은 스트레스를 줄 수 있습니다.
비밀을 알려 드리겠습니다. 해당 기술에 대한 전문가이더라도 추정치는 매우 부정확 할 수 있습니다. 본질적으로 R & D 작업 인 무언가를 할 때 그것은 짐승의 본질입니다. 불행히도 경영진은 종종 제조 모델을 적용하고 정확한 추정을 요구합니다. 내 요점을 설명하기 위해 다음 두 가지 노력을 정확하게 추정하는 데 어려움이 있음을 고려하십시오.
A) 지난달에 내놓은 2K와 똑같은 11K 우산을 또 제조하십시오. B) 새로운 종류의 우산을 디자인하고 첫 번째 우산을 만드십시오.
소프트웨어 개발은 B이지만 A를 가정하여 추정치를 요구하고 있습니다.
당신이 할 수있는 최선의 방법은 작업을 가능한 가장 작은 조각으로 나누고 (각각 1/2 일 이내) 당신이 생각 해낸 최종 숫자를 세 배로 늘리는 것입니다. (Spolsky Method)
또는 Steve McConnell은 소프트웨어 엔지니어링의 이러한 측면에 대한 전체 책 (아마도 여러 권)을 보유하고 있습니다. http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351
Steve McConnell (및 기타) 은 불확실성 의 원뿔에 대해 이야기합니다 . 기본적으로 다음과 같은 추정치를 제공합니다.
작업은 3 ~ 9 주가 소요되며 4 주가 가장 가능성이 높습니다.
프로젝트가 진행됨에 따라 견적을 구체화 할 수 있습니다. 더 많은 작업을 수행하고 필요한 노력을 더 잘 이해하면 추정치를 더 정확하게 조정할 수 있습니다.
저에게는 효과적이지만 프로젝트의 다른 이해 관계자가 프로세스를 이해하도록하려면 약간의 노력이 필요할 수 있습니다.
추정치와 신뢰 수준을 모두 제공하는 것을 고려할 수 있습니다. 즉, 3 ~ 6 개월 또는 6 ~ 9 개월이 걸리는 50/50 또는 9 개월 내에 완료 될 확률은 75 %, 당신이 될 확률은 90 %입니다. 1 년 만에 끝났습니다.
고려해야 할 또 다른 사항은 " 군중의 지혜 "접근 방식을 사용하는 것입니다. 주위를 돌아 다니면서 25-50 명에게 얼마나 오래 걸릴 것이라고 생각하는지 물어보고 평균을 내십시오. Mike Cohn의 Planning Poker 는 이와 매우 유사하지만 단 한 명의 개발자로 계획하기는 어렵습니다.
견적을 다음과 같이 분류하십시오.
도중에 예상치와 특정 이정표를 조정하도록 제안하십시오. 알려지지 않은 알려지지 않은 것은 알려진 알려지지 않은 것이 될 것이고, 알려진 알려지지 않은 것은 당신이 경험을 얻을 때 알려 져야하며, 당신이 알려진 알려진 추정치는 현재까지의 진행 상황에 따라 조정될 수 있습니다. 초기 추정을 한 다음 약 25 %를 완료 한 후 다시 추정 한 다음 다시 50 %, 다시 85 %로 추정 할 수 있습니다. 각 이정표에서 예상치는 작업에 걸리는 실제 시간에 수렴하기 시작해야합니다.
나는 내 추정치를 위해 A 등급, B 등급, C 등급과 같은 명확한 라벨링 시스템을 사용합니다.
클래스 C 견적은 그들이 얻는 첫 번째입니다. 미지로 인해 플러스 또는 마이너스 50 %로 공개적으로 표시됩니다. 그들이 내가 계속해서 B 등급을 주길 원한다면 조사 할 돈이 필요합니다.
클래스 B는 플러스 또는 마이너스 25 %입니다. 때때로 이것은 충분히 좋으며 그들은 나에게 건설 할 돈을줍니다. 그렇지 않다면 더 적은 돈과 더 많은 연구.
클래스 A는 플러스 또는 마이너스 10 %, 최종 및 진행 여부입니다. 그것이 진행되고 견적에서 너무 멀어지면 나는 자주 그리고 일찍 고백합니다.
"사전 경험이없는 타사 컨트롤을 활용하는"이라는 문구를 제거하면 더 큰 문제에 대해 더 잘 설명 할 수있을 것입니다.
"Agile"이 우리에게 무언가를 가르쳐 준 경우, 경영진이 지속적으로 프로젝트를 그렇게 예상 할 것으로 기대한다면, 그렇지 않아 제공 할 수 없다고 말하면 "나쁘게 보일 것"입니다. 정보가 충분하면 FAIL로가는 고속도로에 있습니다.
가장 큰 문제는 당신이 통제 할 수없고 아직 파악하지 못한 문제 일 것입니다. 당신은 얼마나 자주 뒤를 돌아보며 스스로에게 "글쎄요, 저는 제 견적을 바로 버튼으로 쳤습니다. 세 번째 시도에서 제가 그 점을 알아 낸 후에 ... 그리고 제가 버전이 필요하다는 것을 ... 그리고 dba가 켜져있을 것입니다." 일주일 동안 휴가를 보내고 프로젝트 관리자가 일주일 동안 나를 필요로했고 아내가 임신했고 ... ".
"중요한 위험 요소를 식별하고 xx 일 내에 테스트 할 결과물 체크리스트를 만들 수 있습니다. 그 시점에서 또 다른 점진적 추정치를 제공하겠습니다."
그리고 당신이 그들이 "미래에 당신에게 그 유형에 대한 믿을만한 추정치를 제공하려고하지 않는다고 고집하십시오. 내가 시도하면 나를 해고하십시오."라고 제안 할 수 있다면 정말 좋을 것입니다.
(과장되었지만 약간만 있습니다.)
추정하려고하지 마십시오. 귀하의 견적이 정확할 방법은 없습니다. 결국 단지 견적입니다.
대신 기능을 작은 조각 (1 ~ 2 일 이내)으로 분할하고 이러한 조각을 작동하고 완전하며 테스트 가능하며 가치있는 코드로 고객 / 관리자에게 제공하는 것이 좋습니다. 그렇게하면 그는 매일 당신의 진행 상황을 직접 확인할 수 있습니다. 이것은 또한 그가 모든 목표에 도달하지 않았더라도 실제로 만족하면 개발을 중단하고 완료되었다고 결정할 수 있음을 의미합니다.
이 접근 방식에 대한 자세한 정보는 애자일 관행 "릴리스 계획"및 "반복 계획"을 참조하십시오.
더 큰 예상 시간을 요구하지만 시간이 지나면 연장을 요청하는 것보다 훨씬 나아 보입니다.
프로토 타입을 조롱하여 시간이 얼마나 걸리는지 더 잘 알 수 있도록 노력하겠습니다. 경영진이 학습 곡선에서 예상치 못한 지연에 대비할 수 있도록 정직하게 관리하십시오.
편집 : 더 "반복적 인"기한을 얻을 수 있는지 확인할 수도 있습니다. "Pragmatic Thinking and Learning"에서 Andy Hunt는 사람들이 프로젝트가 끝날 무렵에는 프로젝트 전문가이며 처음에는 지식이 거의 없다는 점을 지적합니다. 모든 사람이 프로젝트에 대한 지식이 가장 적은 초기에 모든 설계 및 시간 추정을 수행하는 것은 의미가 없습니다. 마감일을 "반복"하고 문제를 덩어리로 해결하면 더 많은 성공을 거둘 수 있습니다.
많은 정확한 추정은 자기 지식입니다. 많은 코드를 작성했거나 많은 API를 배워야했다면 다음과 같은 질문에 대한 느낌을 받기 시작합니다.
그 과정에서 다음과 같은 것을 이해해야합니다.
이러한 모든 사항을 바탕으로 끔찍하게 불완전한 정보에도 불구하고 무언가가 얼마나 오래 걸릴지에 대한 감각을 개발하고 가정 ( "API가 정상이라고 가정 ...")을 진술 할 수 있습니다.
프로그래밍 할 때 나는 항상 내가 정말로 걸릴 것이라고 생각한 것을 취하고 추정치를 제공하기 위해 3을 곱했습니다. 1 주일 안에 일을 할 수있을 것 같으면 고객에게 3 주가 걸릴 것이라고 말하고 정말로 3 주가 걸릴 것이라고 생각하면 고객에게 9 주라고 말합니다.
이렇게함으로써 저는 "약속에 따라, 과도하게 전달"하도록 설정했습니다. 만약 당신이 성공적으로 이것을 할 수 있다면 당신의 삶은 훨씬 나아질 것이고 당신의 고객은 극도로 행복 할 것입니다.
귀하의 경우에는 견적을 제공하기 전에 다이빙 대상에 대해 최소한 어느 정도 이해하고 싶을 것입니다. 예상치를 제공하는 데 걸리는 시간에 대한 예상치를 제공해야 할 수도 있습니다. 3을 곱하면 고객이 만족할 수 있습니다.
경험이있는 것들로 나누십시오. 그것을 자르는 행위는 당신이 아는 것과 모르는 것에 대해 더 나은 아이디어를 줄 것입니다.
조각이 정의 된 단일 작업으로 볼 수있을만큼 작 으면 그중 일부는 완전히 예측할 수 없습니다. 이를 위해 먼저 프로토 타입을 만들거나 조각의 크기에 따라 적절한 시간을 남겨 두십시오. 2-4 주 작업보다 더 큰 예상치 못한 조각이 있다는 것을 알게된다면, 먼저 조각으로 돌아가십시오.
결국 당신은 매우 이상한 기술 솔루션 (작동해야한다고 생각하지만 확실히 알지 못함)에 도달하게 될 것이며, 일단 작동하면이를 뒷받침하기 위해 많은 작업을 수행해야합니다. 누락 된 디자인이 몇 가지있을 것입니다. 초기 버전에 대해 잘 알려진 라이브러리 또는 매우 간단한 알고리즘을 선택하는 것이 가장 좋습니다.
작업을 분해 할 수 없다면 충분한 경험이있는 사람을 고용해야합니다 (경험이 부족하면 다른 방식으로도 괴롭힐 수 있기 때문입니다). 누군가를 고용 할 수 없다면 무작위로 긴 기간 (6 개월에서 2 년) 동안 흥정을하고 바로 엉뚱한 프로토 타입으로 향해야합니다. 잘못된). 그러나 결국 당신이 그것에 어리둥절하게된다면, 자신을 놀리지 않고 당신이 올바른 "방법"을하고 있다고 생각하는 것이 중요합니다. 프로토 타입은 버려야했습니다. 프로토 타입 카운트 다운이 완료되면 실제로 빌드 할 준비가 된 것입니다.
폴.
외부 숫자를 추측하고 즉시 평가를 시작하고 향후 정보가 예상치에 영향을 미칠 수 있지만 최신 상태로 유지할 것임을 알리십시오.
평가할 때 웹에 게시 된 문서 또는 주간 업데이트를 통해 정보를 제공하되 항상 업데이트 된 "예상 종료 날짜"와 확장 사유 (있는 경우)를 포함하십시오.
대부분의 관리자는 종료 날짜를 요청함으로써 실제로 "일정을 계획 할 수있는 방법을 알려주세요"와 "영원히 걸리지 마세요"라고 말하는 것을 이해해야합니다.
한두 번 이상 연장하게된다면, 당신이 예상하지 못하는 새로운 지식을 바탕으로 전체 일정을 재평가하십시오.
나는 RB가 말한 것에 덧붙이고,이 상황에 처해있을 때 내가 익숙한 도구를 사용하는 데 걸리는 시간을 추정 한 다음 그 추정치를 두 배로 늘려 학습 곡선을 만듭니다.
중요한 부분은 추정이 있음 관리에 통신 추측 사랑하는 하나님 - - 그들은 더 정확한 견적 누르거나 그들이하려고하면 경우, 판매 확실히 그것은 단지 할게요 (당신에게 시간 제한 을 스타쉽를 구축하는 이일 기업, 당신은 잘하고 있습니다) 총 에 집착 하십시오. 추정치 또는 신뢰할 수 없다는 사실을 타협하지 마십시오.
관리 재정을하고 - 박스 작업 예 : "글쎄, 그것은 2 일 내에 수행해야합니다"경우, 다시는 그건 알려 그들 자신의 신뢰할으로 정확히 추정.
이 모든 것을 서면으로 기록하십시오.
저는 제 업무에서 견적을 상당히 많이 다루고 있으며 그것은 진정한 도전입니다. 저의 가장 큰 도전 중 하나는 다른 개발자가 얼마나 숙련 될지 모르는 상태에서 작업을 수행하는 데 걸리는 시간을 예측하는 것입니다.
"Under promise, over delivery"방법으로 초기 성공을 볼 수 있지만, 시간이 지남에 따라 "over promise, under delivery"사고 방식을 따르는 다른 사람들보다 더 많이 낙찰 될 것입니다. 정확도 부족은 어느 쪽이든 다시 물릴 것입니다. 정확성은 기술에 대한 경험과 미지의 수를 제한하는 것과 매우 관련이 있습니다.
내가 제안하고 싶은 한 가지는 당신의 예상이 어떤 종류의 예산에 맞을지에 대한 아이디어를 얻는 것입니다. 예산이 적더라도 익숙하지 않은 기술에 열중하지 말고 알고있는 것을 고수하십시오. 예산이 조금 더 유연하다면 약간의 실험을 할 수 있습니다.
또한 WAG (Wild Ass Guess) 만 제공 할 수있는 몇 가지 작업이 있습니다. 이를 위해서는 추정에 최소 시간을 설정하고 최대 값이 무엇인지 알 수 없음을 분명히해야합니다. 종종 이런 종류의 추정치는 특정 기능 / 요구 사항이 경영진에 의해 제거되어야하는 충분한 이유입니다.
이것은 프로젝트 관리자와 프로그래머 모두가 가지고있을 수있는 (물론 마스터 할 수있는) 없어서는 안될 기술입니다. 저는 Estimating Software Development Tasks Made (a little bit) Easier 라는 기사를 찾았습니다.이 기사 는 프로젝트 작업에 대한 더 나은 평가에 도움이 될 것으로 기대합니다.
위의 모든 응답은 추정 자체에 관한 거의 모든 것을 다루었습니다.
제가 강조하고 싶은 한 가지는 귀하의 추정치를 추적하는 것입니다 (조엘의 작은 Excel 스프레드 시트 또는 매우 간단한 경우 메모장 문서). 매일 마지막에이를 지금 제공 할 수있는 가장 정확한 수치로 업데이트하십시오. . 이를 상사에게 다시 전달할 필요가 없더라도이를 최신 상태로 유지하면 상황이 어떻게 진행되고 있는지에 대한 더 나은 아이디어를 얻을 수 있으며, 더 중요한 것은 그 이유를 잘 이해할 수 있다는 것입니다. 작업이 진행됨에 따라 예상치가 변경되는 .
이렇게하면 특정 기술과 이전에 사용하지 않은 다른 기술 모두에 대해 미래를 더 잘 예측할 수 있습니다. 이는 단순히 기대치가 일정한 간격으로 변경되는시기를 어느 정도 파악하고 그 이유를 파악해야하기 때문입니다. .
그것은 매우 일반적인 상황입니다. 미지의 문제를 다룰 필요성입니다. 이 문제를 해결하는 유용한 방법은 실제 프로그래밍 작업 외에 수행 할 몇 가지 학습이 있으며 경영진은이를 인식해야합니다.
이런 상황에 처하면 프로젝트가 갑자기 R & D 프로젝트가되고, 프로그램을 배우고 제작하고 있기 때문에 평소보다 긴 시간이 당신을 나쁘게 만들지 않습니다. 얼마나 빨리 배우고 있는지 또는 발견 할 수있는 문제를 처리하기 위해 어떤 리소스가 필요한지 모르겠습니다 (Stack Overflow는 선택할 수있는 옵션 중 하나입니다).
평소와 같이 추정 한 다음 1.5 (빠른 학습자이고 질문을 해결하기위한 리소스에 액세스 할 수있는 경우)를 곱하거나 평균적인 학습자이고 자신에게만 의존하는 경우 2.5를 곱해야합니다.
이게 도움이 되길 바란다!