Geç bir projeye daha fazla programcı eklemenin sorunları daha da kötüleştireceği oldukça yaygın bir atasözü. Bu neden?
Geç bir projeye daha fazla programcı eklemenin sorunları daha da kötüleştireceği oldukça yaygın bir atasözü. Bu neden?
Yanıtlar:
Her yeni geliştirici, yalnızca yeni kişinin zamanını almakla kalmayıp, aynı zamanda [a] üst düzey geliştiriciden (inşaat süreci boyunca rehberlik etmek, test sürecini açıklamak, yardımcı olmak) yardım gerektiren kod tabanına ve gelişim sürecine tanıtılmalıdır. kod tabanında tuzaklar, çok daha ayrıntılı kod incelemeleri, vb) .
Bu nedenle, projeye ne kadar yeni geliştiriciler eklerseniz, onları projeye gerçekten katkıda bulunabilecekleri bir noktaya getirmek için daha çok zaman harcanması gerekir.
Diğer cevaplara ek olarak: Dikkate alınması gereken bir diğer faktör iletişimdir.
Bir takımdaki (nadir olmayan) iletişim kanallarının miktarı için en kötü durum tam bir grafiktir . Tahmin edebileceğiniz gibi, yalnızca bir geliştirici eklemek , iletişim kanallarını çok artırabilir. Daha düzenli iletişim yöntemleriyle, etki daha az ... ancak yine de artıyor.
Kitapta belirtilen sorun, aslen bu kanunu, Efsanevi Adam Ayı'nın yayınlandığı bir iletişimdir. Şöyle söyleyerek başlar:
Erkekler ve aylar, yalnızca bir işçinin birçok işçiye bölündüğü zaman birbirinin yerine kullanılabilir iletişim kurmayan . Bu, buğday ekilmesi veya pamuk toplaması için geçerlidir; yaklaşık sistem programlaması için bile doğru değildir.
Sorunun bir parçası olarak eğitimden bahsediyor:
Eklenen iletişim yükü iki bölümden oluşur: eğitim ve iletişim. Her işçi teknoloji, eforun amaçları, genel strateji ve çalışma planı konularında eğitilmelidir. Bu eğitim bölümlenemez, bu nedenle işin bu kısmı işçi sayısına göre doğrusal olarak değişir.
... ancak iletişimin çok daha büyük bir faktör olduğuna dikkat çekiyor :
Yazılım inşası doğası gereği bir sistem çabası olduğu için - karmaşık ilişkilerde bir alıştırma - iletişim çabası harikadır ve bölümlendirme tarafından yaratılan bireysel görev süresindeki azalmaya hızla egemen olur. Daha fazla erkek eklemek, programı kısaltır, uzatır.
Ayrıca Fred Brooks'un (yazar) neden bahsettiğini bilme geçmişi olduğunu da belirtmekte fayda var. Kitabın çoğu, IBM'in işletim sistemi / 360 projesini yönetme deneyimine dayanıyor. "Geliştirilmiş" yönetim yöntemleri ve buna aşağı olsun hatta bazıları serin adlarıyla (vb eXtreme, Çevik, Scrum,) ile geliyor her şekilde vaaz taraftarlarının yıllardır rağmen, özü küçük 1 beri değişmiş gibi görünüyor.
1 20 dahil: "Yazılım Mühendisliği özü ve olası No Silver Bullet", "özde" nin tanımı için aynı yazarın bakınız inci Yıldönümü Sürümü Mythical Man-Ay .
Sadece bir atasözü değil; doğrulanabilir. Brooks'un Efsanevi Adam-Ayına bakın .
İşte bu konuda bazı düşünceler ...
Şimdi, test için yeni kaynaklar eklemek kötü bir fikir olmayabilir ... test sürecini hızlandırabilir (eğer test durumlarınız iyi yazılmışsa) ve evet, test araçlarını kullanmak da size yardımcı olacaktır.
Çünkü programlama temel üretim hattı işi değildir. Bir yazılım projesini hızlandırmak zaman alır. Yeni insanların negatif üretkenliğe yol açan birçok soru sorması gerekir (örn. Yeni kişi öğreniyor, eski kişi onlara öğretiyor -> fiili iş yapılmıyor).
Basitleştirmek için, 1 hafta boyunca sürmesi planlanan nispeten basit bir tek kişilik projeyi hayal edin: Perşembe günü, zamanında yapılmayacağını, bir programcının 6-7 gün gibi daha fazla süreceğini fark edersiniz. 5. Bu noktada başka bir programlayıcı eklerseniz, programlayıcı1 ile en az birkaç saat veya bir gün kadar çalışmaları gerekir. Hızlanmak için çok fazla soru sorma vb. haftanın geri kalanı için herhangi bir net pozitif verimlilik. Yeni programcının da bazı ekstra hatalar getirmesi muhtemeldir (çünkü mevcut kodu ve programlayıcıyı1 bilmeyeceklerdir), böylece uygulama ve test döngüsünü bir iki gün daha kaldıracaktır. Proje orjinali yerine tam iki iş haftasını kolayca alacak!
Fred Brooks, bu soruyu cevaplayan "Efsanevi Adam Ayı" kitabının tamamını yazdı.
İşte hızlı ve kirli versiyon:
1) Daha fazla programcıya atamak için bir projeyi farklı parçalara ayırabilmenizin bir sınırı vardır.
2) Bir projeyi daha fazla kişiye bölmek, başvurunun tüm bölümlerini koordine etmek için gereken iletişim miktarını arttırır. Daha fazla iletişim = Daha Fazla Çalışma.
3) Projeye eklediğiniz her kişi için ekibe yönlendirilmesi gereken birden fazla iletişim kanalı eklersiniz. Bu sayı geometrik olarak büyür ve olması gereken iletişim miktarını arttırır. Daha fazla iletişim = Daha fazla iş.
4) Her takım üyesini eklerken "J Eğrisi" var. Diğer bir deyişle, mevcut üretken kaynakların, yeni insanları proje üzerinde çalışarak geçirebilecekleri hıza ulaştırması için zaman harcaması gerekiyor. Sonuçta kapasiteyi artırabilirsiniz, ancak geçici olarak projeyi yavaşlatır. Projede daha sonra öğrenilmesi gereken daha fazla, dolayısıyla etki daha belirgin.
Bahsetmediğim bir başka faktör de, bazı görevlerin belirli bir sırada yapılması gerektiği. Görev 3 bitinceye kadar görev 4 yapamazsınız, çünkü bu 3'e bağlıdır. Görev 3'ü yapmak için birini işe almak hiçbir işe yaramaz. Aynı zamanda birisi görev 3'ü de yapar. Genellikle bir projenin sonunda ilk önce başka şeylere ihtiyaç duyan görevler, kalan görevlerdir.
Aynı zamanda, yapılması gereken en karmaşık görevlerden bazılarıdır; bunlar, zaten tamamlanmış olanı kırmamak için tüm tasarımın en iyi şekilde anlaşılmasını gerektiren görevlerdir. Ayrıca, genellikle en kapsamlı işletme alanı bilgisini gerektirir. Aylarca proje üzerinde çalıştıktan sonra görevi bir hafta veya daha kısa sürede yapabilirim. Yeni bir kişi bir haftadan daha fazla zamanını harcayarak harcayacaktır (ve soruları cevaplamak için o zamanın iyi bir provizyonu için beni görevlerimden uzağa çekerek) ve muhtemelen çok yetenekli olanların bu işi yapması daha uzun zaman alacaktı. Yetkili olmadığı için değil, projenin asıl yapısına veya veri tabanı arka planına aşina olmadığından değil.
Benim için her zaman işe yarayan atasözü, bir ayda dokuz kadına bebek yaptırmasını sağlayamazsın.
Ayrıca DeMarco ve Lister tarafından "Peopleware" öneririm.
Ve DeMarco'nun "Son Tarihi", bunu ve bir dizi başka yazılım proje yönetimi hastalığını ve haksızlığını açık ve çok okunaklı bir şekilde sunar.
Aynı zamanda proje / ekip çalışması yapan insanların dinamiklerini de araştırıyor ve iletişim ve tanıtım gibi sadece bir takımın mevcut çalışma süresini tüketen NASIL şeyler hakkında biraz ayrıntıya giriyor.
Bu kitaplar oldukça ucuz, onları almanızı öneririm (Amazon veya The Book Depository'de onları var) ve bir okuma almalısınız. Buradaki kısa cevaplar, sorulan soruya adalet yapamaz.
Çünkü hiç kimse, iyi düşünülmüş, planlanmış, test edilmiş bir işlem için zaman ayırmaz: programcıları işe almak, eğitmek, geliştirmek ve denetlemek, belirli bir projeyi hızlandırmak için onları yalnız bırakmaya bile izin vermez.
Bir geliştirici ekibini yönetiyorsanız, şu anda bir açılışınız varsa, işe almak istediğiniz kişilerin bir kaç kişisine sahip olmalısınız. Geliştirici gruplarına katılın.
Ne kadar hızlı yepyeni bir geliştirme makine kurulum ve gitmek için hazır alabilirsiniz?
Proje dokümantasyonunuzu ve teknik özelliklerini başka bir projedeki geliştiriciye göstererek test ettiniz mi? Baktılar ve gerekirse proje üzerinde çalışmaya başlayabileceklerini belirlediler mi?
Herhangi bir proje takvimi ne kadar güncel?
Yağmurlu bir güne para biriktirin çünkü bir proje geride kaldığında daha çok kasırga gibidir.
İletişim sorunun dışında (diğer tüm cevapların bahsettiğini düşünüyorum), bir projeye eklenmiş bir insanın hata yaratması da çok mümkün, çünkü kodu henüz çok iyi bilmiyorlar.
Ne zaman bir projeye eklenirsem, işleri kırmamak için her zaman çok çalışırım. Bu, ilk başta işleri düzeltmekte çok daha yavaş olduğum anlamına geliyor.
Diğer cevaplarda şimdiye kadar tamamen göz ardı edilen bir şeyi belirtmek isterim.
İnsanlar geç bir projeye eklendiklerinde, genellikle organizasyonda çok şey ters gitti. Yönetim ve müşteri memnun değil. İnsanlar buna devam etmeleri için baskı yaptı. İşler oldukça gergin.
Şimdi o takımda olduğunuzu hayal edin. Açıkçası, bunların hiçbiri senin suçun değil. Planlama (hiçbiri sizin değil) çok iyimserdi. Tüm yanlış kararlar size danışmadan verildi. En iyisini yapmaya çalışıyorsunuz ve birdenbire bir sürü yeni insan içeri giriyor. Bu hangi mesajı veriyor?
Üst kattaki insanlar açıkçası sana olan inancını yitirdiler. Büyük çocukları aradık ve yaptıklarını telafi etmek için çağırdılar.
Bunu başarmak için hala motive olacak mısınız? Ya da ... sen daha fazla sinirli olacak mısın ve sonuçta her şeyin çarpışmasını mı tercih ederdin?
Acele etmeyin :-).