管理者が、これまで経験のないサードパーティ製のコントロールを使用しているプログラミングタスクの見積もりを求めるのに苦労しています。
私は彼らが見積もりを求めている理由をはっきりと理解していますが、私が与える見積もりは、a)短すぎて見栄えが悪い、またはb)長すぎて見栄えが悪いかのように感じます。
私が仕事を続けることができるように、彼らに背を向けさせるためにどのような見積もりまたは返信を経営者に与えることができますか?
あなたが与えることができる最良の答えは、より正確な見積もりを与えることができるように迅速なプロトタイプをノックアップする時間を求めることです。 someツールまたは問題の経験がないと、与える見積もりは基本的に意味がありません。
余談ですが、見積もりが長すぎると問題が発生することはほとんどありません。予期しない問題が発生し、優先順位が変更され、要件が「更新」されます。要求した時間をすべて使用しなくても、テスト時間が増えるか、「早期」にリリースできます。
私の見積もりでは常に楽観的でしたが、特に経験と自信に欠けて上司に不快な真実を告げる若いプログラマーである場合、それはあなたの人生に大きなストレスを与える可能性があります。
秘密を教えます。あなたがその技術の専門家であったとしても、あなたの見積もりは非常に不正確になる可能性があります。本質的にR&Dタスクである何かをするとき、それは獣の性質です。残念ながら、経営陣はしばしば製造モデルを適用しようとし、正確な見積もりを要求します。私のポイントを説明するために、次の2つの取り組みを正確に推定することの困難さを考えてください。
A)先月作り出した2Kとまったく同じ別の11K傘を製造します。 B)新しい種類の傘をデザインし、最初のものを作ります。
ソフトウェア開発はBですが、Aを想定した見積もりを求めています。
あなたができる最善のことは、タスクを可能な限り最小の部分に分割し(各1日2日以内)、次に、最終的な数を3倍にすることです(スポルスキー法)。
あるいは、Steve McConnellは、ソフトウェアエンジニアリングのこの側面に関する1冊の本(おそらく数冊)を持っています。 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年で完了しました。
もう1つ検討する必要があるのは、「 群衆の知恵 」アプローチを使用することです。周りを回って、25〜50人に、それがかかると思っている時間と平均を見積もります。 Mike Cohnの Planning Poker は、これに非常に似ていますが、1人の開発者だけで計画するのは難しいと思います。
見積もりを次のように分類します。
途中で見積もりと特定のマイルストーンを調整することを提案します。未知の未知数は既知の未知数になり、既知の未知数は経験を積むにつれて既知の既知数になり、既知の既知数の推定値はこれまでの進捗状況に基づいて調整できます。最初の見積もりを行い、約25%完了したら再度見積もり、次に再び50%、次に再び85%で見積もりを行うことができます。各マイルストーンで、見積もりはタスクが実際にかかる時間に収束し始めるはずです。
見積もりには明確なラベル付けシステムを使用しています...クラスA、クラスB、クラスC。
クラスCの推定値が最初に得られます。それは未知数のためにプラスまたはマイナス50%として公然と述べられています。彼らが私にクラスBを与え続けることを望んでいるなら、私は研究するのにお金が必要です。
クラスBはプラスまたはマイナス25%です。時々これは十分であり、彼らは私に構築するためのお金を与えます。そうでなければ、より少ないお金とより多くの研究。
クラスAはプラスまたはマイナス10%で、最終的なものであり、合格または不合格です。それが行き先であり、私が見積もりから離れすぎている場合、私は頻繁にそして早く告白します。
「私が以前に経験したことのないサードパーティのコントロールを利用している」というフレーズを削除すると、より大きな問題をより適切に説明できるようになると思います。
「アジャイル」が私たちに何かを教えてくれた場合、それは、経営陣が継続的にプロジェクトをそのように見積もることを期待している場合です。十分な情報があれば、あなたはFAILへの高速道路にいます。
最大の問題は、あなたが制御できず、まだ特定されていない問題です。どのくらいの頻度で振り返って自分に言いましたか。「まあ、私はボタンで見積もりを出しました。3回目の試行で、それがわかった後、そしてバージョンが必要であることがわかりました。そして、dbaはオンになります。 1週間の休暇と、プロジェクトマネージャーが...を1週間必要とし、妻が妊娠していて... ".
「重要なリスク要因を特定し、xx日以内にそれらをテストするための成果物のチェックリストを考え出すことができます。その時点で、別の増分見積もりを提供します。」
そして、あなたが彼らに「私は将来そのタイプの信頼できる推定値を決して与えようとしないことを主張してください。私が試みたら私を解雇してください」と提案できれば、それは本当のニースでしょう。
(誇張されていますが、ほんの少しです)
推定しようとしないでください。見積もりが正確になる方法はありません。結局のところ、それは単なる見積もりです。
代わりに、機能を小さな部分(たとえば、1〜2日以内)に分割し、これらの部分を実用的で完全なテスト可能な価値のあるコードとして顧客/マネージャーに提供することをお勧めします。そうすれば、彼は日々の進捗状況を自分で確認できます。これはまた、すべての目標を達成していなくても、実際に開発が終了したら、開発を中止して完了したと判断できることを意味します。
このアプローチの詳細については、アジャイルプラクティスの「リリース計画」と「反復計画」をご覧ください。
より長い時間の見積もりを求めても、時間内にそれを行う場合は、見積もりを下回って延長を要求する必要があるよりもはるかに良く見えます。
プロトタイプを模擬して、所要時間をよりよく理解できるようにします。経営陣に正直になって、学習曲線の予期せぬ遅れに予算を割り当てられるようにします。
編集:また、より「反復的な」締切を取得できるかどうかも確認できます。 「実用的な思考と学習」では、Andy Huntは、人々がプロジェクトの終わりに近いプロジェクトの専門家であり、最初は知識が少ないことを強調しています。誰もがプロジェクトに精通していない最初の段階で、設計と時間の見積もりをすべて行うことはあまり意味がありません。期限を「繰り返し」、問題をチャンクで解決すると、より多くの成功が得られます。
正確な見積もりの多くは自己認識です。たくさんのコードを書いたり、たくさんのAPIを学んだりしなければならなくなった場合、次のような質問を感じ始めます。
その間、次のようなことを理解する必要があります。
これらすべてに基づいて、物事がどれほど長くかかるかという感覚を養い、ひどく不完全な情報に直面しても、想定を述べることができます(「APIは正常であると想定しています...」)。
たとえば、「わからない:これまでこれで作業したことがない。たぶん私にかかるだろうここに見積もりを挿入する =ワークアウトするためにそれについて学ぶ必要があることこれを使用して終了するための適切な見積もりを与える前に知っておく必要があるプロジェクト。 」
経験のあるものに分解します。それを切り刻む行為はあなたがあなたが知っていることとあなたが知らないことについてのより良い考えをあなたに与えるでしょう。
断片が十分に小さく、それらが単一の定義されたタスクと見なされると、それらのいくつかは完全に見積もることができなくなります。それらの場合は、最初にプロトタイプを作成するか、作品のサイズに応じて、ある程度の時間を残してください。 2週間から4週間の作業よりも大きく見積もれない部分がある場合は、最初にそれらを切り刻んでください。
結局、あなたはいくつかの非常に奇妙な技術的解決策(あなたはうまくいくはずだと思うが、確かではありません)に行き、それがうまくいったら、それをバックアップするために行われる多くの仕事をするでしょう。いくつかの不足しているデザインが存在するでしょう。そのためには、いくつかの有名なライブラリまたは初期バージョンの非常に単純なアルゴリズムを選択するのが最善です。
タスクを分解できない場合は、十分な経験を持つ人を雇う必要があります(経験の不足は他の方法でも悩まされることになるため)。誰かを雇うことができない場合は、ランダムに長い期間(6か月から2年)だけ交渉して、乱雑なプロトタイプにまっすぐ進む必要があります(何が適切で何が正しいかを知るのに十分な経験を自分自身に与えることができるまで)違う)。しかし、もしあなたがそれに失敗するなら、自分を子供にしないで、あなたがそれを正しい「やり方」でやっていると思うことが重要です。プロトタイプは破棄されることを意図していた。うまくいけば、プロトタイプのカウントダウンが完了したら、それを実際に構築する準備が整います。
ポール。
プログラミングするとき、私はいつも私が本当に思っていることをとっていました。 1週間で仕事ができると思う場合は、クライアントに3週間かかると伝えます。本当に3週間かかると思う場合は、9週間と伝えます。
これを行うことで、私は自分を「約束の下、やり過ぎ」に設定します。これを成功させることができれば、あなたの人生ははるかに良くなり、クライアントは非常に幸せになります。
あなたのケースでは、見積もりを提供する前に、少なくともあなたが何に飛び込んでいるのかを少なくともある程度理解したいと思うでしょう。おそらく、見積もりを提供するのにかかる時間について見積もりを提供する必要さえあるでしょう。 3を掛けると、クライアントが満足します。
それは、プロジェクトマネージャーとプログラマーの両方に必要な(そしてもちろん、習得できる)必須のスキルです、私は記事を見つけました推定ソフトウェア開発タスクの作成(少し)より簡単に)、これはプロジェクトのタスクのより良い推定に役立つと期待しています。
外部の数字を推測してすぐに評価を開始し、将来の情報が推定に影響する可能性があることを知らせますが、それらを最新の状態に保ちます。
評価する際は、ウェブ上で公開されたドキュメントまたは毎週の更新を通じて、常に通知しますが、更新された「推定終了日」と拡張の理由(ある場合)を常に含めます。
ほとんどのマネージャーはそれを理解する必要があります-終了日を尋ねることによって、彼らは本当に「スケジュールをどのように計画することができるかについていくつかのアイデアを与えてください」と「永遠に時間を取らないでください」と言っています。
最終的に1回または2回以上延長する場合は、見積もりで吸い込んだ新しい知識に基づいて、スケジュール全体を再評価します。
RBの発言に加えて、この状況で自分が慣れているツールでかかる時間を見積もり、その見積もりを2倍にして、学習曲線を作成します。
重要な部分は、見積もりがguessであることを経営陣に伝えることです。彼らがより正確な見積もりを求めている場合や、彼らが-神様へ-sell時間制限を求めている場合(確かにあなた 2日でスターシップエンタープライズを構築できます。あなたは元気です)あなたの銃にこだわる、あなたの見積もりを妥協しないでください、またはそれが信頼できないという事実。
管理者があなたとタイムボックスをオーバーライドする場合、タスク「まあ、それは2日以内に完了する必要があります」と、もう一度言いますtheir見積もりです。これは、自分の見積もりとまったく同じです。
書面でこれをすべて入手してください。
私は自分の仕事でかなり見積もりを扱っており、それは本当の挑戦です。私の最大の課題の1つは、別の開発者がどれだけ熟練しているかを知らずにタスクを完了するのにかかる時間を見積もることです。
「約束未満、過大」の方法で最初の成功が見られるかもしれませんが、時間が経つにつれて、「過大保証、過小」の考え方を実践する他の人々に負けてしまいます。どちらの方法でも、正確さに欠けると戻ってきます。精度は、テクノロジーの経験と未知数の数を制限することに非常に関連しています。
私が提案する1つのことは、あなたの見積もりがどのような予算に反するかについていくらかのアイデアを得ることです。予算が少ない場合は、なじみのないテクノロジーに夢中になることなく、知っていることに固執してください。予算がもう少し柔軟であれば、少し実験する余裕があります。
また、提供できるのはワイルドアスゲス(WAG)だけのタスクがあることも認識してください。これらについては、推定に最小時間を設定し、最大値がわからないことを明確にする必要があります。多くの場合、この種の見積もりは、特定の機能/要件が管理者によって除外される十分な理由です。
これは非常に一般的な状況です。未知のものに対処する必要があります。これに取り組むための有用な方法は、実際のプログラミングタスクに加えて、いくつかの学習が必要であり、経営陣がそれを認識している必要があることを認識することです。
あなたがこのような状況にあるとき、プロジェクトは突然R&Dプロジェクトになり、プログラムを学び、制作しているので、通常より長い時間があなたを悪く見せるわけではありません。どのくらいの速さで学習しているのか、また問題が発生した場合に対処しなければならないリソースはわかりません(スタックオーバーフローは選択肢の1つです)。
いつものように見積もり、1.5を掛ける必要があります(高速学習者であり、質問を解決するためのリソースにアクセスできる場合)、または平均的な学習者であり、自分だけに依存している場合は2.5を掛けます。
これが役に立てば幸いです!
上記のすべての回答は、見積もり自体の作成に関するほとんどすべてをカバーしています。
私が強調したいことの1つは、見積もり(小さなExcelスプレッドシート、ラジョエル、または非常に単純な場合はメモ帳のドキュメント)を追跡し、毎日の終わりに、これを提供できる最も正確な数値に更新することです。 。これを上司に返す必要がない場合でも、これを最新の状態に保つことで、状況がどのように進んでいるかについてより良いアイデアを得ることができ、さらに重要なことにwhy作業が進むにつれて見積もりが変わります。
これを行うと、この特定のテクノロジーとこれまでに使用したことがない他のテクノロジーの両方について、将来の見積もりがより良くなります。これは、一定の間隔で期待が変化するときに気づき、それが起こった理由を解明する必要があるためです。
何かにかかる時間の見積もりは、あなたの仕事の一部です。締め切りではなく見積もりであると理解されている限り、心配する必要はありません。コードを書こうとしている人ほど、見積もりを出すのに適した場所はありません。適切な見積もりを提供できない場合は、経営者に悪い見積もりに付随するリスクを認識させ、これらの未知のサードパーティコントロールに対するプログラミングのリスクを取る価値があるかどうか再検討できるようにする必要があります。
範囲を指定できますか? 40-60時間、そのような何か?
タスクが小さいほど難しくなります。それらをグループ化できる場合は、プロジェクトの最後でエラーのバランスが取られるため、「スロップ」が少し増えます。
経験のある領域を見て、ガイドとして使用します。 「前回は、データベースを変更する機能を作成するためにXが必要でした。」幸運を。
タスクを管理可能な部分に分割するために、一生懸命頑張ってください。運がよければ、関係するサードパーティコンポーネントに関連する特定のタスクと、結合が少ない(したがって、推定が容易な)タスクがあります。経営陣に分割された見積もりを与え、最も不確実な見積もりがどこにあるかを指摘します。
遊び回ってプロトタイピングすることを提案した人には完全に同意します。プロトタイピングアクティビティの固定タイムボックスを設定します。 (「見積もりのこの部分を改善するには、最初に2日必要です。」)