Scrum takımı YAGNI ilkesine uymuyor


13

SCRUM toplantısında ürün ekibi, mobil uygulama tarafından tüketilecek bir API'daki bir özellik hakkında tartışıyordu. Ekranın nasıl görünmesi gerektiğini ve hangi temel öğeleri içermesi gerektiğini gösteren bir modelimiz vardı ("düzen").

Buna ve ürün sahibiyle yaptığım tartışmaya dayanarak bir API yanıtı (HAL + JSON) için bir prototip oluşturdum. Çok basit, HAL uyumlu JSON, maketlerdeki şeyleri temsil etmekten başka bir şey yapmadı. Fikirlerini sık sık değiştirme eğilimi gösterdikleri için iş adamları tarafından öngörülen gelecekteki fikirlerden etkilenmedim ve minimalist yaklaşımı benimsemeye karar verdim. Teklifim ekip tarafından reddedildi ve 7'den 1'e reddedildim.

Ekip, yerleşimin düzenlenmesinde daha fazla esneklik sağlayan daha karmaşık, anlamsız soyut json yapısını kullanmaya karar verdi. Bu yaklaşımın dezavantajı, tasarım gereği boş ve boş özelliklere sahip olabilecek bir dizi tek tip nesne ile sonuçlanmış olmamızdır. Ayrıca A / B testini mümkün kılmanın iyi olacağını düşünüyorlardı, ancak sadece böyle bir gereksinimimiz olmadığından tahminlerine dayanıyordu.

Çoğu zaman süratin bir parçası olmayan ya da maketlerde bahsi geçen şeyler hakkında tartışıyorduk. Açıklanan sorunlar "ya gelecekte pazarlama yapacaksa ...", "ya iş yapmamızı isteseydi ..." idi.

Ben ve ürün sahibi deneyimli programcıyız ve geçmişte bu tür sorunları gördük. YAGNI ve KISS ilkelerini takip etmeye çalışıyoruz . Ekibin geri kalanı biraz daha az deneyimlidir ve bu ilkeleri bilmelerine rağmen, onları anlamıyor gibi görünmektedir.

Bir bütün olarak ekip bizim için daha önemli olduğu için onların çözümü üzerinde anlaştık ve o kadar da önemli olmayan bir şeyle savaşmak istemedik. Ama korkuyorum ki böyle bir şey yeni çıkan, daha karmaşık tartışmalar için bir emsal olabilir mi? Böyle bir davranışla nasıl başa çıkılır? Takım lideri olarak daha iyisini yapabileceğim bir şey var mı?

Ürünün erken aşamada bir MVP olduğunu belirtmek gerekir.


11
I'm afraid if such thing can become a precedence for upcoming, more complicated debates?- Bu da YAGNI'yı ihlal ediyor: gerçekleşmeyecek bir gelecek hakkında endişelenmek. Yerinizde duracak olsaydınız, bunu zaten yapmış olmalısınız.
Robert Harvey

@gnat: Bu, zaman kısıtlamaları ile ilgili görünmüyor.
Robert Harvey

HAL-Uyumlu olmak YAGNI'ya tabi değil mi?
Matthew

@Matthew her şey bir hafta sürdü ve ben sadece HAL kurtulmak için düz JSON kullanarak başka bir prototip hazırladım, ama aynı zamanda "yeterince esnek değil" olarak görüldü reddedildi. Ekip onu değiştirdi ve değiştirilen sürüm sonunda kullanıldı. HAL bizim için standart, bir dizi kılavuz olarak çalışıyor ve benim için tüm uç noktalarda tek tip bir yapı uygulamak daha kolay. Önceki API herhangi bir standart kullanmıyordu ve iyi sonuç vermedi.
Jacek Kobus

5
Esneklik karmaşıklığı artırır. Takım bunu anladığı sürece, kişi ilerleyebilir.
Jon Raynor

Yanıtlar:


10

