경험이 없는 경우 프로그래밍 작업을 추정하는 방법 [닫기]

StackOverflow https://stackoverflow.com/questions/425044

  •  06-07-2019
  •  | 
  •  

문제

저는 이전 경험이 없는 타사 컨트롤을 사용하는 프로그래밍 작업에 대한 견적을 경영진이 요청하는 데 어려움을 겪고 있습니다.

나는 그들이 견적을 원하는 이유를 확실히 이해하지만, 내가 제공하는 견적은 a) 너무 짧아서 나를 나쁘게 보이게 만들거나 b) 너무 길어서 나를 나쁘게 보이게 만들 것 같은 느낌이 듭니다.

내가 일을 계속할 수 있도록 그들을 내 등 뒤에서 떼어 놓기 위해 어떤 평가나 답변을 줄 수 있습니까!

도움이 되었습니까?

해결책

당신이 줄 수있는 가장 좋은 대답은보다 정확한 견적을 제공 할 수 있도록 빠른 프로토 타입을 노크 할 시간을 요청하는 것입니다. 없이 약간 도구 또는 문제에 대한 경험, 귀하가 제공하는 모든 추정치는 본질적으로 의미가 없습니다.

제쳐두고, 너무 오랫동안 추정치를주는 데는 거의 문제가 없습니다. 예상치 못한 문제가 발생하고 우선 순위가 변경되며 요구 사항이 "업데이트"됩니다. 요청한 모든 시간을 사용하지 않더라도 더 많은 테스트 시간이 있거나 "조기"를 출시 할 수 있습니다.

나는 항상 내 추정치에서 너무 낙관적이었고, 특히 당신이 상사에게 불편한 진실을 말할 수있는 경험과 자신감이없는 젊은 프로그래머 일 때 그것은 당신의 삶에 많은 스트레스를 줄 수 있습니다.

다른 팁

비밀 하나를 알려드릴게요.귀하가 해당 기술의 전문가라 할지라도 귀하의 추정치는 매우 부정확할 가능성이 높습니다.본질적으로 R&D 작업인 일을 할 때 그것은 짐승의 본성입니다.불행하게도 경영진은 제조 모델을 적용하고 정확한 견적을 요구하는 경우가 많습니다.내 요점을 설명하기 위해 다음 두 가지 노력을 정확하게 평가하는 것이 어렵다는 점을 고려하십시오.

A) 지난 달에 생산한 2K와 동일한 11K 우산을 추가로 생산하십시오.B) 새로운 종류의 우산을 디자인하고 첫 번째 우산을 만들어 보세요.

소프트웨어 개발은 ​​B인데 A를 전제로 견적을 요구하고 있습니다.

당신이 할 수 있는 최선의 방법은 작업을 가능한 한 작은 조각으로 나누고(각각 1/2일 이내) 최종적으로 생각해낸 숫자를 세 배로 늘리는 것입니다.(Spolsky 방법)

또는 Steve McConnell은 소프트웨어 엔지니어링의 이러한 측면에 대한 전체 책(여러 권)을 보유하고 있습니다.http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351

스티브 맥코넬 (그리고 다른 사람들)에 대해 이야기합니다 불확실성의 원뿔. 기본적으로 다음과 같이 보이는 추정치를 제공합니다.

작업은 3 주에서 9 주 사이에 4 주가 걸릴 가능성이 높습니다.

프로젝트가 진행됨에 따라 견적을 개선 할 수 있습니다. 더 많은 작업을 수행하고 필요한 노력을 더 잘 이해하면 더 정확하게 추정치를 개선 할 수 있습니다.

그것은 저에게 도움이되었지만 프로젝트의 다른 이해 관계자가 프로세스를 이해하기 위해 약간의 노력이 필요할 수 있습니다.

추정치와 신뢰 수준을 모두 제공하는 것을 고려할 수 있습니다. 즉, 50/50은 3-6 개월 또는 6-9 개월 또는 9 개월 안에 75%, 90%가 될 것입니다. 1 년 안에 완료되었습니다.

당신이 고려하고 싶은 또 다른 것은 "사용하는 것입니다.군중의 지혜"접근. 돌아 다니면서 25-50 명에게 그들이 얼마나 오래 걸릴 것이라고 생각하고 평균적인 추정치를 물어보십시오. Mike Cohn 's 계획 포커 나는 이것과 매우 유사하지만 한 명의 개발자와 함께 계획하기는 어렵다고 생각합니다.

