私たちは皆それを持っています。あいまいなコードと予期しない機能の奇妙さを通して修正と修正を行うことが難しいことが判明した問題。ゆっくりと、パターン、エラー、間違いを見つけようとして、論理的に作業を進めます。このプロセスには時間がかかり、問題はクライアントによって簡単に理解されないことがよくあります。
特にクライアントがソフトウェア開発の固有の複雑さを理解していない場合、「いつ完了するのですか」という質問に対してどのように答えますか?
あなたは質問に正直に答えます。
あなたはそれが難しい問題であり、解決策は明白ではなく、解決するのにどれくらいの時間がかかるかわかりません。進捗状況を[時間枠]ごとに更新することを約束します。そうすることで、彼らはあなたがそれに取り組んでいることを認識し、もちろん実際に更新を送信します。
開発者は、複雑な問題を小さな問題に分解し、個別に解決することでアプローチします。
理想的な世界では、問題の解決は複雑な問題になります[〜#〜] a [〜#〜]および与えられた時間内に、それを小さな問題の短いリストに分解することができます1からAん、最初の複雑な問題を解決するために必要な時間が次のようになるとすれば、時間を評価するたびに時間は簡単です。
[〜#〜] d [〜#〜]は分解自体のプロセスです。
実世界、唯一の問題はt([〜#〜] d [〜#〜])は、実際には、小さな問題の解決に費やす時間よりも大きくなります。つまり、このレベルの問題の分解に到達するには、実際に問題自体を解決する必要があります。
あなたはまだすることができます:
指定されたタスク(問題の解決)を小さなチャンクに分離します。各チャンクは依然として複雑な問題です。
各チャンクの予想時間と対応するリスクを評価します。
たとえば、タスク1には約が必要です。 5時間ですが、ブロックされるリスクが高いため、顧客への期待として12時間を与えてください。
依存関係と、それらが時間に与える影響を評価します。
たとえば、タスク19には2時間必要ですが、リスクは非常に低いので、確かに2時間です。 1.ではない3.しかし、タスク19はタスク24に依存しています。タスク24は、別のアプローチを使用してタスク19のコードを完全に書き直す必要がある方法でタスク19に影響を与える可能性があります。
これらすべての詳細を顧客に伝えます。合計を与えないでください。
最後のポイントは重要です。合計を与える場合、たとえば192時間とすると、顧客はそれが非常に正確なメトリックであると信じており、費やす時間は、たとえば189〜195時間です。
代わりに、あなたが詳細を与えるなら、
気にされるお客様は、それが192時間ではないことを理解します。評価中に決定されたリスクを考えると、すべてがうまくいかない場合は192時間です。すべてがさらに悪化した場合も238時間です。すべて問題なければ、85時間です。
気にならないお客様は、必ずお答えをお読みするわけではありません。彼が望んでいるのは、後であなたを責めることができるようにするための数字だけです。彼は決して読まない非常に詳細な答えを与えることにより、彼はそれが再びかかる時間を尋ねることができないことを知っています:あなたはすでにそれに答えました。合計を計算するために答えを読んでいないので、彼は後であなたを責めることもできません。
推定するものは何でも含めることを忘れないでください ホフスタッターの法則 :ホフスタッターの法則を考慮に入れても、予想よりも常に時間がかかります。
通常、私は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時間前に正式な対応をしてください。今、あなたは信頼性を持っています。問題が解決しない場合、あなたはいくつかの光を放っています。時間の無駄に思えるかもしれませんが、そうではありません。
未知の障害や予期せぬ驚きを説明できないため、自信を持って推定することは困難な場合があります。アイデア:
新規開発、特にアジャイル開発の場合:
「完成するのは、追加するものが何もないときではなく、取り除くものが残っていないときです。」 -アントワーヌドサンテグジュパー
システムを深く理解している開発者がほとんどいないかまったくない、非常に複雑で非常に複雑なシステムで、ほとんど不可能に近いエラーを修正するための労力と時間を見積もる場合、正しい答えは「いつ修正されるか」だけです。
通常、私は彼らに真実を語るだけです。今はわからないことを伝えます。1週間でもっとよくわかるかもしれません。次に、紙にフィットして、それが直感に基づく推測であることを示すことができるのと同じくらい多くの波線がその前にあるボールパークを彼らに渡します。彼らがあなたに固執し始めたら、すべての文を「それは可能です...」で始めてくださいまたはそのようなもの。
パーソナルソフトウェアプロセス (PSP)は、見積もりの改善に焦点を当てています。これは、統制のとれたタスクのロギングによって実現されます。これは、典型的なタスクに関する実際のデータがあるため、本質的には、見積もりの「経験」の部分を多少「加速」します。もちろん、この職業には多くの問題に対する独自の解決策が依然として必要ですが、私の経験では、PSPを使用した後の推定値はより優れています。