プログラミングの経験がない場合にプログラミングタスクを見積もる方法 [終了]

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

  •  06-07-2019
  •  | 
  •  

質問

これまで経験のないサードパーティ製のコントロールを使用するプログラミング タスクについて、経営陣から見積もりを求められて困っています。

彼らが見積もりを求める理由は確かに理解していますが、私が出す見積もりは、a) 短すぎて印象が悪くなるか、b) 長すぎて印象が悪くなるかのどちらかになるような気がします。

私が仕事を続けることができるように、経営陣に彼らの負担を軽減するには、どのような見積もりや返答をすればよいでしょうか。

役に立ちましたか?

解決

あなたができる最善の答えは、より正確な見積もりを提供できるように、簡単なプロトタイプを作成する時間を求めることです。ツールや問題に関する何らかの経験がなければ、推定値は本質的に意味がありません。

余談ですが、推定値を長くしすぎると問題が発生することはほとんどありません。予期しない問題が発生し、優先順位が変更され、要件が「更新」されます。要求したすべての時間を使用しなくても、テスト時間が長くなるか、「早期」をリリースできます。

私は常に見積もりを楽観視しすぎており、特に上司に不快な真実を伝える経験と自信がない若いプログラマーの場合、あなたの人生に多くのストレスをかける可能性があります。

他のヒント

秘密を教えます。あなたがその技術の専門家であったとしても、あなたの見積もりは非常に不正確である可能性が高いです。本質的に研究開発の仕事である何かをするとき、それは獣の性質です。残念ながら、経営陣はしばしば製造モデルを適用し、正確な見積もりを要求しようとします。私の主張を説明するために、次の2つの取り組みを正確に推定することの難しさを考慮してください。

A)先月解約した2Kとまったく同じ別の11K傘を製造します。 B)新しい種類の傘を設計し、最初の傘を構築します。

ソフトウェア開発はBですが、Aを想定して見積もりを求めています。

できる最善のことは、タスクを可能な限り最小の部分に分割し(各半日以内)、最終的な数字を3倍にすることです(Spolsky Method)

別の方法として、Steve McConnellには、ソフトウェアエンジニアリングのこの側面に関する本全体(おそらくいくつか)があります。 http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp / 0735605351

Steve McConnell (およびその他)は、不確実性のコーン。基本的に、次のような見積もりを提供します。

作業には3〜9週間かかりますが、4週間が最も可能性が高くなります。

プロジェクトが進行するにつれて、見積もりを調整できます。より多くの作業を行い、必要な労力をよりよく理解するにつれて、より正確になるように見積もりを調整できます。

それは私にとってはうまくいきましたが、プロジェクトの他の利害関係者にプロセスを理解してもらうには、多少の努力が必要になる場合があります。

推定値と信頼レベルの両方を与えることを検討する必要があるかもしれません。つまり、3か月から6か月、6か月から9か月、または9か月で75%の確率で、90% 1年で完了します。

考慮すべきもう1つのことは、" 群衆の知恵"を使用することです。アプローチ。 25〜50人の人がどのくらいかかると思うかを調べて、見積もりを平均します。 Mike Cohnの Planning Poker はこれと非常に似ていると思いますが、1人の開発者だけで計画することは困難です。

見積もりを次のように分類します。

  • 既知の既知;やり方を知っていることをやるのにどれくらい時間がかかりますか。この見積もりは高い自信を持って与えることができるはずです。
  • 既知の未知のもの;やり方がわからないことをするのにどれくらい時間がかかると思いますか。dacracot のような方法を使用して、この推定値にさまざまなレベルの信頼性を与えることができます。
  • 未知の未知;これがリアルタイムブラックホールです。これらは、最も不適切なタイミングで立ち上がり、あなたのお尻に噛みつくものです。予想されるリスクに基づいて、正当な理由を付けて見積もりの​​範囲を指定します。

途中で見積もりや特定のマイルストーンを調整することを提案します。未知の未知は既知の未知になり、経験を積むにつれて既知の未知も既知になるはずです。既知の既知の推定値は、これまでの進捗状況に基づいて調整できます。最初の見積もりを実行し、約 25% が完了した時点で再見積もりを行い、次に 50% で再度見積もり、次に 85% で再度見積もりを行うことができます。各マイルストーンで、タスクにかかる実際の時間に見積もりが収束し始めるはずです。