Acını hissediyorum, orada bulundum. IMHO, bu tür sorunlara, her zaman en iyi stratejik kararları vermenize izin veremeyecek kadar büyük olan 8 kişilik bir ekibiniz olması nedeniyledir.

8 veya daha fazla şansa sahip bir ekipte vasat programcıların sayısı deneyimli olanlardan daha fazladır. Bu genellikle daha iyi kararların vasat kararlar tarafından aşıldığı durumlara yol açacaktır. Bu, özellikle daha deneyimli adamlardan biri olduğunuzda (veya olduğunuzu düşünüyorsanız) tatmin edici görünmüyor, ancak en azından aynı şey gerçekten kötü kararlar için genellikle doğrudur.

Gerçek şu ki, takım değişmediği sürece , en azından işler demokratik kalacaksa, bu konuda yapabileceğiniz çok şey yoktur.

  • Onunla yaşamayı öğren
  • bir veya iki yıl boyunca ekiple birlikte çalışın, kendi uzmanlığınızı paylaşın ve zaman içinde YAGNI ve KISS'in değerini öğrendiklerini umuyoruz
  • ekibe tasarım veya stratejik kararları "satma" becerileriniz üzerinde çalışın
  • kendi uzmanlık seviyenizin tüm ekibin ortalamasına yakın olduğu farklı (belki daha küçük) bir takıma geçmeye çalışın

Minimalist bir yaklaşımın gerçek değerini öğrenmenin ve anlamanın tek yolunun ve YAGNI'nın bazı deneyimleri birinci elden yapmak olduğunu düşünüyorum. Örneğin, bir çok yanlış "ne olursa olsun" tahminleri olan eski bir sistemin bakımına dahil olarak, "her ihtimale karşı" argümanları tarafından motive edilen yanlış tasarım kararları veya aslında hiçbir zaman ihtiyaç duyulmayan aşırı genelleştirilmiş çerçeve kodu içeren. Ancak bu, iki gün içinde ekip üyelerinize öğretebileceğiniz hiçbir şey değildir; insanların kendi başlarına yapmaları gereken bazı deneyimler.


5
Çoğu insan sıcak olduğunu öğrenmek ve dokunmamak için sobaya dokunmak zorundadır. Yazılım hemen hemen aynı. ++
RubberDuck

2
Bir proje günlüğü / günlük tutmak bu tür şeyler için anahtardır. Gerçekleştirilen çeşitli tartışmaları kaydettikten sonra, aylar veya yıllar sonra insanların konuşma hatırlamalarından çok daha somutturlar. Burada uygulama hakkında iyi bir soru var .
Robbie Dee

@RobbieDee: elbette, ekibin YAGNI ve KISS hakkında bilgi edinmesine yardımcı olursa.
Doc Brown

3
3. mermi (bir tasarımı “satma” konusunda kendi becerileriniz üzerinde çalışmak) yeterince dikkat çekmez. Bu yüzden geliştiricilerin hala iyi iletişim becerilerine sahip olmaları (veya üzerinde çalışmaları) gerekmektedir.
Randall Stewart

@RandallStewart: kesinlikle. Ancak en iyi iletişim becerileriyle bile, YAGNI'yı kendi başlarına bazı deneyimler yapmayan veya "hızlı ve kirli" ile karıştırmayan veya "soyutlamanın (her zaman) iyi" olduğu konusunda eğitilen insanlara satmak zor olabilir ve bu yüzden deneyin basitleştirme yerine soyutlama uğruna soyut şeyler yapmak. İletişim iki tarafa ihtiyaç duyar - biri olayları iyi açıklayabilen, diğeri ise dinlemeye ve anlamaya istekli.
Doc Brown

8

İleri uyumluluk meşru bir sorundur

