どのような状況で(もしあれば)、プログラマーをチームに追加することで、すでに遅れたプロジェクトの開発が実際にスピードアップしますか?
どのような状況で(もしあれば)、プログラマーをチームに追加することで、すでに遅れたプロジェクトの開発が実際にスピードアップしますか?
回答:
正確な状況は明らかにプロジェクトに非常に固有です(たとえば、開発チーム、管理スタイル、プロセスの成熟度、主題の難しさなど)。これを少し詳しく調べて、単純化しすぎないことについて話せるようにするために、質問を再説明します。
遅れているソフトウェア開発プロジェクトにチームメンバーを追加すると、既存のチームが完了まで作業を許可された場合と同等の品質レベルで、実際の出荷日が短縮される可能性があります。
これが(特定の順序ではなく)発生するために必要であるが十分ではない、と私が思う多くの事柄があります:
最初に検討する必要があることの1つは、出荷日を遅らせることができるかどうか、機能をカットできるかどうか、および2つを組み合わせて既存のスタッフとのリリースに満足できるかどうかです。多くの場合、投資に見合う価値を提供しないチームのリソースを本当に消費している2つの機能があります。したがって、プロジェクトの優先順位を真剣に検討してから、何よりも優先してください。
上記の段落の結果が十分でない場合は、上記のリストにアクセスしてください。スケジュールスリップを早く見つけた場合は、適切なタイミングで適切なチームメンバーを追加すると、リリースを節約できます。残念ながら、予定出荷日に近づくほど、人の追加で問題が発生する可能性が高くなります。ある時点で、「現在の開発ブランチを出荷する以外の)変更によってリリースを節約できない「ノーリターンオブポイント」を越えることになります。
私は何度も続けることができましたが、私は主要なポイントを打ったと思います。プロジェクトの外で、あなたのキャリア、会社の将来の成功などに関して、あなたが間違いなくやるべきことの1つは、あなたが遅れた理由を理解することです。将来それを防ぐために取る。通常、プロジェクトが遅れるのは、次のいずれかが原因です。
お役に立てば幸いです。
リソース駆動型プロジェクトがある場合にのみ役立ちます。
たとえば、次のことを考慮してください。
大きなポスター、たとえば4 x 6メートルを描く必要があります。とても大きなポスターです。おそらく、その前に2〜3人を置いて、並行してペイントさせることができます。ただし、その前に20人を配置しても機能しません。さらに、安っぽいポスターが必要でない限り、熟練した人が必要です。
ただし、プロジェクトに封筒を印刷済みの文字で埋め込む場合(たとえば、あなたが勝ったかもしれません!)、追加するユーザーが多いほど、処理が速くなります。仕事のスタックを実行するのにいくらかのオーバーヘッドがあるので、あなたが一人の広報を持っているところまで利益を得ることができません。封筒ですが、2〜3人以上のメリットがあります。
したがって、プロジェクトを小さなチャンクに簡単に分割でき、チームメンバーがすぐに(たとえば...すぐに)スピードを上げることができる場合は、さらに多くの人を追加すると、ある程度までは速くなります。
悲しいことに、私たちの世界ではそのようなプロジェクトはそれほど多くありません。そのため、神話のマン・マンスに関するdocgnomeのヒントは本当に良いアドバイスです。
おそらく次の条件が当てはまる場合:
これらすべてを一度に初めて見たときにお知らせします。
Mythical Man-Monthによると、後期プロジェクトに人を追加する主な理由は、O(n ^ 2)通信オーバーヘッドです。
私はこれに対する1つの主な例外を経験しました。プロジェクトに1人しかいない場合、それはほとんど常に運命にあります。2つ目を追加すると、ほぼ毎回速度が上がります。その場合、コミュニケーションはオーバーヘッドではないためです。考えを明確にし、愚かな間違いを減らすのに役立つ機会です。
また、あなたが質問を投稿したときに明らかに知っていたように、Mythical Man-Monthからのアドバイスは後期のプロジェクトにのみ適用されます。プロジェクトがまだ遅れていない場合は、人を追加しても遅れることはほとんどありません。もちろん、あなたがそれを適切に行うと仮定します。
既存のプログラマーがまったく無能な場合は、有能なプログラマーを追加することが役立つ場合があります。
あなたが非常にモジュール式のシステムを持っていて、既存のプログラマーが非常に孤立したモジュールでさえ開始していなかった状況を想像できます。その場合、プロジェクトのその部分だけを新しいプログラマーに割り当てると役立つ場合があります。
私が作ったような人為的なケースを除いて、基本的に神話の男月の参照は正しいです。Brooks氏は、ある時点を過ぎると、プロジェクトに新しいプログラマーを追加する場合のネットワーキングと通信のコストが、生産性から得られるメリットを上回ることを実証するために、しっかりとした調査を行いました。
プログラマーを追加するのではなく、管理ヘルプを追加することを考えることができます。気を散らすものを取り除いたり、集中力を高めたり、やる気を高めたりするものなら何でも役に立ちます。これには、システムと管理の両方、および昼食をとるなどのより平凡なものが含まれます。
当然、プロジェクトはそれぞれ異なりますが、ほとんどの開発ジョブでは、開発者間である程度のコラボレーションを行うことができます。これが事実である場合、私の経験では、新鮮なリソースは実際に彼らがそれらをスピードアップするために依存している人々を意図せずに遅くする可能性があり、場合によってはこれがあなたのキーパーソンである可能性がありますnewbを教育する時間b)。彼らがスピードを上げているとき、彼らの仕事がチームの他のメンバーと確立された「ルール」または「仕事の文化」に適合するという保証はありません。繰り返しになりますが、それは良いよりも害を及ぼす可能性があります。それはさておき、これらはそれが有益かもしれない状況です:
1)新しいリソースには厳しいタスクがあり、他の開発者との最小限の対話と、すでに実証されているスキルセットが必要です。(つまり、既存のコードを新しいプラットフォームに移植し、既存のコードベースで現在ロックダウンされているデッドモジュールを外部でリファクタリングします)。
2)プロジェクトは、他の上級チームメンバーと時間を共有できるように管理されており、newbをスピードアップし、彼らの仕事がすでに行われていることと互換性があることを保証する方法に沿って指導するのを支援します。
3)他のチームメンバーは非常に忍耐強いです。
作業の終わり頃に人を追加すると、次の場合にスピードが上がると思います。
作業は並行して行うことができます。
追加されたリソースによって節約される量は、プロジェクトの経験者が経験の浅い人に説明することによって失われる時間よりも多くなります。
編集:私は言及するのを忘れました、この種のことはあまり頻繁には起こりません。通常は、テーブルに対して単純なCRUDを実行する管理画面など、かなり単純なものです。最近では、これらのタイプのツールはとにかくほとんど自動生成されます。
ただし、この種の仕事を任せて引き渡すマネージャーには注意してください。素晴らしいように聞こえますが、実際には、プロジェクトの大幅な時間を短縮するのに十分ではありません。
追加のリソースが既存のチームを補完する場合、それは理想的です。たとえば、プロダクションハードウェアをセットアップし、データベースが実際に調整されていることを確認する場合(次のプロジェクトで作業する優れたdbaから時間を借りて(チームがドメインの専門家として知っている)良い結果を返すだけではありません)トレーニング費用をかけずにチームをスピードアップできます
簡単に言えば。それは、残りの時間と誰かから得られる生産性を比較することです。追加のリソースがスピードアップして生産性を発揮し、既存のリソースによるそれらの教育に費やされた時間を差し引くのにかかる時間を除外します。重要な要素(重要度順):
チームがすでにプログラミングのペアリングに使用されている場合、特にペアリングに熟練している別の開発者を追加しても、特にTDDスタイルで開発が進行している場合は、プロジェクトが遅くなることはありません。
新しい開発者は、コードベースを理解するにつれて徐々に生産性が向上し、誤解はペアまたはすべてのチェックインの前に実行されるテストスイートによって非常に早期に検出されます(理想的にはチェックがあるはずです)。少なくとも10分ごとに)。
ただし、余分な通信オーバーヘッドの影響を考慮する必要があります。プロジェクトの既存の知識を過度に薄めないことが重要です。