推定には明確なラベル付けシステムを使用しています...クラスA、クラスB、クラスC。

クラスCの推定値が最初に取得されます。不明のため、プラスまたはマイナス50%と公然と述べられています。彼らが私に彼らにクラスBを与え続けることを望むならば、私は研究するためにお金が必要です。

クラスBはプラスまたはマイナス25%です。時にはこれで十分であり、彼らは私に建設のためのお金を与えてくれます。そうでなければ、より少ないお金とより多くの研究。

クラスAはプラスまたはマイナス10%で、ファイナルアンドゴーまたはノーゴー。それがゴーゴーで、見積もりから離れすぎている場合は、頻繁に早く告白します。

「これまでに経験したことのないサードパーティのコントロールを利用している」というフレーズを削除すると、より大きな問題のより良い説明が得られると思います。

「アジャイル」の場合何かを教えてくれましたが、経営者が継続的にプロジェクトをそのように予測することを期待していると、「見栄えが悪い」ことになります。十分な情報がないために提供できないと言った場合は、高速道路で失敗します。

最大の問題は、あなたが管理できない問題であり、まだ特定していない問題です。どれくらいの頻度で振り返って自分に言ったのですか? 1週間の休暇中に、プロジェクトマネージャーが...を1週間必要とし、妻が妊娠して..."。

私は一生懸命言いたいと思います。「重要なリスク要因を特定し、xx日以内にテストするための成果物のチェックリストを作成することができます。その時点で、別の増分見積もりを提供します。"

そして、彼らが"将来的にそのタイプの信頼できる推定値をあなたに決して与えようとしないことを主張してください。試したら解雇します。"

(誇張されていますが、ほんのわずかです。)

推定すらしません。あなたの見積もりが正しい方法はありません。結局のところ単なる見積もりです。

代わりに、機能を小さな断片(1〜2日以内)に分割し、これらの断片を機能する完全なテスト可能な貴重なコードとして顧客/マネージャーに提供することをお勧めします。そうすれば、彼はあなた自身の日々の進歩を自分自身で見るでしょう。これは、すべての目標に到達していない場合でも、実際に開発が完了したら停止し、完了したと判断できることも意味します。

アジャイルプラクティスの「リリース計画」をご覧ください。および「反復計画」このアプローチの詳細については。

より長い時間の見積もりを求めているが、時間内に見積もっている場合は、見積もって延長を要求するよりもはるかに良いように見えます。

プロトタイプのモックを作成して、時間がかかるのをよく理解できるようにします。経営陣に正直になり、学習曲線の予想外の遅れに予算を立てることができます。

編集:より多くの「反復」を取得できるかどうかも確認できます。締め切り。 「実用的な思考と学習」では、Andy Huntは人々がプロジェクトの終わりに近いプロジェクトの専門家であり、最初は知識が乏しいことを指摘しています。誰もがプロジェクトについて最も知識のない最初の段階で、すべての設計と時間の見積もりを行うことはあまり意味がありません。 「繰り返す」場合締め切りと問題をまとめて解決すれば、より多くの成功が得られます。

正確な推定の多くは自己認識です。たくさんのコードを書いた場合、たくさんのAPIを習得しなければならなかった場合、次のような質問を感じ始めます。

  • 新しいAPIを習得するのにどのくらい時間がかかりますか
  • 新しい言語を習得するのにどれくらい時間がかかりますか
  • 新しいツールセット(コンパイラ/リンカー/ IDE)を習得するのにどれくらい時間がかかりますか?
  • 典型的なタスクを実装するのにどれくらい時間がかかりますか
  • 作業をテストするのにどれくらい時間がかかりますか
  • 作業を展開するのにどのくらい時間がかかりますか

それを通して、次のような感覚をつかむ必要があります:

  • 作成する典型的なバグの数とそれらの分類方法(簡単、難しい、不可能)
  • 導入される複雑さの数(つまり、サードパーティAPIまたはバグのあるAPIの不足のためにリファクタリングが必要、機能の誤解のために再設計が必要、非標準のツール/ビルドプロセス)
  • 中断/外部の問題によりどれだけの時間が失われるか

