Bu soruların çoğu gibi, cevabın şu olduğunu düşünüyorum:
Değişir
Her programcının her kod satırını bilmesi gerektiği pozisyonunu almanın yanlış yönlendirildiğine inanmak için sebep vardır.
Bir an için, bir kod parçasını derinlemesine anlayan birinin, hiç bilmeyen birinden (deneyimime dev bir inanç sıçraması değil) 5 kat daha hızlı bir şekilde değişiklik yapabileceğini varsayarsak, bu yaklaşık bir ay sürer. önemli ölçüde boyutlandırılmış bir modülün (ayrıca mantıksız olmayan) gerçekten iyi bir şekilde anlaşılması için kodlama deneyiminden sonra bazı (tamamen sahte ve kurgusal) sayılar çalıştırabiliriz:
- Programcı A: derin bir anlayışa sahip
- Programcı B: yok
Diyelim ki programcı A günde 1 iş yapıyor. 5 iş gününün 4 haftasında 20 birim iş yapabilir.
Bu nedenle, B programcısı, günde 0.2 birimden başlayarak ve 20. gününde 0.96 birim çalışmayla sona erecek (21. günde, programcı A kadar iyidirler), aynı şekilde 11.6 birim çalışacak 20 günlük süre Bu ay boyunca B programcısı, A programına kıyasla% 58 verimlilik elde etti. Ancak, şimdi bu modülü ve birincisini bilen başka bir programlayıcınız var.
Tabii ki, iyi bir büyüklükte bir projede, 50 modül olabilir mi? Bu yüzden hepsine aşina olmanız yaklaşık 4 yıl sürüyor ve bu, öğrenme programlayıcısının, ortalama olarak programlayıcı A ... hmmm'ye kıyasla% 58 verimlilikle çalıştığı anlamına geliyor.
Öyleyse bu senaryoyu inceleyin: aynı programcılar, aynı proje (A hepsini biliyor ve B hiçbirini bilmiyor.) Diyelim ki yılda 250 iş günü var. İş yükünün 50 modül üzerine rastgele dağıtıldığını varsayalım. Her iki programlayıcıyı eşit şekilde bölersek, A ve B'nin her ikisi de her modülde 5 iş günü alır. A her modülde 5 ünite iş yapabiliyor, ancak B sadece küçük Excel simülasyonuma göre, her modülde 1.4 ünite iş yapıyor. Toplam (A + B), modül başına 6.4 iş birimidir. Bunun nedeni, B zamanlarının çoğunu üzerinde çalıştıkları modülle ilgili herhangi bir beceri olmadan geçirmektir.
Bu durumda, B'nin daha küçük bir modül alt kümesine odaklanması daha uygun olur. Eğer B sadece 25 modüle odaklanırsa, her birinde 10 gün ve her birinde toplam 3.8 ünite çalışır. Programcı A daha sonra B'nin çalışmadığı 25 modülde 7 gün, her biri 3 gün B ile aynı günde çalışabilir. Toplam verimlilik, modül başına 6.8 ila 7 ünitedir ve ortalama 6.9'dur. A ve B işleri eşit bir şekilde yayarken modül başına 6.4 üniteden daha fazlasını yaptık.
B'nin çalıştığı modüllerin kapsamını daralttıkça daha da verimli oluyoruz (bir noktaya kadar).
Eğitim
Ayrıca, bir modül hakkında çok fazla şey bilmeyen birinin, daha fazla deneyime sahip birinden çok daha fazlasını yapan kişiyi rahatsız edeceğini savunuyorum . Bu yüzden yukarıdaki rakamlar, B'nin anlamadıkları kodlara daha fazla zaman harcadıklarını, soru sorarak A'nın daha fazla zaman harcadıklarını ve bazen A'nın, B'nin yaptıklarını düzeltmek veya sorun gidermek zorunda kaldıklarını hesaba katmamaktadır. Birini eğitmek zaman alıcı bir faaliyettir.
En uygun çözüm
Bu yüzden optimal çözümün aşağıdaki gibi sorulara dayanması gerektiğini düşünüyorum:
- Ekibiniz ne kadar büyük? Herkesin her alanda çapraz eğitim almasını sağlamak mantıklı mıdır veya 10 kişilik bir ekibimiz varsa, her modülün en az 3 kişi tarafından bilindiğinden emin olabilir miyiz? (10 programlayıcı ve 50 modül ile her programcının 3 kat kapsama alanı elde etmek için 15 modül bilmesi gerekir.)
- Çalışanların cirosu nasıl? Çalışanları ortalama her 3 yılda bir devredecekseniz ve sistemin her köşesini gerçekten bilmek, bundan daha uzun sürüyorsa, eğitimin geri ödeyebilmesi için yeterince uzun sürmezler.
- Bir problemi teşhis etmek için gerçekten bir uzmana ihtiyacınız var mı? Pek çok insan "ya o tatile giderse" bahanesini kullanıyor, ancak deneyimlediğim bir sistemde bir problemi teşhis etmek için defalarca çağrıldım. Deneyimli kişinin onu daha hızlı bulabileceği doğru olabilir, ancak onlarsız ya da iki hafta yaşayamayacağınız anlamına gelmez. Birkaç yazılım sistemi o kadar kritik öneme sahiptir ki, problem 5 saat yerine 1 saat içinde teşhis edilmek zorundadır, yoksa dünya sona erecektir. Bu riskleri değerlendirmek zorundasınız.
Bu yüzden "bağlı" olduğunu düşünüyorum. 20 modülün iki programlayıcı arasında tam ortasından aşağıya bölünmesini istemezsiniz (her biri 10'ar), çünkü o zaman esnek olmuyorsunuz, ancak 50 programın tamamında 10 programlayıcıyı geçmek istemiyorsunuz çünkü çok fazla kaybediyorsunuz verimlilik ve bu kadar fazlalığa ihtiyacınız yok.