Efsanevi Adam Ayının etkilerini azaltmanın yolları nelerdir?


16

Brooks yasası: Geç bir yazılım projesine insan gücü eklemek daha sonra bunu yapar.

No Silver Bullet - Yazılım Mühendisliğinin Özü ve Kazaları adlı kitabında Frederick Brooks, Efsanevi Adam Ayı kavramını şöyle tanımlar :

Brooks'un varsayımı, karmaşık programlama projelerinin , işçiler arasında iletişim olmadan ve görevler ile bunları yerine getiren işçiler arasında bir dizi karmaşık ilişki kurmadan üzerinde çalışılabilen ayrı görevlere mükemmel bir şekilde bölünemeyeceğidir .

1982'den bu yana kesinlikle ilerledik ve bu sorunu hafifletmek için biraz daha deneyim kazandık. Daha fazla sorun yaratmadan bir projeye kaynak eklemek için işinizde başarıyla uyguladığınız çözümlerden bazıları nelerdir.


5
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum çünkü Yazılım Engg'de daha iyi uyuyor. SE ( softwareengineering.stackexchange.com ), ve aynı zamanda kesinlikle Devops'e özgü olmamasına neden oluyor
Dawny33

2
Bu kesinlikle DevOps'a özgü bir sorudur. Doğrudan yazılım teslimi etrafındaki işlemlerle ilgilidir. DevOps'un ne anlama geldiğini gerçekten anladığınızdan emin misiniz?
Jiri Klouda

3
DevOps demeye devam ediyorsun, bunun ne anlama geldiğini düşündüğünü sanmıyorum.
Jiri Klouda

3
@ Dawny33: Lütfen, DevOps - The Phoenix Project'in temel kitaplarından birini okuyun. AWS, Docker, Jenkins veya diğer araçlardan tek bir söz bulamazsınız. Kitabın tamamı süreç, organizasyon hiyerarşisi ve yapısı, takım halinde çalışma şekli ile ilgilidir. DevOps, Japonya ve daha sonra Amerika Birleşik Devletleri'nde üretimi geliştiren bilimsel fikirleri Yazılım Geliştirme sürecine getirmenin bir yoludur. Edward W. Deming ve Eliyahu M. Goldratt'ın çalışmalarına dayanan fikirler. DevOps olarak gördüğünüz şey sadece yüzey, araçlar, sonuçlardır. Bunun gereksiz parçaları.
Jiri Klouda

5
@ Dawny33 Bu soru Yazılım Mühendisliği için uygun değildir. Bu genel konu olmasına rağmen, soru çok geniş. Bir sorunu çözmeye çalışmak yerine görüş almak istiyor. Ne tür soruları kabul ettiklerini anlamadıysanız lütfen diğer topluluklara önermeyin. Bu soru Yazılım Mühendisliği'nde yayınlanacak olsaydı, oylanacak, kapatılacak ve muhtemelen çok hızlı bir şekilde silinecekti. Bu kötü bir kullanıcı deneyimine yol açar.
Thomas Owens

Yanıtlar:


18

MMM nedir

Önce Brook Yasası'nın bağlamını açıklamak istiyorum. Onu 1975'te yeniden yaratmasına neden olan varsayım neydi?

Bir Man-ay, bir kişinin bir ay içinde yaptığı işi temsil eden varsayımsal bir çalışma birimidir; Brooks kanunu, yararlı çalışmaları insan aylarında ölçmenin imkansız olduğunu söylüyor.

kaynak: https://en.wikipedia.org/wiki/The_Mythical_Man-Month

O zamanlar, karmaşık programlama projeleri büyük monolit sistemler anlamına gelecektir. Ve Brooks, bunların geliştiriciler arasında iletişim olmadan ve görevler ile bunları yerine getiren insanlar arasında bir dizi karmaşık ilişki kurmadan üzerinde çalışılabilecek ayrı görevlere mükemmel bir şekilde bölünemeyeceğini iddia ediyor.

Bu son derece uyumlu yazılım monolitlerinde çok doğrudur. Ne kadar ayrıştırma yapılırsa yapılsın, büyük monolit, yeni programcıların monolit hakkında bilgi edinmesi için gereken zamanı zorunlu kılmaktadır. Ve artan iletişim yükü, mevcut zamanın giderek artan bir miktarını tüketecektir.

Ama gerçekten bu şekilde olmak zorunda mı? Monolit yazmak ve iletişim kanallarını geliştiricilerin sayısına n(n − 1) / 2nerede tutmak zorunda mıyız n?

Binlerce geliştiricinin büyük projeler üzerinde çalıştığı şirketler olduğunu biliyoruz ... ve işe yarıyor. Yani 1975'ten beri değişen bir şey olmalı.


MMM'yi azaltma imkanı

