Wie so viele dieser Fragen, denke ich, lautet die Antwort:
Es hängt davon ab, ob
Es gibt Grund zu der Annahme, dass es falsch ist, die Position einzunehmen, dass jeder Programmierer jede Codezeile kennen sollte.
Wenn wir für einen Moment davon ausgehen, dass jemand mit einem tiefen Verständnis eines Codeteils Änderungen fünfmal schneller vornimmt als jemand, der dies überhaupt nicht weiß (nach meiner Erfahrung kein riesiger Vertrauenssprung), und das dauert ungefähr einen Monat Um ein wirklich gutes Verständnis für ein Modul von beträchtlicher Größe zu erhalten (auch nicht unangemessen), können wir einige (völlig falsche und fiktive) Zahlen ausführen:
- Programmierer A: hat ein tiefes Verständnis
- Programmierer B: keine
Nehmen wir an, Programmierer A erledigt 1 Arbeitseinheit pro Tag. In 4 Wochen an 5 Arbeitstagen kann er / sie 20 Arbeitseinheiten erledigen.
Programmierer B, der mit 0,2 Arbeitseinheiten pro Tag beginnt und mit 0,96 Arbeitseinheiten an seinem / ihrem 20. Tag endet (am 21. Tag sind sie so gut wie Programmierer A), wird 11,6 Arbeitseinheiten in demselben erledigen Zeitraum von 20 Tagen. In diesem Monat erzielte Programmierer B einen Wirkungsgrad von 58% im Vergleich zu Programmierer A. Jetzt haben Sie jedoch einen anderen Programmierer, der dieses Modul sowie das erste Modul kennt.
Natürlich könnten Sie in einem Projekt mit angemessener Größe ... 50 Module haben? Das bedeutet, dass der lernende Programmierer im Durchschnitt mit einer Effizienz von 58% im Vergleich zu Programmierer A ... hmmm arbeitet.
Stellen Sie sich also folgendes Szenario vor: Dieselben Programmierer, dasselbe Projekt (A weiß alles und B weiß nichts davon.) Nehmen wir an, das Jahr hat 250 Arbeitstage. Nehmen wir an, dass die Arbeitslast zufällig auf die 50 Module verteilt wird. Wenn wir beide Programmierer gleichmäßig aufteilen, erhalten A und B jeweils 5 Arbeitstage für jedes Modul. A kann 5 Arbeitseinheiten für jedes Modul ausführen, aber B erhält meiner kleinen Excel-Simulation zufolge nur 1,4 Arbeitseinheiten für jedes Modul. Insgesamt (A + B) sind 6,4 Arbeitseinheiten pro Modul. Das liegt daran, dass B die meiste Zeit ohne Vorkenntnisse mit dem Modul verbringt, an dem sie arbeiten.
In dieser Situation ist es optimaler, B auf eine kleinere Teilmenge von Modulen zu konzentrieren. Wenn sich B auf nur 25 Module konzentriert, erhalten sie jeweils 10 Tage mit insgesamt 3,8 Arbeitseinheiten. Programmierer A könnte dann jeweils 7 Tage mit den 25 Modulen verbringen, an denen B nicht arbeitet, und jeweils 3 Tage mit den gleichen Modulen wie B. Die Gesamtproduktivität liegt zwischen 6,8 und 7 Einheiten pro Modul, durchschnittlich 6,9, und das ist bedeutend höher als die 6,4 Einheiten pro Modul, die wir gemacht haben, als A und B die Arbeit gleichmäßig verteilten.
Wenn wir den Umfang der Module, an denen B arbeitet, einschränken, erhalten wir (bis zu einem gewissen Punkt) noch mehr Effizienz.
Ausbildung
Ich würde auch argumentieren, dass jemand, der nicht so viel über ein Modul weiß, die Person unterbricht, die viel mehr macht als jemand mit mehr Erfahrung. Die oben genannten Zahlen berücksichtigen nicht, dass A umso mehr Zeit benötigt, um Fragen zu stellen, je mehr Zeit B für den Code aufgewendet hat, den sie nicht verstehen. Manchmal muss A dabei helfen, die Probleme von B zu beheben oder zu beheben. Jemanden zu trainieren ist eine zeitaufwändige Tätigkeit.
Optimale Lösung
Aus diesem Grund denke ich, dass die optimale Lösung auf folgenden Fragen beruhen muss:
- Wie groß ist dein Team? Ist es sinnvoll, dass jeder Teilnehmer über Kreuz geschult wird, oder wenn wir ein 10-köpfiges Team haben, können wir dann sicherstellen, dass mindestens 3 Personen über jedes Modul Bescheid wissen? (Bei 10 Programmierern und 50 Modulen muss jeder Programmierer 15 Module kennen, um eine dreifache Abdeckung zu erhalten.)
- Wie ist Ihre Mitarbeiterfluktuation? Wenn Sie die Mitarbeiter durchschnittlich alle 3 Jahre wechseln und es länger dauert, bis Sie wirklich alle Bereiche des Systems kennen, werden sie nicht lange genug da sein, damit sich die Schulung auszahlt.
- Benötigen Sie wirklich einen Experten, um ein Problem zu diagnostizieren? Viele Leute benutzen die Ausrede "Was ist, wenn diese Person in den Urlaub fährt?", Aber ich wurde mehrfach angerufen, um ein Problem in einem System zu diagnostizieren, mit dem ich noch keine Erfahrung hatte. Es mag sein, dass die erfahrene Person es viel schneller findet, aber es bedeutet nicht, dass Sie nicht ein oder zwei Wochen ohne sie leben können. Nur wenige Softwaresysteme sind so unternehmenskritisch, dass das Problem innerhalb von 1 Stunde anstelle von 5 Stunden diagnostiziert werden muss, da sonst die Welt untergeht. Sie müssen diese Risiken abwägen.
Deshalb denke ich "es kommt darauf an". Sie möchten nicht 20 Module genau in der Mitte auf zwei Programmierer aufteilen (jeweils 10), da Sie dann keine Flexibilität haben. Sie möchten jedoch nicht 10 Programmierer auf allen 50 Modulen überqueren, da Sie viel davon verlieren Effizienz und Sie brauchen nicht so viel Redundanz.