これらすべてに基づいて、何かがどれくらいかかるかという感覚を養うことができ、仮に直面していても(「APIが健全だと仮定する...」)ひどく不完全な情報。

より良い推定を行うために十分な学習を行うために必要な時間を推定します。たとえば、"わかりません。これで作業したことはありません。良い見積もりを出す前に知っておく必要があるあなたがそれについて学ぶ必要があるを解決するために、おそらくここに見積もりを挿入する必要がありますこれを使用してあなたのプロジェクトを終了します。"

プログラミングをするとき、私は常に自分が本当に必要だと思っていたものを採用し、それに3を掛けて見積もりを出しました。 1週間で仕事ができると思うなら、3週間かかるとクライアントに伝えます。本当に3週間かかると思うなら、クライアントに9週間伝えます。

これを行うことにより、「約束の下で、配信超過」になりました。 -これを成功させることができれば、あなたの人生はずっと良くなり、クライアントは非常に幸せになります。

あなたの場合、推定値を提供する前に、少なくとも自分が何に飛び込んでいるかをある程度理解する必要があります。たぶん、あなたは推定を提供するのにどれくらいかかるかについての推定を提供する必要さえあります。 3を掛けると、クライアントが満足します。

経験のあるものに分けてください。それを切り刻む行為は、あなたが知っていることとあなたが知らないことについてより良いアイデアをあなたに与えます。

ピースが十分に小さくなって、単一の定義済みタスクとみなせるようになると、それらのいくつかは完全に予測不可能になります。これらの場合、作品のサイズに応じて、最初にプロトタイプを作成するか、ある程度の時間をかけます。 2週間から4週間の作業よりも大きな評価できない部分があることがわかった場合は、最初にそれらを切り刻むことに戻ります。

最終的には、いくつかの非常に奇妙な技術的解決策(うまくいくと思うが、確実にはわからない)に行き着き、それが機能するようになると、それらのものをバックアップするためにやるべきことがたくさんあります。不足しているデザインがいくつかあります。そのため、最初のバージョンでは、既知のライブラリまたは非常に単純なアルゴリズムを選択するのが最善です。

タスクを分解できない場合は、十分な経験を持つ人を雇う必要があります(経験の不足は他の方法でもあなたを悩ませるからです)。誰かを雇えない場合は、ランダムに長い期間(6か月から2年)交渉し、乱雑なプロトタイプにまっすぐ進むべきです(何が正しいか、何がわかるかを十分に経験できるまで)違う)。しかし、もしあなたがそれをひらめいたら、あなた自身をからかわず、あなたがそれを正しい「方法」でやっていると思うことが重要です。プロトタイプは捨てられることになっていた。プロトタイプのカウントダウンが完了したら、実際にビルドする準備ができたことを願っています。

ポール。

外部の数字を推測してすぐに評価し、将来の情報が見積もりに影響する可能性があることを知らせますが、それらは最新のものに保ちます。

評価する際には、ウェブ上で公開されているドキュメントまたは毎週更新されるが、常に更新された「推定終了日」と拡張機能の理由(ある場合)を含めて、常に情報を入手してください。

ほとんどのマネージャーは、終了日を尋ねることで、「スケジュールを計画する方法を考えてください」と言っていることを理解する必要があります。 「ただ永遠に取ってはいけません」。

1回または2回以上延長することになった場合は、推定で得た新しい知識に基づいてスケジュール全体を再評価します。

RBが言ったことに加えて、この状況になったときは、使い慣れたツールでどれくらいかかるかを見積もり、その見積もりを2倍して学習曲線を作ります。

重要な部分は、より正確な見積もりを求めている場合、または-神様-販売しようとする場合、見積もりが推測であることを経営者に伝えることです制限時間(スターシップエンタープライズを構築するにはあなただけで2日かかります)銃に付着、妥協しないでください推定、または信頼できないという事実。

管理者があなたとタイムボックスをオーバーライドした場合、タスク"まあ、それは2日以内に行われなければなりません&quot ;、もう一度彼らの見積もりであることを知らせてください。

これをすべて書き留めてください。