추정치를 분해하십시오.

  • 알려진 알려진; 당신이 아는 방법을하는 데 얼마나 걸립니까? 이 추정치에 높은 수준의 신뢰를 줄 수 있어야합니다.
  • 알려지지 않은 알려진; 어떻게 해야할지 모르는 일을하는 데 얼마나 걸릴 것이라고 생각합니까? Dacracot과 같은 방법을 사용 하여이 추정치에 대해 다른 수준의 신뢰를 제공 할 수 있습니다.
  • 알 수없는 미지의; 이것은 실시간 블랙홀입니다. 이것들은 가장 부적절한 시간에 뒤로 물러나서 엉덩이에 물린 것들입니다. 예상되는 위험에 근거하여 정당화와 함께 추정 범위를 제공하십시오.

그 과정에서 견적 및 특정 이정표를 조정하도록 제안합니다. 알려지지 않은 미지의 모든 것은 알려지지 않은 것으로 알려지지 않을 것이며, 알려지지 않은 알려지지 않은 사람들은 당신이 경험을 얻는 것으로 알려져 있어야하며, 알려진 알려진 사람들의 추정치는 현재까지 진행 상황에 따라 조정될 수 있습니다. 초기 추정치를 수행 한 다음 약 25%를 완료 한 다음 다시 50%로 다시 85%로 재 추정 할 수 있습니다. 각 이정표마다 당신의 견적은 작업이 취할 실제 시간에 수렴을 시작해야합니다.

나는 내 추정치에 명확한 라벨링 시스템을 사용합니다 ... 클래스 A, 클래스 B 및 클래스 C.

클래스 C 추정치는 처음으로 얻는 것입니다. 공개적으로 미지수로 인해 플러스 또는 마이너스 50%로 명시되어 있습니다. 그들이 내가 그들에게 B를 계속해서주기를 원한다면, 나는 연구 할 돈이 필요하다.

클래스 B는 플러스 또는 마이너스 25%입니다. 때때로 이것은 충분히 좋고 그들은 나에게 건설 할 돈을줍니다. 그렇지 않다면 더 적은 돈과 더 많은 연구.

클래스 A는 플러스 또는 마이너스 10%, 최종 및 이동 또는 이동하지 않습니다. 그것이 가고 나는 추정치에서 너무 멀리 떨어져 있다면 자주 그리고 일찍 고백합니다.

"내가 이전에 경험이없는 타사 컨트롤을 활용하는"문구를 제거하면 더 큰 문제에 대한 더 나은 설명이있을 수 있다고 생각합니다.

"Agile"이 우리에게 무엇이든 가르쳐 주면 경영진이 지속적으로 프로젝트를 그런 식으로 추정하기 위해 당신을 기대하고 있고, 당신이 가지고 있지 않기 때문에 제공 할 수 없다고 말하면 "나쁘게 보일 것"이라고 생각한다면 충분한 정보, 당신은 고속도로에 실패합니다.

가장 큰 문제는 통제 할 수없는 문제와 아직 식별하지 않은 문제입니다. 당신이 얼마나 자주 되돌아보고 자신에게 말 했는가? 일주일 동안 휴가와 프로젝트 관리자는 일주일 동안 저를 필요로하고 아내가 임신했고 ... "

나는 "중요한 위험 요소를 식별하고 XX 일에이를 테스트하기 위해 전달 가능한 점검표를 제시 할 수 있습니다. 그 시점에서 나는 또 다른 점진적인 추정치를 줄 것입니다."

그리고 당신이 그들이 "미래에 그 유형에 대한 믿을만한 추정치를 주려고 노력하지 말라고 주장해야한다는 것을 제안해야한다면 정말 좋을 것입니다. 내가 시도하면 나를 해고하십시오."

(과장되었지만 약간만.)

추정조차하지 마십시오. 당신의 견적이 올바른 방법은 없습니다. 결국 추정치입니다.

대신 기능을 작은 조각으로 나누고 (1-2 일 이상)이 작품을 고객/관리자에게 작동하고 완전하고 테스트 가능하며 귀중한 코드로 전달하는 것이 좋습니다. 그렇게하면 그는 매일 당신의 진보를 볼 것입니다. 이것은 또한 그가 모든 목표에 도달하지 못하더라도 실제로 개발을 멈추고 완료를 고려할 수 있음을 의미합니다.

이 접근법에 대한보다 심층적 인 정보에 대한 애자일 관행 "릴리스 계획"및 "반복 계획"을 살펴보십시오.

