ソフトウェア開発における 80/20 ルールを回避する方法

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

  •  03-07-2019
  •  | 
  •  

質問

私のプロジェクトが何であっても、私は仕事の 80% をかなり早く終わらせているようです。ユーザーと管理者は、物事が予定よりはるかに進んでいると考えて興奮していますが、残りの厄介な 20% の作業には、前の 80% の 4 倍の時間がかかるようです。プロジェクトの定期的なチェックインやスタンドアップを行うと、「はい、これまでのところ順調に進んでいますが、やるべきことがまだかなり残っています...」と壊れた記録のように感じます。

ほとんどの場合、私の見積もりはかなり正確ですが、私も人間です。最後の 20% の作業に実際には 80% の時間がかかることをユーザーに納得させるための最良のアプローチは何でしょうか?IT は簡単で、指を数本鳴らすだけで魔法が起こると信じているユーザーや経営者が増えているようです...

一般に、私たちはかなり低いレベルでタスクを追跡しています。必ずしもラベルやテキストボックスの作成ではありませんが、かなり詳細に説明しています...また、すべてのタスクの完了までの見積もりも追跡します。プロジェクトの途中では、最初の見積もりよりもこの数字の方が重要だと私は感じています。

それはユーザーと運営側の認識の問題だと思います。たとえ見積もりが完成するまではわかっていたとしても、彼らは自分が見ているものに対する感情や認識に囚われてしまい、見積もりの​​数字は後回しになってしまいます。これが私が期待を封じ込めたり管理したりする方法を見つけようとしているものです。


編集
これはかなり主観的なものなので、コミュニティ Wiki に変更します。最初からそうなるべきだった。

役に立ちましたか?

解決

ホフスタッターの法則を考慮した場合でも、常に予想より時間がかかります

しかし、私はそれます。

悲しいことに、ベストプラクティスは経験です。 スクラム方式 リリース日がより正確な日付に常に更新されるため、一部の種類のソフトウェア開発には非常に役立ちます。 (スクラムに関する簡単なビデオ)

他のヒント

完成してすぐに最初の 80% を見せないでください。点滴で餌を与えます。

おそらく、作業のスケジュール設定とチェックイン/レポートの両方のために、取り組んでいるタスク/機能を小さな単位に分割する必要があるでしょう。たとえば、私のスケジュールには 2 日を超える個別の項目はほとんどありません。

そうすれば、スクラムで 2 週間毎日「新しいマペット メーカーに取り組んでいます」と言う代わりに、「現在、マペット メーカーの目のセレクターに取り組んでいます」と言うことができます。

スケジュールに基づいて仕事をしていて、そのスケジュールが正確であれば (つまり、スケジュールが 80% と 20% の両方を占めているということです)、管理者は特に問題はありません。「ほぼ完成」しているため、割り当てられた時間を短縮できるとほのめかしている場合は、仕様の未実装部分を示してください。

私は、何かが何をすべきか、どのように動作すべきか、そして対処しなければならないエッジケースを詳述する何らかの形式の機能仕様に基づいて作業していると仮定しています。もしそうなら、経営陣の感情や認識を心配するのは私にとって非常に奇妙に思えます。経営陣は仕様をあなたの仕事と比較したり、あなたのスケジュールを読んで何が残っているかを確認したりする能力が十分にあるはずです。

仕事量はどのように見積もるのでしょうか?「残りの作業の厄介な 20% には、前の 80% の 4 倍の時間がかかるようです」とおっしゃっていますが、作業の「20%」が残っており、「80%」と​​いう推定はどのようにして得られたのでしょうか。終わり?明らかに見積もりが間違っています。実際には作業の 20% だけが完了しており、80% が残っています。

ソフトウェア開発では、かなり前から正確な見積もりを行うことは非常に困難です。唯一の方法は、作業を管理可能な小さな部分 (おそらくそれぞれ 10 時間未満) に分割することです。正確に見積もることができるのは、当面の次のステップのみです。

進捗状況の推定に役立ついくつかのプラクティスがスクラムにあります。次のスプリント (1 か月以内) で実行される作業の範囲はスプリントの開始時に固定され、各作業に大まかな見積もりが与えられます。スプリントの後、チームはどれだけの進捗があったのか、どれだけがまだ不足しているのか、見積もりがどの程度正確であったのか、何がチームを遅らせているのかを振り返ることができます。スクラムやその他のアジャイル手法では、何が行われたのか、プロジェクトがどの程度進んでいるのかについてのフィードバックを迅速に得ることが重要なポイントとなります。それらについて詳しく読むことをお勧めします。 スクラムに関するビデオ オラファー・ワーゲがリンクしたもの 彼のメッセージ 優れた簡単な紹介を提供します。