仕事では見積もりをかなり扱いますが、それは本当に難しいことです。私の最大の課題の1つは、その開発者がどれだけ熟練しているかを知らずに、別の開発者がタスクを完了するのにかかる時間を見積もることです。

「約束の下で、配信超過」という最初の成功が見られるかもしれませんが、メソッドを使用すると、時間の経過とともに、「約束を超えて、配送中」という他の人に負けてしまうことがわかります。学派。どちらの方法でも、正確性の欠如が戻ってきます。精度は経験と密接に結びついており、テクノロジーの未知数を制限しています。

私がお勧めすることの1つは、見積もりがどのような予算に対して機能するのかを知ることです。予算が少ない場合は、なじみのない技術に夢中にならず、あなたが知っていることに固執しないでください。予算がもう少し柔軟であれば、少し実験する余裕があります。

また、ワイルドアスゲス(WAG)のみを提供できるタスクがいくつかあることも認識してください。これらの場合、見積もりに最小時間を設定し、最大値がわからないことを明確にする必要があります。多くの場合、この種の推定値は、特定の機能/要件が管理者によって切り捨てられる十分な理由です。

これは、プロジェクトマネージャーとプログラマーの両方に不可欠なスキルです(もちろんマスターすることもできます!)、 行われたソフトウェア開発タスクの見積もり(少し)より簡単 。プロジェクトのタスクの見積もりを改善するのに役立つと思います。

上記のすべての回答は、見積り自体の作成に関するほぼすべてを網羅しています。

私が強調することの1つは、見積もり(ジョエルのような小さなExcelスプレッドシート、または非常に単純な場合はメモ帳のドキュメント)を追跡し、毎日これを最も正確な数値に更新することです提供できるようになりました。これを上司に渡す必要がない場合でも、これを最新の状態に保つことで、状況がどのように進行しているかについてより良いアイデアを得ることができます。さらに重要なのは、なぜ作業が進むにつれて見積もりが変わります。

これを行うことにより、この特定のテクノロジーと、これまでに使用したことのない他のテクノロジーの両方について、将来の予測が改善されます。単に、一定の間隔で期待が変化したときに気付く必要があるためですなぜそうなったのか。

何かにかかる時間を見積もることは、あなたの仕事の一部です。期限ではなく推定値であると理解されている限り、心配する必要はありません。コードを書こうとしている人ほど、見積もりを提供するのに適した場所はありません。適切な見積もりを提供できない場合、経営陣に悪い見積もりに付随するリスクを認識させる必要があります。そうすることで、これらの未知のサードパーティのコントロールに対するプログラミングのリスクを取る価値があるかどうかを再検討できます。

これは非常に一般的な状況です。未知のものに対処する必要性。これに取り組むための便利な方法は、実際のプログラミングタスクに加えて、やることがいくつかあることを認識することです。

このような状況にあるとき、プロジェクトは突然R& Dプロジェクトになり、プログラムを学習および制作しているので、通常よりも長い時間がかかっても見た目が悪くなりません。学習の速さや、発見した問題に対処するために必要なリソースはわかりません(Stack  Overflowは選択肢の1つです)。

いつものように見積もってから、1.5(あなたが高速学習者で質問を解決するためのリソースにアクセスできる場合)または平均学習者で自分だけに依存している場合は2.5を掛けるべきだと思います。

これが役立つことを願っています!

タスクを管理しやすい部分に分割するよう最善を尽くしてください。運が良ければ、関連するサードパーティ コンポーネントに関連する特定のタスクや、それほど結合されていない (したがって推定が容易な) タスクもあります。経営陣に分割した見積もりを渡し、最も不確実な見積もりがどこにあるかを指摘します。

遊んでプロトタイプを作ってみようという人に私は完全に同意します。プロトタイピング アクティビティの固定タイムボックスを設定します。(「見積もりの​​この部分を改善するには、まず 2 日必要です。」)

範囲を教えてもらえますか? 40-60時間、そのようなものですか?

タスクが小さければ小さいほど難しくなります。グループ化できる場合は、もう少し「ずさん」になります。エラーはプロジェクトの終了時にバランスがとれる可能性があるためです。

経験がある分野を調べ、ガイドとして使用します。 「前回、データベースを変更する機能を作成するのにXが必要だった」幸運を祈ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top