2015 yılında, PuppetLabs ve IT Revolution, 2015 DevOps Durumu Raporu'nun sonuçlarını yayınladı . Bu raporda, yüksek performans gösteren kuruluşlarla yüksek performans göstermeyenler arasındaki farka odaklandılar.

Yüksek performans gösteren kuruluşlar bazı beklenmedik özellikler gösterir. Örneğin, geliştirmede en iyi proje bitiş tarihi performansına sahiptirler. Operasyonlarda en iyi operasyonel kararlılık ve güvenilirlik. Yanı sıra en iyi güvenlik ve uyum sicili.

Raporda vurgulanan şaşırtıcı şeylerden biri, günlük dağıtım sayısı metriğidir. Ancak, yalnızca günlük dağıtımları değil, dağıtım / gün / geliştiriciyi ve yüksek performans gösteren kuruluşlara yüksek performans göstermeyenlere kıyasla daha fazla geliştirici eklemenin etkilerini de ölçtüler.

Bu rapordaki grafik -

Geliştirici Başına Günlük Dağıtımlar

Düşük performans gösteren organizasyonlar Efsanevi Adam Ay varsayımlarına uyar. Yüksek performanslı kuruluşlar konuşlandırma / gün / dev sayısını geliştiricilerin sayısına göre doğrusal olarak ölçeklendirebilir.

Gene Kim'in DevOpsDays London 2016'da mükemmel bir sunumu bu bulguları anlatıyor.


Nasıl yapılır

İlk olarak, yüksek performanslı bir organizasyon nasıl olunur? Bunun hakkında konuşan birkaç kitap var, bu cevapta yeterli alan yok, bu yüzden sadece onlara bağlanacağım.

Yazılım ve BT kuruluşları için, yüksek performanslı bir kuruluş olmanın kritik faktörlerinden biri: kalite ve hıza odaklanma .

Örneğin Ward Cunningham Teknik Borçları açıklanmasına izin verdiğimiz her şey olarak açıklıyor . Bu, yönetim tarafından kabul edilir, çünkü her zaman zaman olduğunda düzeltileceğini vaat eder.

Asla yeterli zaman yoktur ve teknik borçlar gittikçe kötüleşir.

Teknik borcun artmasına neden olan bu şeyler nelerdir?

  • eski kod
  • ortamların manuel yapılandırması
  • manuel test
  • manuel dağıtımlar

Eski kod Michael Feathers tarafından Eski Kod ile Etkili Çalışma bölümünde tanımlandığı gibi , otomatik teste sahip olmayan herhangi bir koddur.

Kodu üretime almak için her zaman kısayolu kullanılır; operasyonlar bu borcun sonsuza dek sürdürülmesi ile yükümlüdür. Ardından dağıtım süreci uzar.

Gene sunumunda altı hafta süren dağıtımları olan bir şirket hakkında bir hikaye anlatıyor. On binlerce son derece hataya meyilli sıkıcı adım içeren, 400 kişi bağladı ve bunu her yıl dört kez yapacaklardı.

DevOps'un ilkelerinden biri, güvenilirliğin daha küçük dağıtımları daha sık yapmaktan kaynaklanmasıdır.


Misal

Bu iki sunum, Amazon'un kodu üretime dağıtma süresini azaltmak için yaptığı tüm şeyleri gösterir.

Gene'ye göre, bu yüksek performanslı organizasyonlarda zaman içinde değişen tek şey geliştiricilerin sayısıdır. Amazon örneğinden, dört yıl içinde sadece daha fazla insan ekleyerek dağıtımlarını on kat artırdıklarını söyleyebilirsiniz.


Belirli koşullar altında, sağ mimarisi ile sağ teknik uygulamalar, sağ kültürel normlar, geliştirici verimliliği Bu araçlar olabilir geliştiricilerin sayısı olarak ölçek artar. Ve DevOps kesinlikle tüm bunların ortasında.


4

Yaptığım (ve bu sadece öznel) aşağıdaki gibidir:

Son tarihi düşünen bir yönetici, gerekli zamanı kısaltmak için insanları ekibime eklemek istediğinde ve MMM altında göründüğünde, öncelikle onunla bunun neden kötü olabileceğini tartışıyorum. Bunun en sevdiğim benzetmesi, bir kadının dokuz ayda bebek sahibi olabilmesi durumunda dokuz kadının bir ayda bir bebeği olmayacağını, ancak dokuz ayda dokuz bebeğinin olacağını hatırlatmaktır. Zaman kesilmez, sadece paralel işleme daha iyidir.

Karar ekibimize zorlandığında, genellikle bazı görevleri daha fazla bölmeye çalışırız ve bu mümkün olmadığında, genellikle bir programcının yazmaktan sorumlu olduğu ve diğerinin kodu diktiği (ve periyodik olarak değiştirdiği) çift ​​programlamaya güveniriz. ).

Kod yazmanın kendisi daha yavaştır, ancak yazarken yapılan kaçınılmaz inceleme nedeniyle test sırasında daha az yazım hatası / linting ve hata var. Genel kod kalitesi de biraz daha iyi hissediyorum, ama bu iddiayı destekleyecek hiçbir ölçüt yok.