時間の見積もりに関しては、これが私の経験です。

  1. タスクにかかる時間が 4 時間未満であると断言できない場合は、タスクを正確に見積もることはできません。それをより小さな部分に分割し、再帰的に繰り返します。

  2. このような時間の見積もりを作成するのはピクニックではなく、時間がかかります。基本的に、プロジェクト全体を管理可能な部分に分けて解決する必要があります。つまり、要件を変更すると、タイム プランも変更されることになります (驚くべきことではないでしょうか?)。 )

  3. 最大の問題は、すべての詳細を予測することは不可能であるということです (おそらく 20% くらいでしょうか?)残りの 80% は未見積りのままにしておきます...) - 他の人がすでに指摘しているように、SCRUM を参照してください。

  4. 実行には「時間がかかりすぎる」ため、経営陣がそのような詳細な時間の見積もりを「受け入れる」ことはめったにありません。

しかし、経営者は利益を上げることに関心があると同時に、手を抜くことにも関心を持っています。したがって、実際の生活のシナリオに基づいて、可能な限りカットできる部分を特定し、高度な妥協を行う必要があります。経営陣の支援があれば、何もしなくても最後の 20% の多くは達成できます (ある意味悲しいことだと思いますが、それでも真実です)。

なぜなら、最終製品の残り 20% に相当する作業の残り 80% は、実際に磨きをかけ、バグを修正し、変更された要件に適応するためです。初回限定版など工夫を凝らすことも可能かもしれません。

スティーブ・マコネルの素晴らしい本を読んでください 急速な発展 これには、80/20 問題やその他のソフトウェア見積もりの​​気まぐれな点について多くのことが言えます。

これ以上うまく言えるとは思えない ジョエル とやる 痛みのないソフトウェアスケジュール.

マネージャーに見積もりを減らす場合は、何をすべきかを示します。リックの見積もりと呼ばれるスケジュールに新しい列を作成します(もちろん、あなたの名前がリックだと仮定してください。)あなたの見積もりをそこに入れます。マネージャーに、Currest列で必要なことを何でもさせてください。上司の見積もりは無視してください。プロジェクトが完了したら、誰が現実に近いかを確認してください。特に、マネージャーがあなたがどれほどゆっくりと働くことができるかを見るために彼らがコンテストに入ったことに気付いたとき、私はこれが驚くべきことを驚かせることを発見しました!

プロジェクト時間の最初の 90% は作業の 90% に使用され、プロジェクト時間の残りの 90% は残りの 10% または作業に使用されると言われています。;)

プロジェクトの開始時に最も簡単な部分を最初に実行するだけで、大きな進歩が得られるのは自然なことです。また、コードの最初の 80% に問題がある場合、多くの場合、すべてが統合されて実際にすべてのコードをテストできるようになるまで、問題は明らかになりません。

おそらく経験者として、90% が完了したアプリケーションを人々に試してもらい、最後の 10% がどのような違いをもたらすかを理解してもらうべきでしょう...

時間の見積もりに非常に役立つことをいくつか発見しました

  1. コードベースに精通していること。仕様を聞いて、「クラス A、B、C を触る必要がある - それ以上でもそれ以下でもない」と考えることができれば、かなり正確に理解することができます。これは、どの特定の関数を記述する必要があるかを知るよりもうまく機能することがわかります。そうすれば、何を書く必要があるのか​​がわかるからです。 しないでください 書く必要がある。
  2. テスト、バグ修正、展開、直前のリクエストも忘れずに含めてください。大量のレコードを移行する必要があることは忘れられがちです。
  3. ある程度、言語に慣れていること。どのライブラリが必要になるかがわかっていれば、何を必要とするのかが理解しやすくなります。 しないでください しなければなりません。

私もこれを同僚の速度を概算するのにかなりうまく使いました。必要なのは、彼らがどれくらいの速さで機能を開発できるか、そしてそれがどれだけ優れたものになるかについての経験的な観察だけです。 実際にテストしてみます。

80/20 現象の根本的な原因の 1 つは、困難なタスク (場合によっては些細なタスク) でも常に予期せぬことが発生することです。例えば:ソフトウェア設計プロセスで義務付けられているドキュメントは、一部の熱心なプロセス マネージャーのおかげで、突然新しいテンプレート形式を取得することになります。突然、新しいリリースに合わせてドキュメントを更新するだけの単純な問題ではなくなり、それぞれのドキュメントを再構築する必要があり、すべての作業に大幅に時間がかかります。

この種の現象に対処するために私が聞いた最良の推奨事項の 1 つは、常にプロジェクト スケジュールにバッファー サブタスクを組み込むことです。 リチャード・ホワイトヘッド. 。すべての主要なタスクは、そのタスクのサブタスクとして示される 20% の時間増加 (またはその程度のどこか) を受けます。それぞれの目的は、そのタスクで「問題が発生した」ときに何が起こるかを測定することです。著者は、経営陣がこれらのバッファタスクを削除しようとすることが多いことを認めています(そして私もそれが真実であることがわかりました)。唯一の手段は、自分の立場を守るか、ジョエルの擁護者のように策略を講じることです(@Caseyがすでに述べたように)。実際に、かなりの数のバッファ サブタスクが通常は残っており、タイトなスケジュールの中で何度か助けられたことがわかりました。