더 큰 시간 추정치를 요청하지만 시간이 지남에 따라 확장을 요구하는 것보다 훨씬 좋아 보인다.

나는 당신이 걸릴 시간에 대한 더 나은 아이디어를 갖도록 프로토 타입을 조롱하려고 노력할 것입니다. 학습 곡선에서 예상치 못한 지연을 위해 예산을 책정 할 수 있도록 관리에 정직하십시오.

편집하다: 더 "반복적 인"마감일을 얻을 수 있는지 알 수 있습니다. "실용적인 사고와 학습"에서 Andy Hunt는 사람들이 프로젝트가 끝날 때까지 프로젝트 전문가라는 좋은 지적을하고, 처음에는 지식이 적다는 좋은 지적을합니다. 모든 사람이 프로젝트에 대해 지식이 가장 적은 경우 처음에 모든 디자인 및 시간 추정을 수행하는 것은 의미가 없습니다. 마감일을 "반복"하고 덩어리로 문제를 해결하면 더 많은 성공을 거둘 것입니다.

많은 정확한 추정은 자기 지식입니다. 많은 코드를 작성했다면 많은 API를 배워야한다면 다음과 같은 질문에 대한 느낌을 받기 시작합니다.

  • 새로운 API를 배우는 데 얼마나 걸립니까?
  • 새로운 언어를 배우는 데 얼마나 걸립니까?
  • 새로운 도구 세트 (컴파일러/링커/IDE)를 배우는 데 얼마나 걸립니까?
  • 일반적인 작업을 구현하는 데 얼마나 걸립니까?
  • 내 작업을 테스트하는 데 얼마나 걸립니까?
  • 내 작업을 배치하는 데 얼마나 걸립니까?

그 동안, 당신은 다음과 같은 것들에 대한 감각을 얻어야합니다.

  • 얼마나 많은 전형적인 버그가 생성되고 어떻게 분류되는지 (즉, 쉽고, 단단하고, 불가능)
  • 얼마나 많은 합병증이 소개되는지 (즉, 타사 API 또는 버기 API의 부족으로 인해 리팩터가 필요합니다. 기능의 오해로 인해 재 설계해야합니다. 비표준 도구/빌드 프로세스)
  • 중단/외부 문제로 인해 얼마나 많은 시간이 손실되는지

이 모든 것들을 바탕으로, 당신은 불완전한 정보에 직면하더라도 어떤 시간이 얼마나 오래 걸릴 지 ( "API가 제정신이라고 가정 할 때 ...")를 진술 할 수있는 느낌을 개발할 수 있습니다.

예를 들어, 더 나은 견적을하기 위해 충분히 배우기 위해 얼마나 오래 필요한 지 추정하십시오. 여기에 견적을 삽입하십시오 운동하기 위해 그것에 대해 배우는 데 필요한 것 내가 당신에게 이것을 사용하여 끝내기 위해 좋은 견적을 줄 수 있기 전에 알아야 할 것입니다. 귀하의 프로젝트."

프로그래밍 할 때 나는 항상 내가 생각했던 것을 가져 갔고, 그것이 나를 3 곱할 것이라고 추정치를 제공하기 위해 3을 곱했습니다. 1 주일 안에 일을 할 수 있다고 생각한다면 고객에게 3 주가 걸릴 것이라고 말합니다.

이렇게함으로써 나는 "Promise Under Promise, Over Deliver"로 스스로를 설정했습니다. 만약 당신이 성공적으로 할 수 있다면 인생이 훨씬 나아질 것이고 고객은 매우 행복 할 것입니다.

귀하의 경우에는 견적을 제공하기 전에 적어도 자신이 다이빙하는 것에 대한 이해를 원할 것입니다. 아마도 견적을 제공하는 데 걸리는 시간에 대한 견적을 제공해야 할 수도 있습니다. 3을 곱하면 고객을 행복하게 유지합니다.

경험이있는 것들로 분류하십시오. 그것을 자르는 행위는 당신이 알고있는 것과 당신이 모르는 것에 대한 더 나은 아이디어를 줄 것입니다.

조각이 단일 정의 된 작업으로 볼 수있을 정도로 작아지면 그 중 일부는 완전히 추정 할 수 없습니다. 이를 위해서는 프로토 타입을 먼저하거나 조각의 크기에 따라 합리적인 시간을 남겨 두십시오. 2-4 주 동안 더 큰 작품이 더 큰 작품을 발견했다면 먼저 자르십시오.