1
Çift programlama fikrini seviyorum. Bu aslında yardımcı olabilecek bir şey. Daha sonra üzerinde çalıştığım teoriye dayanarak neden açıklayabilirim.
Jiri Klouda

lütfen yap, bekle!
Peter Muryshkin

4

Sadece bir CI perspektifinden bahsetmişken, bir proje üzerinde çalışan geliştiricilerin sayısını artırmak genellikle aynı dalda çalışan daha fazla insana dönüşür.

Geleneksel CI sistemleri bu açıdan bir ölçeklenebilirlik sorununa sahiptir: kırılma / gerileme / tıkanma olasılığı entegrasyon hızını yavaşlatır ve daha küçük takımları kırıp çocuk dallarına geçmeye davet eder (yani daha fazla yavaşlama). Bkz . Çok büyük projeler / ekipler için sürekli entegrasyon nasıl ölçeklenebilir? . Bu, Efsanevi Adam Ay konsepti boyunca oynuyor.

Bu soruya cevabımda önerdiğim çözüm, yüksek düzeyde ölçeklenebilir bir CI sistemi, tüm büyük ekipler için (büyük boyutlarda bile) gerçek CI - tek şube / gövde tabanlı entegrasyona geçişi sağlayacaktır.

Aynı sayfanın herkesiyle, aynı otomatik araçları / süreçleri ve CI sisteminin kendi içinde otomatik hale getirilen KG doğrulamalarının büyük çoğunluğunu kullanarak rolleri değiştirmek ve ekip üyeleri arasında odaklanmak çok daha kolay hale gelir. Tüm gelişim süreçleri daha pürüzsüz, daha öngörülebilir, daha rahat hale gelir.

Yeni insanları böyle bir ortama taşımak, daha deneyimli ekip üyelerinden daha az zor görevleri yükleyerek onları daha zor görevler üstlenerek üretken hale getirmek böylece daha kolay olur.

Tüm bunların, Efsanevi Adam Ayı kavramının etkilerini yatıştırıcı olarak gördüğüne inanıyorum.


Yüksek performanslı kuruluşlarda, daha fazla geliştirici eklemek genellikle ayrıştırılmış yazılım yazan daha bağımsız ekipler oluşturmak anlamına gelir. Bu, daha fazla insanın daha fazla ve daha hızlı başarabilmesini sağlar. Hepsinin tek bir entegrasyon dalı aracılığıyla iletişim kurması bir anti-modeldir ve büyük olasılıkla işleri önemli ölçüde yavaşlatacaktır.
Evgeny

Having them all communicate via a single integration branch is an anti-pattern- neden? Artık çalışmalarını entegre etmeleri gerekmeyecekleri için ayrılırlarsa, dalla çakışmayan / çatışmasız bir şekilde dokunacaklar. Çalışmalarının hala entegre edilmesi gerekiyorsa, ek şubelere gitmek, CI metodolojisinden saparak ve tüm avantajlarını kaybederek entegrasyonu geciktirecek ve karmaşıklaştıracaktır.
Dan Cornilescu

Bence "dal" anlamında hemfikir değiliz. Tek bir dalı (git veya svn) olan tek bir büyük depoya sahip olmak ve aynı alanda çalışan herkesin yükünü çekmek iyidir. Ayrıca, her deponun söz konusu ayrıştırılmış hizmeti izleyen bir şubeye sahip olduğu birden çok deponun olması da iyidir. Araca, taahhüt ve ödeme koduna eklediği ek yük miktarına bağlıdır.
Evgeny

Ah, üzgünüm, evet - Buna çok alışkınım ve başkalarının olmadığını unutmaya devam ediyorum. Şube ile, SCM şubesinin yüksek seviyeli, genel temsiline atıfta bulunuyorum, birlikte monolitik bir şekilde birlikte yönetildikleri sürece, altta yatan gerçek SCM sistemlerinin özelliklerinin hangisi olduğu gerçekten önemli değil. . Bir mainşubeye sahip 1 büyük repo veya her bir şubeye sahip 10 yan yana depo (git modülleri?) mainCI prospektifinden hemen hemen eşdeğer olmalıdır.
Dan Cornilescu

O zaman ilk yorumdaki ifadem doğru olur. Bağımsızlık bir babil kulesinde yapılamaz, bir monolitiniz olduğunda yükü herkes için çok yüksektir - bu yüzden herkes yüklenir. Ayrılmış projeleri yönetmek için ayrıştırılmış küçük VCS sistemleri olarak temsil etmek çok daha iyidir. Yeterince hatırlarsanız, bazı şirketler TÜM şirket kodunu yönetmek için ClearCase ve diğer VCS'yi kullanıyorlardı - ek yük korkunçtu.
Evgeny
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.