Neden geç bir projeye daha fazla insan eklemek bunu daha sonra yapar?


25

Geç bir projeye daha fazla programcı eklemenin sorunları daha da kötüleştireceği oldukça yaygın bir atasözü. Bu neden?


14
Bunun terimi Brooks Yasasıdır ( en.wikipedia.org/wiki/Brooks's_law ).
Macneil

7
Tavsiye: Brooks'un "Efsanevi Adam Ayı" nı okuyun. Bu, atasözünün nereden geldiğini, okunabilir bir kitap olduğunu ve sahadaki herkesin yine de okuması gerektiğini gösterecektir.
David Thornley

Bu Wikipedia sayfası çok iyi yazılmış.
Henry,

Verimlilik ekibi boyutu ile azalmaktadır nasıl delil için (7 ekip üyeleri ötesinde azalan getiriler içine almak), bkz qsm.com/process_improvement_01.html
Joeri Sebrechts

Yanıtlar:


33

Giriş ek yükü

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.


Yani 'Giriş'i optimize ederseniz, etki azaltılacak mı?
Henry,

9
@ Henry: Sorun şu ki bu yönü, darboğazın olmadığı bir dereceye kadar optimize edemezsiniz. İlk başta yeni bir programcı projeniz, kodunuz ve süreçleriniz hakkında tam olarak 0 bilgilidir. Yeni bir ekip üyesi eklerken her zaman gereken aynı ek yük. Ancak bir proje zaten geç kaldığında, takımın uygun bir giriş yapma zamanı yoktur ve bu zamanı yaparsa asıl gelişmeden dolayı eksik kalır. Bu nedenle genellikle takım için kaybedilen bir durumdur ve yeni kişinin projeye anlamlı bir şekilde katkıda bulunabilmesi için daha uzun sürmektedir.
Baelnorn

Giriş yapmanın maliyeti ile ilgili olarak, bir kerede video kaydı yapılamaz ve daha sonra birçok kişiye yayınlanamaz, böylece aynı anda çok sayıda yeni programcı yetiştirebilir mi? (Örnekler: geliştirici toplantılar veya konferanslar.)
rwong

7
@ rwong: Bu kötü bir fikir değil, ancak bu genellikle pratik değil. Sadece bilgiyi sunamazsın, yeni adamların anladığından emin olmalısın. Artı, eğer gerçekten yeni iseler (son sınıflar), hepsine aynı anda sunmak için genellikle çok fazla bilgi var. Tüm bilgiler bir noktada olduğu için bir wiki'nin iyi işlediğini ve anlamadıkları kısımlar varsa insanlar soru gönderebilir.
TMN

Bir olasılık, çok yetenekli bir yeni insanı atamak ve başkalarını rahatsız etmeden belirli işleri yapmalarını sağlamaktır. Kötü püskürecekler ve yavaş çalışacaklar ve bazı yöneticiler ve / veya takımlar bunu görmeye dayanamıyor. Ancak, yeni geliştirici bu şekilde yönetildiğinde net bir artı olabilir.
David Thornley

32

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.


Aynı anda aynı şeyi yazıyordum! ama yeni bir ismi yoktu (tamamlanmış bir grafik) ve açıklamanız daha iyi, oy kullanmaya devam ediyor.
Miguel Veloso

+1. Kabul, bu daha fazla takım üyesi eklerken en büyük sorun.
Martin Wickman,

İnsanları projeye ekleme konusunda daha uzun vadeli bir problem için +1.
indyK1ng

23

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 .


12

Sadece bir atasözü değil; doğrulanabilir. Brooks'un Efsanevi Adam-Ayına bakın .


1
Bu bir atasözü. Doğrulanabilir olabilir veya olmayabilir, ancak bu bir atasözü olmasını durdurmaz.
Peter Boughton

3
Bu kitabım yok (belli ki). Bu, sabit numaralarla mı destekleniyor, yoksa anekdot mu?
Henry,

2
@ Henry: Okuduğumdan bu yana bir süre geçti ama IIRC, her ikisini de net bir şekilde ortaya koymak için yeterli miktarda mevcut.
Steven Evers,

@Peter: Cevabımı düzenledi.
John,

@ PeterBoughton Bir atasözü. Ayrıca, sadece bir atasözü değil.
SantiBailors

6

İşte bu konuda bazı düşünceler ...

  • Yeni kaynakları projede neler olup bittiğini hızlandırmak için mevcut kaynakları kullanmanız gerekir.
  • Yeni kaynak kod tabanına aşina olmayabilir, bu nedenle koda alışmak için daha fazla zaman gerekir.

Ş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.


1
Geliştirme değil, teste kaynak eklemek için +1.
Baelnorn

4

Çü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!


Sizin örneğiniz, projeye bırakılan gerçek dışı kısa teslim tarihine göre biraz da olsa. Bir aya kadar değiştirin, bunun gerekli olmadığını göreceksiniz. Şahsen teklifin kötüye kullanıldığını düşünüyorum. Değirmen bitimi, ortalama / zayıf programcı dikkate alındığında doğrudur. İyi bir programcınız varsa ve son tarih 1 gün veya 1 hafta gibi gerçekçi olmayan bir şey değilse, teklif yanlıştır: yapılabilir (projeye yardım edin).
n1ckp

@ n1ck Bir genelleme - "çok fazla aşçı" gibi - kilit nokta, projeye insan gücü atmanın mutlaka daha hızlı bir şekilde çözülmesine neden olmayacağıdır. 1 kişiden 2'ye mi? Muhtemelen. 2 ila 4? Çok fazla değişken - bu projenin büyüklüğüne ve yapısına bağlıdır. 4 -> 8? Kesinlikle marjinal olmak (en azından maliyet getirisi).
Murph

@Murph: çoğunlukla benimle aynı şeyleri düşünüyor gibi görünüyorsun ama denkleminde çok önemli bir değişkeni unuttun: eklenen insan gücünün yetenek seviyesi. Son yorumumdaydı, bu yüzden kaçırdığın garip buldum. Körü körüne insan gücü eklemek elbette çözüm değil. Çok özel bir insan gücü eklemek (çok fazlasına ihtiyacınız yok) elbette yardımcı olabilir ve efsanevi adam-ay teklifinde eksik olan şey budur. Bu benim amacımdı. Aksi halde, teklifin ne anlama geldiğini zaten biliyorum.
n1ckp

Tamam, örnek daha iyi olabilirdi ama genelleme hala geçerli mi?
Murph

1
MIGHT'un çok özel durumlarda çalıştığı şeylerden biri olduğunu , ancak zamanın% 99'unun işe yaramayacağını bilmek için bu kadar zaman geçirdim . Ne zaman teoride iyi göründüğü önemli değil. Yani, evet, bu siyah beyaz mutlak değil. Açık ilişkilerin nasıl çalışmadığını söylemek gibi. Teori hoş ve çekici;) .... ama canavarın doğası öyle bir durumda ki başarısızlıkla sonuçlanıyor. Bir "istisnalar kuralı kanıtlıyor" şeklinde bir şeydi.
Bobby Tables