Sizi geride bırakan yedi geliştiriciden biri mimarsa , NFR'leri gerektiği gibi tanıtmak onun hakkıdır ve bu NFR'lerden biri, özellikle daha seyrek olabilen bir uzak sistem bileşenini desteklediğinizde "ileri uyumluluk" olabilir. çıkış programı. İleriyi düşünmediğiniz için kullanıcıların bir uygulamanın yeni bir sürümünü yüklemesini istemezsiniz.

Diğer şartlar gibi, kabul kriterlerine de ihtiyacınız var

Bununla birlikte, herhangi bir UFR, gereklilik olarak belgelenmeli ve tanımlanmış kabul kriterlerine sahip olmalıdır . Ayrıca, bunları test etmek için bir araç bulmalısınız . Bu yüzden YAGNI önemlidir - test edilemeyen kod yazmak istemezsiniz ve kodun tek amacı kimsenin kullanmadığı bir özelliği desteklemekse, test etmek zordur.

Bir karar çağrısı olmamalı

Ekibin, görünüşte kaçırdığınız ve bunu yazdığınız söz edilmeyen gereksinimi kabul etmesini öneririm. Test etme yöntemlerini tanımladıktan sonra, uygulamanız en az bir testten geçmemelidir ve bu nedenle bir oylama konusu olmamalıdır.


1
OP'nin ekibinin ileri bir uyumluluk gereksinimi nedeniyle YAGNI'nin yolundan ayrıldığını nereden okuyorsunuz?
Doc Brown

İleri uyumluluk, Content-Typebaşlık için kullanılır
Jack

2
İsterseniz başka bir şey demeye hazırım, belki de genişletilebilirlik. Nokta aynı; hala bir NFR.
John Wu

1
Sistemi genişletilebilir hale getirmenin iki yolu vardır. Birinci yol, birçok potansiyel gereksinim değişikliğini öngörmeye ve işleri "her ihtimale karşı" yapılandırmaya zorlamaya çalışıyor. Eminim bu tür genişletilebilirlik için birçok kabul testi icat edebilir. Veya işleri olabildiğince basit tutmak, böylece kod tabanı küçük kalır, kavranması kolaydır ve uzatma noktaları veya soyutlamalar daha sonra gerçekten ihtiyaç duyulduğunda eklenebilir. İkincisi, testler yazabileceğiniz (veya ihtiyacınız olan) bir şey değildir. Böylece bunun "konuşulmamış NFR'leri yazarak" kolayca çözülebileceğini sanmıyorum ...
Doc Brown

... bu daha çok, belki de yaratıcı geliştiricilerden oluşan bir ekibin NFR'ler hakkında varsayımlarda bulunmaktan ve bazılarını icat etmekten nasıl vazgeçeceği ile ilgilidir.
Doc Brown

3

Görünüşe göre ürün ekibinin sahip olmak istediği hızlı deneme denemelerini sağlayan bir çerçeve oluşturarak geliştirme ekibiniz ürün ekibini kolaylaştırmaya çalışıyor gibi görünüyor. Yaklaşımınız "tam olarak onlara ne istediklerini verin ve onlar için düşünmeyin" gibidir.

Eğer ürün sahibi olsaydım ilk yaklaşımı benimseyen bir geliştirme ekibinden çok daha mutlu olurdum.


3
+1 değişim ve değişim planlaması, tam mimari astronot yapmak ve bir iç platform oluşturmakla aynı şey değildir . Şu anda biraz zemin çalışması gelecekte çok fazla çalışmayı engelleyebilir. OP'nin ekibi belki de varsayımsalların yönüne biraz fazla eğilirken, köktendinci bir YAGNI yaklaşımı kesinlikle yetersizdir.
amon

4
OP'yi mutlu bir şekilde geride bırakacak ve ekibin geri kalanından daha "gelecekte ne olacaksa .." için aynı planlama hatalarını yapacaksınız . Görev uygulama yazılımı oluşturmak olduğunda, insanlar uygulama yazılımı yerine çerçeve oluşturmaya başladığında, neredeyse her zaman yanlış yaparlar.
Doc Brown