결국 당신은 당신이 매우 이상한 기술 솔루션 (당신이 효과가 있다고 생각하지만 확실하게 알지 못하는 것)에 이르렀으며 일단 작동하면 그 일을 백업하기 위해 많은 노력을 기울일 것입니다. 몇 가지 누락 된 디자인이 있으며, 이는 잘 알려진 라이브러리 또는 초기 버전에 대한 매우 간단한 알고리즘을 선택하는 것이 가장 좋습니다.

작업을 분류 할 수 없다면 충분한 경험을 가진 사람을 고용해야합니다 (경험이 부족하기 때문에 다른 방식으로 당신을 괴롭힐 것입니다). 누군가를 고용 할 수 없다면, 무작위로 오랜 기간 (6 개월에서 2 년) 동안 협상하고 지저분한 프로토 타입으로 바로 가야합니다 (옳고 그 옳고 그 옳고야할만한 경험을 할 수있을 때까지 잘못된). 그러나, 당신이 그것에 도달하게되면, 자신을 아이를 키우지 않고 당신이 올바른 "길"이라고 생각하는 것이 중요합니다. 프로토 타입은 버려졌습니다. 프로토 타입 카운트 다운이 완료되면 실제를 위해 만들 준비가되기를 바랍니다.

폴.

외부 숫자를 추측하고 즉시 평가를 받고 향후 정보가 귀하의 견적에 영향을 줄 수 있지만 최신 정보를 유지할 수 있음을 알려줍니다.

평가대로 웹 또는 주간 업데이트에 게시 된 문서를 통해 정보를 유지하지만 항상 업데이트 된 "예상 종료 날짜"및 확장에 대한 이유 (있는 경우)를 포함하십시오.

대부분의 관리자는 종말 날짜를 요구하면서 실제로 "우리가 일정을 계획 할 수있는 방법을 알려주세요"와 "영원히 취하지 마십시오"라고 말합니다.

한두 번 이상 연장되면 추정 할 때 짜증나는 새로운 지식에 따라 전체 일정을 다시 평가하십시오.

RB가 말한 것에 덧붙여, 제가 이런 상황에 처했을 때 제가 익숙한 도구를 사용하여 소요되는 시간을 추정한 다음 그 추정치를 두 배로 늘려 학습 곡선을 구축합니다.

중요한 부분은 추정치가 다음과 같다는 사실을 경영진에게 전달하는 것입니다. 추측하다, 그들이 더 정확한 추정을 요구하거나 그렇게 하려고 한다면 - 신이시여 - 팔다 시간 제한이 있어요(확실히 시간이 좀 걸릴 거예요) Starship Enterprise를 구축하는 데 이틀이 걸렸습니다. 잘하셨습니다.) 총을 쏘세요, 귀하의 추정치 또는 그것이 신뢰할 수 없다는 사실을 타협하지 마십시오.

경영진이 귀하를 무시하고 작업 시간을 정하는 경우"음, 이틀 안에 완료해야 합니다."라고 다시 한 번 알려주세요. 그들의 귀하의 추정치만큼 신뢰할 수 있는 추정치입니다.

이 모든 것을 서면으로 기록하세요.

나는 내 직장에서 꽤 약간의 추정을 다루고 있으며 그것은 진정한 도전입니다. 가장 큰 과제 중 하나는 개발자가 얼마나 숙련 될지에 대한 지식없이 작업을 수행하는 데 다른 개발자가 얼마나 오래 걸릴지 추정하는 것입니다.

당신은 "약속 아래, 오버 전달"방법으로 초기의 성공을 볼 수 있지만, 시간이 지남에 따라 "오버 약속, 아래의 전달"사고 학교를 따르는 다른 사람들이 전해질 것임을 알게 될 것입니다. 정확도가 부족하면 어느 쪽이든 물린 것입니다. 정확도는 기술과 함께 미지수의 수를 경험하고 제한하는 것과 매우 관련이 있습니다.

내가 제안 할 한 가지는 당신의 예산이 어떤 종류의 예산에 반대 할 것인지에 대한 아이디어를 얻는 것입니다. 예산이 적다면 낯선 기술에 미치지 말고 알고있는 것을 고수하십시오. 예산이 조금 더 유연하다면, 당신은 조금 실험 할 여유가 있습니다.