4

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.


4

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.


+1. Bu son işimde büyük bir sorun oldu. Yönetim mega oldu "adam ay ekleyerek" büyük bir proje için çılgınlığı bir şey düşünmeden. Bir noktada, ekibimiz yavaş olduğu için delindi - çünkü bu büyük projeyle bütünleşmemiz gereken şeyler vardı. Ancak daha sonra, ana proje üzerinde yeni işe, yeterince hızlı hıza alamadım BİZ (gerekli şeyler çok önceden var onların arkauçlar tamamlandı). Bir noktada yarı pişmiş arka uçlar ve test koşumları için ön uçlar geliştiriyorduk. İyi bir akış değil.
Bobby Tables

2

Benim için her zaman işe yarayan atasözü, bir ayda dokuz kadına bebek yaptırmasını sağlayamazsın.


Bir yazılım projesinin bir bebek gibi olduğunu düşünüyorsanız, gerçek dünyada yaşamazsınız.
Alıntıda

1
Belli ki değil. Ama onlar zaman sattığınız insanlar da yazılım geliştirmeyi anlamıyor. Analojiler, tam olarak bilinmeyen bir kavramı, bilinen bir varlıkla ilişkilendiren bu amaç içindir.
tekrar yayınlama

2
Brooks'un yaptığı başka bir benzetme bir restoranda yemek yapmaktır. İyi işletilen bir mutfak, paralel olarak birçok yemek yapabilir, ancak az pişmeden veya yakmadan tek bir öğün yapmanın ne kadar hızlı olacağı konusunda sınırlamalar vardır.
David Thornley

@rerun: Analojinizle ilgili problem, hamile kadınlar için çalışan analojisinin olmamasıdır. Davanızdaki kadınlar , işçilerle değil, şirketlerle karşılaştırıldığında daha kolay olabilir . Bu yüzden bence bu çok başarısız oluyor. Aklıma gelen en yakın şey yiyecek olurdu ama bu daha çok kod satırına benzerdi, yani hayır, işçilere değil.
n1ckp

1
@ n1ck: Benim izlenimim, aynı fikirde olmadığın, çünkü anlamadın, dürüst olmak gerekirse. Brooks, işe yaramaz insanları yetkin insanlarla değiştirmekten bahsetmiyordu, çünkü hâlâ istihdam edilen herkesin yetenekli olduğu bir durumdaydı.
David Thornley

2

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.


2

Çü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.


1

İ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.


0

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 :-).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.