@DocBrown Teknik olarak katılıyorum. Ancak bu dava, talep edilen kişisel saygıya karşı kolaylaştırmaya istekli olmakla ilgilidir. Bir yandan "doğru" olmak, diğer yandan yararlı veya yararlı olmak. Çizgiler arasında okuduğum şey, OP'nin zemin kaybetmesi ve artık rahat hissetmediği bir ortama katkıda bulunmak yerine deneyimini çevrimiçi bir kitleye vurgulayarak egosunu pompalamayı seçmesidir. Bu dinamik, scrum'un tanıtımı için tipiktir.
Martin Maat

@MartinMaat Benimle aynı fikirde olmadıkları için biraz hayal kırıklığına uğradım. Neden olduğunu anlamadım. Günlük çalışma sırasında onlara kod incelemeleri vb. Konusunda yardımcı olurum. Fikirlerime saygı duyduklarını biliyorum; Her zaman teorilerimi destekleyen geçerli argümanlar kullanmaya çalışırım. Sonunda en iyi seçeneği seçiyorlar ve bunun için sorumluluk alıyorlar. Takım yapması gereken şeyi yaptı - sorunu çözdüler. Benim ve ürün sahibimin hatası, konunun en başından beri çok geniş ve zayıf bir şekilde tanımlanmış olmasıydı.
Jacek Kobus

2

Benim düşüncem demokrasinin düzgün çalışmadığıdır - ne siyasal sistemde ne de çoğu programcının genç veya vasat olduğu bir ekipte.

Takım lideri olarak ve bir takımdaki en deneyimli kişilerden biri olan sözünüz, ekibin geri kalanından daha yüksek etkiye sahip olmalıdır. YAGNI sizin için önemliyse, o zaman bir sunum yapmalısınız. Bunun hakkında tartışın ve onlara neden iyi olduğunu gösterin.

Sonuçta, sorumluluğunuz diğer insanlardan daha yüksektir. Sadece kod yazmak değil, aynı zamanda insanlara da rehberlik etmek.


3
Demokrasi muhtemelen buradaki sorunun sebebidir, ancak demokratik olmamak IMHO'nun çözümü değildir, çünkü soruda açıklananlardan daha büyük sorunları kolayca getirebilir - aslında takımı mahvedebilir.
Doc Brown

@DocBrown Aynı cümleyle kendinizle çeliştiniz. IMO'nun bazı kararları insanların kararına bağlı değil. OP'nin açıkladığı şey bunlardan biri. Armstrong'u YAGNI kullanmayan insanlar için alıntılamak için: Muz istediniz, ancak elinizde muz ve tüm ormanı tutan bir goril vardı
BЈовић

2
Hayır, bu bir çelişki değil (belki de fikrimi iyi ifade etmedim). İşler her zaman "siyah beyaz" değildir. Demokrasi bazı durumlarda iyi çalışmadığı için demokratik olmamak, durumu iyileştirmek ve işleri iyileştirmek için bir garanti değildir. Genellikle o kadar basit değildir.
Doc Brown

1
Demokrasi ile zorunlu olarak "doğru" şeyi alamazsınız, çoğu insanın üzerinde anlaştığı şeyi alırsınız. Ve bu kusurlu olabilir. Ve çoğu zaman "doğru" şeyin sosyal kabul ile ilgili bir sorunu vardır. YAGNI, gerekirse kolayca "goril" veya "tüm orman" eklemenizi sağlayacak uygun soyutlamaları tanıtmanızı engelleyecek kelepçe olmamalıdır.
oopexpert

@oopexpert Sorun şu: Onlara ihtiyacınız olabilir . YAGNI aşırı mühendisliğe karşı konuşuyor. Uygun soyutlamalar bir şeydir, ihtiyacınız olmayan şeyler eklemek farklı konulardır.
BЈовић

2

YAGNI hakkında biraz karışıklık olduğunu düşünüyorum.

