우리는 모두 모호한 코드와 기괴한 예기치 않은 기능을 통해 수정하고 해결하기 어려운 문제를 가지고 있습니다. 패턴, 오류, 실수를 찾으려고 천천히 논리적으로 노력하십시오. 이 프로세스는 시간이 걸리고 종종 고객이 쉽게 이해하지 못하는 문제가 있습니다.
"언제 언제 수행됩니까?"라는 질문을 받았을 때, 특히 클라이언트가 소프트웨어 개발의 고유 한 복잡성을 이해하지 못하는 경우에 어떻게 대답합니까?
우리는 모두 모호한 코드와 기괴한 예기치 않은 기능을 통해 수정하고 해결하기 어려운 문제를 가지고 있습니다. 패턴, 오류, 실수를 찾으려고 천천히 논리적으로 노력하십시오. 이 프로세스는 시간이 걸리고 종종 고객이 쉽게 이해하지 못하는 문제가 있습니다.
"언제 언제 수행됩니까?"라는 질문을 받았을 때, 특히 클라이언트가 소프트웨어 개발의 고유 한 복잡성을 이해하지 못하는 경우에 어떻게 대답합니까?
답변:
당신은 정직하게 질문에 대답합니다.
당신은 그들에게 어려운 문제라고 말하고, 해결책은 분명하지 않으며, 해결하는데 얼마나 오래 걸릴지 확신하지 못합니다. 모든 [시간 프레임]마다 진행 상황을 업데이트하도록 약속하면 진행중인 작업을 알 수 있으며 실제로 업데이트를 보낼 수도 있습니다.
개발자는 복잡한 문제를 작은 문제로 분해하여 개별적으로 해결함으로써 복잡한 문제에 접근합니다.
이상적인 세계 에서 문제를 해결하는 것은 복잡한 문제 A 가 될 것이며 주어진 시간에 문제를 짧은 문제 의 목록으로 분해 할 수있을 것입니다 .A 1 ~ A n , 각 평가 시간은 간단합니다. 초기 복잡한 문제를 해결하는 데 필요한 시간은 다음과 같습니다.
와 D는 분해 과정 자체 인.
실제 세계 에서 유일한 문제는 작은 문제를 해결하는 데 소요되는 시간보다 t ( D )가 실제로 더 크다는 것입니다. 다시 말해, 문제의이 수준의 분해에 도달하려면 실제로 문제 자체를 해결해야합니다.
당신은 여전히 할 수 있습니다 :
주어진 작업 (문제 해결)을 작은 청크로 분리하십시오. 각 청크는 여전히 복잡한 문제입니다.
각 청크의 예상 시간과 해당 위험을 평가하십시오.
예를 들어, 작업 1에는 약. 5 시간이지만 차단할 위험이 높으므로 고객에게 12 시간을 기대하십시오.
종속성과 시간에 미치는 영향을 평가하십시오.
예를 들어, 작업 19에는 2 시간이 필요하며 위험이 너무 낮아 2 시간이라고 말할 수 있습니다. 아닙니다. 3. 아닙니다. 그러나 작업 19는 작업 24에 의존합니다. 작업 24는 다른 접근 방식을 사용하여 작업 19의 코드를 완전히 다시 작성해야하는 방식으로 작업 19에 영향을 줄 수 있습니다.
모든 세부 사항을 고객에게 제공하십시오. 합계를주지 마십시오.
마지막 요점이 중요합니다. 합산하면 192 시간이라고 가정하면 고객은 매우 정확한 측정 기준이라고 생각하며 소비 시간은 189 ~ 195 시간입니다.
대신 세부 정보를 제공하면
걱정하는 고객은 192 시간이 아니라는 것을 이해할 것입니다. 평가 중에 결정된 위험을 고려하여 모든 것이 잘못되면 192 시간입니다. 모든 것이 더 나빠지면 238 시간입니다. 모든 것이 정상이라면 85 시간입니다.
걱정하지 않는 고객에 대해서는 모든 경우에 귀하의 답변을 읽지 않습니다. 그가 원하는 것은 나중에 당신을 비난 할 수있는 숫자입니다. 그가 읽지 않을 매우 상세한 답변을함으로써, 당신은 그가 당신에게 다시 걸리는 시간을 요구할 수 없다는 것을 알고 있습니다 : 당신은 이미 그 대답을했습니다. 그는 또한 합계를 계산하기 위해 답변을 읽지 않았기 때문에 나중에 당신을 비난 할 수 없습니다.
Hofstadter의 법칙 을 포함하는 것을 잊지 마십시오 : Hofstadter의 법칙 을 고려하더라도 항상 예상보다 오래 걸립니다.
일반적으로 CPM / PERT의 수정 된 수식을 사용합니다. 다음과 같습니다.
Mn + Mx + C(T) / 2 + C, where
Mn is the minimum number of hours you think it will take,
Mx is the maximum number of hours you think it will take,
T is the typical number of hours it takes,
and C is a confidence factor from 1 - 3 based on how much you've done similar things.
(멋진 수학 형식을 모두 수행하는 방법을 잘 모르겠습니다. 누군가이 형식을 편집하려면 자유롭게 느끼십시오.)
So, if you think:
Mn = 60 hours
Mx = 180 hours
T = 100 hours
C = 2
Then: 60 + 180 + 2(100) / 4 = 110 hours.
프로젝트 진행 방식에 따라 크게 달라질 수 있다고 강조하고 싶습니다. 며칠마다 프로젝트를 재평가하면 매주 업데이트를 제공 할 수도 있습니다. 그것은 과민 한 고객을 만족시키기 위해 먼 길을 간다. :)
비 기술적 인 사용자에게 모호한 타임 라인을 설명하는 것은 어렵습니다. 이는 프로젝트의 창의적인 단계와 성가신 버그를 추적 할 때 모두 해당됩니다. 두 경우 모두 전통적인 "작업을 더 작은 조각으로 분해"도 작동하지 않습니다.
원래 작업은 후자의 경우에 중점을 두므로 그에 대해 살펴 보겠습니다. 타임 라인을 제공 할 수없는 경우 사용자에게 무엇을 시도하고 언제 다시 연락해야하는지 알려주십시오. 자체 부과 타임 라인의 중간 지점에 도달하면 짧고 정직한 이메일 업데이트를 제공하십시오. 마감 시간 최소 1 시간 전에 정식 답변을 제공하십시오. 이제 당신은 신뢰성이 있습니다. 문제가 해결되지 않으면 최소한 빛이 비추는 것입니다. 시간 낭비처럼 보이지만 그렇지 않습니다.
알려지지 않은로드 블록과 예상치 못한 놀라움을 설명 할 수 없으므로 자신감있게 추정하는 것이 어려울 수 있습니다. 아이디어 :
새로운 개발, 특히 애자일 개발 :
"추가 할 항목이 없을 때가 아니라 제거 할 항목이 없을 때 완벽합니다." -앙투안 드 생 텍쥐 페르
시스템에 대한 친숙한 도메인 지식을 가진 개발자가 거의 없거나 전혀없는 끔찍하게 지나치게 복잡한 시스템에서 오류를 재현하기 위해 거의 불가능한 오류를 수정하려는 노력과 시간을 추정하는 경우 유일한 해결책은 "고정 될 때"입니다.
일반적으로 나는 그들에게 진실을 말할 것입니다. 나는 그들에게 내가 지금 모른다는 것을 말하고, 일주일에 더 나은 통찰력을 가질 수 있습니다. 그런 다음 종이에 딱 맞는 구덩이를 손에 넣습니다. 그들이 당신을 하드 볼링하기 시작한다면, 그냥 "가능하다 ..."로 모든 문장을 시작하세요 또는 그런 것.
개인 소프트웨어 프로세스 (PSP)는 견적 개선에 중점을 둡니다. 이것은 훈련 된 작업 기록에 의해 달성됩니다. 이것은 본질적으로 일반적인 작업에 대한 실제 데이터를 가지기 때문에 추정의 "경험"부분을 다소 "가속화"시킵니다. 물론이 직업에는 여전히 많은 문제에 대한 독특한 해결책이 필요하지만 내 경험에 따르면 PSP를 사용한 후에는 견적이 더 좋습니다.