또한 당신이 제공 할 수있는 모든 것이 야생 엉덩이 추측 (WAG)이라는 작업이있을 것임을 인식하십시오. 이를 위해 당신은 당신의 견적에 최소 시간을 설정하고 최대가 무엇인지 알지 못하게해야합니다. 종종 이러한 종류의 추정치는 특정 기능/REQ가 경영진이 삭감 해야하는 충분한 이유입니다.

그것은 프로젝트 관리자와 프로그래머 모두가 가질 수있는 필수 기술입니다 (물론 마스터 할 수 있습니다!). 기사를 찾았습니다. 소프트웨어 개발 작업 추정 (약간) 더 쉽게 만들어졌습니다. , 프로젝트의 작업에 대한 더 나은 추정에 도움이 될 것으로 예상됩니다.

위의 모든 응답은 견적 자체를 제시하는 것과 관련하여 거의 모든 것을 다루었습니다.

내가 강조하는 한 가지는 추정치를 추적하는 것입니다 (La Joel의 작은 Excel 스프레드 시트 또는 매우 간단한 경우 메모장 문서). . 이것을 상사에게 전달할 필요가 없더라도, 이것을 최신 상태로 유지하는 것은 상황이 어떻게 진행되고 있는지에 대한 더 나은 아이디어를 얻을 수 있으며, 더 중요한 것은 좋은 느낌을 얻을 수 있습니다. 작업이 진행됨에 따라 추정치가 변경됩니다.

이렇게하면이 특정 기술과 이전에 사용하지 않은 다른 기술 모두에 대해 미래에 추정하는 데 더 나은 것이 가능합니다. 단순히 예상 사항이 정기적으로 변경 될 때 눈에 띄게 필요한 이유를 알아 내고 그 결과가 발생하는 이유를 해결하기 때문입니다. .

시간이 얼마나 걸릴지 예측하는 것은 업무의 일부입니다.마감일이 아닌 추정치로 이해되는 한 걱정할 필요가 없습니다.코드를 작성하는 사람보다 견적을 더 잘 제공할 수 있는 사람은 없습니다.좋은 추정치를 제공할 수 없는 경우 관리자에게 잘못된 추정치에 따른 위험을 알려 알 수 없는 제3자 컨트롤에 대해 프로그래밍 위험을 감수할 가치가 있는지 다시 고려할 수 있도록 해야 합니다.

그것은 매우 일반적인 상황입니다. 미지의 것을 다루어야 할 필요성. 이를 해결하는 유용한 방법은 실제 프로그래밍 작업 외에도 학습을 수행해야하며 관리는이를 알고 있어야한다는 것을 인식하는 것입니다.

이와 같은 상황에 처할 때, 프로젝트는 갑자기 R & D 프로젝트가되고 평소보다 더 긴 시간은 프로그램을 배우고 제작하기 때문에 나쁘게 보이지 않습니다. 나는 당신이 얼마나 빨리 배우고 있는지 또는 당신이 찾을 수있는 문제를 처리 해야하는지 잘 모르겠습니다 (스택 오버플로는 당신이 가진 옵션 중 하나입니다).

평소와 같이 추정 한 다음 1.5 (빠른 학습자이고 질문을 해결하기 위해 리소스에 액세스 할 수있는 경우) 또는 평범한 학습자이고 자신에게만 의존하는 경우 2.5를 곱해야한다고 말합니다.

이게 도움이 되길 바란다!

작업을 관리 가능한 작품으로 나누기 위해 최선을 다하십시오. 운이 좋으면 관련된 제 3 자 구성 요소와 관련된 특정 작업이 있으며, 이는 덜 결합 된 (따라서 추정하기 쉬운) 다른 작업이 있습니다. 경영진에게 분할 추정치를 제공하고 가장 불확실한 추정치가 사는 곳을 지적하십시오.

나는 주변을 놀고 프로토 타이핑을 제안한 사람에 전적으로 동의합니다. 프로토 타이핑 활동에 대한 고정 된 시간 상자를 설정하십시오. ( "내 추정치 의이 부분을 더 좋게 만들려면 이틀 먼저 필요합니다.")

당신은 범위를 줄 수 있습니까? 40-60 시간, 그런 것?

작업이 작을수록 작업이 더 어려워지면 프로젝트가 끝날 때 오류가 균형을 이룰 수 있으므로 그룹화 할 수 있다면 조금 더 "슬로프"를 가질 수 있습니다.

경험이있는 영역을보고 가이드로 사용하는 경우 사용하십시오. "마지막으로 데이터베이스를 변경 한 기능을 만들어야 할 때는 x가 필요했습니다." 행운을 빕니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top