これらの質問の非常に多くのように、答えは次のとおりだと思います。
場合によります
すべてのプログラマーがすべてのコード行を知っているべきであるという立場を取ることは、誤った方向に導かれると信じる理由があります。
コードを深く理解している人は、コードをまったく知らない人(私の経験に対する大きな飛躍ではない)の5倍の速度で変更を行い、約1か月かかりますかなり大きなサイズのモジュール(また不合理ではない)を非常によく理解するためにコーディング経験を積むと、いくつかの(完全に偽の、架空の)数値を実行できます。
プログラマAが1日に1単位の作業を完了したとします。5就業日の4週間で、20単位の作業を完了できます。
したがって、プログラマBは、1日あたり0.2作業単位で開始し、20日目に0.96作業単位で終了します(21日目にはプログラマAと同じくらい良い)、同じ11.6単位の作業を達成します20日間。その月の間に、プログラマーBはプログラマーAと比較して58%の効率を達成しました。しかし、今では、最初のモジュールと同様にそのモジュールを知っている別のプログラマーがいます。
もちろん、まともなサイズのプロジェクトでは、50個のモジュールがありますか?そのため、それらすべてに慣れるには約4年かかります。つまり、学習中のプログラマは、平均してプログラマA ...に比べて58%の効率で作業しています。
したがって、このシナリオを考えてみましょう。同じプログラマー、同じプロジェクト(Aはそれをすべて知っており、Bはそれをまったく知らない)。ワークロードが50のモジュールにランダムに分散されていると仮定しましょう。両方のプログラマーを均等に分割すると、AとBは両方とも各モジュールで5営業日かかります。Aは各モジュールで5単位の作業を実行できますが、Bは、私の小さなExcelシミュレーションによると、各モジュールで1.4単位の作業を実行します。合計(A + B)は、モジュールあたり6.4単位です。これは、Bが作業中のモジュールのスキルがなくてもほとんどの時間を費やしているためです。
この状況では、Bがより小さなモジュールのサブセットに焦点を合わせることがより最適です。Bが25個のモジュールのみに焦点を合わせている場合、各モジュールで10日間、合計3.8個の作業が行われます。プログラマAは、Bが作業していない25のモジュールにそれぞれ7日間、Bと同じモジュールにそれぞれ3日間を費やすことができます。合計生産性の範囲はモジュールあたり6.8から7ユニットで、平均6.9で、これはかなり高いです。 AとBが均等に作業を行ったときに完了したモジュールごとの6.4ユニットよりも。
Bが動作するモジュールの範囲を狭めると、さらに効率が上がります(ある程度まで)。
トレーニング
また、モジュールについてあまり知らない人は、より多くの経験を持つ人よりも多くのことをする人を邪魔すると主張します。したがって、上記の数値では、Bが理解できないコードに費やす時間が長くなるほど、Aが質問をすることにより多くの時間を費やし、時にはAがBが行ったことの修正またはトラブルシューティングを手伝わなければならないことを考慮していません。誰かを訓練することは時間のかかる活動です。
最適なソリューション
だからこそ、最適なソリューションは次のような質問に基づいている必要があると思います。
- チームの大きさは?全員がすべての部分でクロストレーニングを受けることは理にかなっていますか、または10人のチームがある場合、各モジュールが少なくとも3人で認識されていることを確認できますか?(10人のプログラマーと50のモジュールで、各プログラマーは3つのカバレッジを得るために15のモジュールを知っている必要があります。)
- 従業員の離職率はどうですか?平均して3年ごとに従業員を離職させ、システムの隅々まで実際に知るのにそれよりも時間がかかる場合、従業員はトレーニングが報われるのに十分な長さではありません。
- 問題を診断するには専門家が本当に必要ですか?多くの人が「その人が休暇に入ったらどうなるか」という言い訳を使用しますが、私は経験のないシステムの問題を診断するために何度も呼ばれています。経験豊富な人がそれをはるかに速く見つけることができたというのは本当かもしれませんが、1〜2週間彼らなしでは生きられないという意味ではありません。ミッションクリティカルなソフトウェアシステムはほとんどないため、5時間ではなく1時間で問題を診断する必要があります。そうしないと、世界は終わります。これらのリスクを比較検討する必要があります。
だから「依存する」と思うのです。柔軟性がないため、20モジュールを2人のプログラマーの真ん中(各10)に分割するのは望ましくありませんが、50モジュールすべてで10人のプログラマーをクロストレーニングしたくはありません。効率性とあなたはそれほど冗長性を必要としません。