私は現在、新しいプロジェクトを見積もっています。1人の開発者がそれに取り組んでいると仮定した私の高レベルの見積もりは25週間です。
実際には、2人の開発者が並行して作業します。見積もりを減らすのに合理的な要因は何ですか?(私はそれが0.5ではないことを理解しています)
私は現在、新しいプロジェクトを見積もっています。1人の開発者がそれに取り組んでいると仮定した私の高レベルの見積もりは25週間です。
実際には、2人の開発者が並行して作業します。見積もりを減らすのに合理的な要因は何ですか?(私はそれが0.5ではないことを理解しています)
元の開発者と新しい開発者に応じて、その25週間を75%も短縮するか(冗談ではありません)、50%増やすことができます(冗談ではありません)。事実は、個々の開発者の間には大きな違いがあります。想定される同様のスキルレベルの開発者は、桁違いに変化することが示されています。
それはすべて、2人の開発者の経験レベル、スキルセット、ドメイン知識、および2人の開発者がどれだけうまく連携しているかにかかっています。一部のチーム(良いチーム)は、パーツの合計よりも優れています。いくつかはもっと悪いです。
一般的に言って、他のすべての条件が同じであれば、コミュニケーションの問題で時間を失うことになります。おそらく、1つから複数に移行するのは約20%だと思います。
やみくもにパーセンテージで増減するのではなく、推定されたタスクを開発者間で分割し、新しい開発者に各タスクにかかる時間を推定するように依頼します。彼らが明らかにダニでない限り、私は彼の見積もりのどれにも疑問を呈しません。
これは、新しい開発者がコードベースなどを学習するのにかかる時間によって異なります。
まったく短縮されない場合があることに注意してください。
追加する開発者によって異なります。結局、実際の開発者だけが、何かをコーディングするのに必要な時間について、いくぶん現実的な見積もりを出すことができます。自分で何かをコーディングする必要がある時間は、他の誰かが必要とする時間とはあまり関係がありません。
元の見積もりを完全に無視して、プロジェクトを2人の間でどのように分割するかを決定することをお勧めします。次に、両方が自分の部分を完了する必要がある期間について、新しい見積もりを行います。次に、開発の両側を統合するための時間を追加します。
このようにして、コードを1つだけではなく、実際にコードをビルドしようとしている開発者からの入力に基づいて見積もりを行うことができます。
すべての通常の警告があります(これを正確に見積もることは不可能であり、多くの場合、開発者を追加すると時間が追加されますなど)。追加の開発者が同様の能力レベルであり、私と同等のスキルセットとプラットフォーム/テクノロジーの経験を持っていると仮定すると、私は通常、追加の開発者を追加することで20%の削減を見積もります。3分の1を追加すると、さらに5%削減されます。その後の削減はありません。
私の経験では、仕事をしている人とは別に見積もりを扱うのは悪い考えです。私は最初に誰が仕事をしているのかを決め、次に彼らと一緒に座って、彼らが仕事を完了するのにどれくらいの時間がかかるかを尋ねます。彼らは、さもなければ見過ごされていたであろう重要な問題を理解するのに役立つかもしれない質問をするべきです。
プロジェクト管理を行う際には、コミュニケーションが最も重要です。仕事をしている人から独立して仕事を扱うことは、あなたが悪い見積もりになってしまうほど多くの要因で行われています。
この質問に対する答えはありません。開発者のスキルレベル、プロジェクトの知識、リソースなどによって異なります。
私の経験では、彼に追いつくのに時間がかかるので、時間の最初の部分は実際にプロジェクトを後退させると思います。
この質問のために単一の数値を考え出す必要がある場合、最初の数週間は-50%、残りは+ 25%と言います:)
これは、提供されているよりも多くの要因に依存します。これを別のプロジェクトと比較できますか?プロジェクトはどれくらい難しいですか?2人の開発者の間で共有されるツールの数はいくつですか?他の開発者はどれくらい熟練していますか?開発者間のコミュニケーションはどの程度効果的ですか?実際に事前のベンチマークがなければ、適切な数値を与えることは非常に困難です。
人員の増加に基づく係数を単純に適用することはしません。当初の25週間の見積もりは、プロジェクトに関連するすべてのタスクの内訳に基づいていたと思います。プロジェクトの2人目の開発者を検討するときは、そのタスクリストを見て、この人がどこで支援できるかを確認する必要があります。彼/彼女が取り組むタスクを特定したら、残りのタスクの元の見積もりを正確に保つことができます。次に、委任しているタスクを完了するために、専門知識、立ち上げ時間などに基づいて、この人が必要とする時間を見積もる必要があります。
見積もりを2つに分割します。
各開発者が2週間の起動を必要としているとすると、元の見積もりは2週間の起動と23週間の作業になります。
開発者を追加すると、プロジェクトにさらに2週間の労力がかかります。
さらに、開発者間の調整のコストを考慮する必要があります。これを見積もる1つの方法は、各開発者が1日5分で互いに開発者と話す必要があると言うことです。あなたの場合、それは1日あたりさらに10分の努力を追加するでしょう。
また、プロジェクトを分割する可能性にも依存します。たとえば、プロジェクトはレイヤーに分割するのに役立ちますか、1つはデータベースを実行し、もう1つはUIを実行します。
ただし、最も重要な要素は、新しい開発者の品質です。それに応じて、生産性への悪影響から何でも得ることができます。つまり、カレンダーの時間が長くなり、半分以下の時間しかかかりません。
上記のように、開発者に依存するだけでなく、作業にも依存します。プロジェクトを十分に細分化できますか?どちらかの開発者が進行するのに影響を与える外部要因はありますか(9か月のパターンではなく3か月で赤ちゃんを産むために2人の女性を追加することはできません)。作業を効果的に分割できるかどうか(分離された領域)を判断し、他のプログラマー(新しい人、またはすでに考えている人)のレベルを理解し、必要な前提条件(サードパーティのインターフェイスなど)を使用して推定値を作成します。予想される変更など)
最初は見積もりが少し増える可能性があると思います。新しい開発者はプロジェクトに精通している必要があり、既存の開発者はプロジェクトについていくつかのことを彼に教えるために時間を費やす必要があるかもしれません...
少なくとも、納期が3か月以内の場合は、おそらくそうはなりません。
個人的には、最初の1か月間は、本質的にネガティブな生産性になると思います。彼らはほとんど何もせず、質問をしたり、物事を壊したりするなど、チームの他のメンバーから離れます。
来月、彼らは損益分岐点に近づき、おそらく少し良くなるでしょうが、基本的には平等に行動し、取り込んでいます。
最終月は、おそらく最初の月に損傷したものを補うでしょう。
その後、彼らはプロジェクトに3か月間参加した後、他の誰よりも生産的になります(それは有能ですが、それ以上長く取り組んできた人ほど有用ではありません)。
(注:これは、追加される開発者が、生産的にスピードを上げることができる開発者を上回らないことを前提としています。たとえば、プロジェクトに2人の開発者を追加し、あなたがしていることについて話し合うことができるのは1人だけです。既存の人への影響を2倍にし、新しい人が進む速度を半分にする可能性があります)。
正確な影響を決定するものは次のとおりです。
1)技術スキル
2)ビジネスドメインの
知識3)特定のプロジェクトに関連する知識
4)チーム全体の規模、特に何人の追加の人をパーセンテージで追加するか
最初の3つを高くし、最後の3つを高くして、比例してチームがあまり変化しないようにします。10人のチームに1人を追加すると、影響は管理可能になります。5人のチームを10人のチームにすると、おそらく3〜6か月間失敗します。
なぜこのようになっているのですか?より多くの人々がコミュニケーションのラインの数を増やし、平均知識レベルを下げ、何かが疑問視される可能性を高め(したがって、議論が再開され、おそらく有用であるかもしれませんが)、機能しているチームへの混乱を増やします。