Geliştiriciler genellikle sistemi "değişiklik için kapalı ve uzamaya açık" tutacak soyutlamaları göz ardı ettiklerinde YAGNI'yı takip ettiklerini düşünürler.

Sistemi "açıkça" talep edilmeyen bir işlevle "genişletmediğiniz" sürece YAGNI ile ilgilenmezsiniz. Uzatmanın meydana gelebileceği soyutlamalara giriş, daha önce bahsedilen "ileri uyumluluk" dur.

Benim kişisel görüşüm, alan hakkında sadece derin bir bilginin soyutlama ve nerede bulunacağı konusunda kararlar almaya yardımcı olacağıdır.


2

YAGNI VE KISS ile ilgili sorun tamamen öznel ve belirsiz olmalarıdır.

json ?? YAGNI! sadece bir csv dizesi gönderin!

nesneleri ?? KISSTUPID !!! sadece gotos kullanın !!

'Takım Lideri' rolü iyi tanımlanmamıştır, ancak takımınızın teknik tercihleri ​​hakkında öznel görüşlerinizi ifade etmekten uzaklaşmanızı öneririm. Yanlış hissetmiş olsanız bile. İyi tanımlanmış gereksinimlerin kısa bir listesine sadık kalın.

  • kod için birim testleri
  • apis için entegrasyon testleri
  • son ürün için otomatik kullanıcı arayüzü testleri
  • performans ve ölçeklendirme gereksinimleri

ekip, tüm iş gereksinimleri ve ölçekli teknik gereksinimlerdeki temel performans için başarılı testler gerçekleştirebilirse, çalışan bir ürününüz vardır.

Bundan sonra sadece aynı şeyi yapmak için bastırıyor


1

Takımda herkes gerekir katılıyorum yapmaktan tanımı . Bu olmadan, büyük miktarda kapsam sürünmesine, bakış açılarına ve temel gereksinimlerin piç haline getirilmesine eğilimlisiniz.

Bunun üzerinde ve üzerinde yapılan her şey, kendisinin de kendi tanımına sahip olacak biriktirme listesinde olmalıdır.

Önceliklere gelince, MoSCoW yöntemi bize her zaman iyi hizmet etti - YMMV.


1

Bununla ilgili ilk düşüncem ... Takım neden değişikliklerle ilgileniyor? Gelecekteki geliştirmeleri daha kolay hale getirmek için ilk yapılandırmayı biraz daha yapılandırılabilir hale getirmek için ihtiyaç duyduklarını hissettiren Ürün Sahibi hakkında tarihi bir anlayışları var mı? Çözümünüz 2 gün sürecek ve 5 gün sürecekse, evet, iki kat daha uzun. Ancak, planınızın değiştirilmesi her seferinde 2 gün sürecek, ancak planlarında bir iyileştirme 1 gün sürecekse, planları uzun mesafe boyunca daha verimli görünüyor. Bu soruda DOĞRU veya YANLIŞ bir karar olduğunu düşünmüyorum. Diğer faktörlere bağlıdır, IMHO. Bununla birlikte, diğer çözümlerde bunu yapmak için herhangi bir doğrudan rehberlik olmadan LOE'yi iki katına çıkarırlarsa, bu zihniyet hakkında DOĞRUDUR (ölçeklenebilirlik, sağlamlık vb. İçin ek karmaşıklığın gerekli olduğuna dair bazı kanıtlar). Benim önerim, ürün sahibini bu görüşmelere dahil etmek olacaktır, çünkü önceliklendirmeye yardımcı olmaları gerekir. Çözümünüz 5 puan ise ve şimdi ihtiyacı karşılayacaksa, ancak yapmak istedikleri şey 50 puan ve iki sprint veya daha fazla gerektirirse, PO "bekle, planlanan bu MVP'nin yüksek öncelikli bir sürümüne sahibiz ve yol haritası üzerinde olmayan işlevselliği geliştirmek için 2 hafta harcayamam! "

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.