最良の方法は、各タスクの完了率を示してスケジュールを最新の状態に保つことであることがわかりました。そうすれば、進捗状況が非常に明確になります。それを経営陣に伝えれば、彼らはあなたが常にどこにいるのかを理解するはずです。

80% と 20% をまとめてタスクの見積もりを作成している場合、スタートは悪いと思います。見積もりを分割します。80% と 20% の 2 つの明示的なタスクを作成します。必要に応じて、簡単な部分と難しい部分。

そうすれば、作業全体に対してより現実的な時間を事前に見積もることができ、本番環境で詳細を追跡しやすくなります。

計画するときは、それを考慮してください。サブタスクの実行にかかる時間を見積もるときは、「基本的に完了」ではなく「完了」を見積もってください (経験から「完了」にどれくらい時間がかかるかを見積もってください)。統合、文書化、整理、テスト、テスト後のバグ修正、展開などを、他のタスクに吸収される小さなタスクとして無視したいという誘惑に抵抗してください。

最終的には恐ろしいほどの高額な見積もりが得られることになります。ただし、それが以前のプロジェクトに費やされた実際の時間と一致していないかどうかを自問してください。

できる限り正確な見積もりを提供し、プロジェクトに対して可能な限りの透明性を提供するように努めてください。常に見積もりに近い数字を達成しているのであれば、マネージャーは十分に満足できるはずです。非常に非常に難しいことを覚えておいてください 生産性を測定する.

それはユーザーと運営側の認識の問題だと思います。たとえ見積もりが完成するまではわかっていたとしても、彼らは自分が見ているものに対する感情や認識に囚われてしまい、見積もりの​​数字は後回しになってしまいます。これが私が期待を封じ込めたり管理したりする方法を見つけようとしているものです。

最初にアルゴリズムを作成します...次にUI。

対象期間を短くしてください。今後数か月で行うよりも、数週間で何をするかを見積もるほうが簡単です。プロジェクトを短いマイルストーンに分割することを検討してください。1 か月、あるいはおそらく数か月は、何をしようとしているかによって異なります。これは基本的にスクラムが行うことです。次に、現在のマイルストーンで行う予定の作業のみを最も正確に見積もります。次のマイルストーンに到達し、見積もりの​​基礎となるデータがさらに増えたら、そのマイルストーンを再見積もりします。最後の 20% にこれほど時間がかかる理由の 1 つは、十分な知識がないのに事前に見積もりを行っている可能性が高いことです。

また、試してみてください ワイドバンド デルフィ 推定技術。これにより、おそらく考慮されていない隠れたコストがさらに明らかになります。

「はい、これまでのところ順調に進んでいますが、やるべきことがまだかなり残っています...」と言うのは、自分の主張を理解する最良の方法ではないかもしれません。それを聞いたマネージャーやクライアントは、「はい、やるべきことはまだたくさん残っていますが、彼はこの部分をとても早くやってのけたので、残りは最小限で済みます」と考えるかもしれません。

代わりに、残りの作業を必ず特定し、スケジュールを設定してください。こうすることで、プロジェクトの残り 20% でどこにいるべきかを示すことができます。時間がかかりすぎると、スケジュールにプロジェクトが遅れていることが表示され、ある程度の緊急感が高まるはずです。

タスクを毎週更新してください (または、ステータス レポートを定期的に発行してください)。特に他の領域が依存している場合、遅れをとる危険がある領域を特定します。

できることなら、約束を低くし、約束を超過するのが最善だと思います。

あなたの推定が正しければ、その厄介な 20% をあなたが占めていることになります。あなたは明らかにそうではなかったので、それが問題になっているのです。

もしかしたら、あなたは彼らが望むすべてを与えようとしているかもしれませんが、それは非現実的です。おそらく、マーフィーの法則を完全に考慮していないか、テスト、バグの発見、再テストなどに十分な時間を与えていなかったのかもしれません。

もう少しリスク管理をしたほうが良さそうですね…

作業の最後の 20% に最初の 80% の 4 倍の時間がかかっていることが常にわかっている場合は、技術的負債を増大させていないかについて自分自身 (または信頼できる同僚) と正直に話し合う時期が来たかもしれません。最初の 80% で調子が良くなり、最後には辛くなります。

それは、変更を検討できる仕事のやり方を物語っているかもしれません。

技術的負債を抑えるための私が知っているベスト プラクティスの 2 つは、適切なテストを書くこと (コードを書く前が望ましいですが、あとがきだけでも構いません) と、すべてのタスクの後にリファクタリングすることです。リファクタリングは、月末ではなく、毎食後にキッチンを掃除することだと考えてください。

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