Yaklaşık üç yıldır çevik bir metodoloji (SCRUM) kullanıyorum ve özellikle birçok seviyedeki kısa vadeli geri bildirimlerde (erken erişime sahip müşterilerden, özellikleri test edebilen test cihazlarından) belirli avantajlar görüyorum. uygulandığında, yeni kod hakkında inceleme yoluyla çok erken geri bildirim sağlayabilen diğer geliştiricilerden vb.
Öte yandan, birincisi bu soruda açıklamaya çalışacağım iki açık sorunum var.
Sorun: İyi bir tasarım elde etmekte zorluk
Kod dağınık olur olmaz refactoring yapmaya çalışıyorum (ben genel olarak ve özellikle yeniden düzenleme zaman hataları önlemek için yardımcı olur) mümkün olduğunca birim testleri yazıyorum . Öte yandan, günlük taahhütlerle küçük artışlarla bazı karmaşık özellikler geliştirmek ve yapılandırılmadan kodu sürekli olarak yeniden düşünmek gerçekten iyi bir tasarım üretmeme izin vermiyor.
Son zamanlarda üretebildiğim tek iyi tasarlanmış modül farklı bir yaklaşımla elde ettim: Sorunu birkaç gün boyunca analiz ettim (gerçekten ciddiyetle çalışmaya başlamadan önce birkaç ay boyunca sorunum vardı) ), ilgili tüm sınıfların ve ilişkilerinin birkaç gün daha ayrıntılı bir taslağını çizdi ve daha sonra kendimi ofisime kilitledim ve yaklaşık üç hafta boyunca kesintisiz çalışarak tüm kodu yazdı. Sonuç, bir süredir ürettiğim en iyi şeydi, bulunması ve düzeltilmesi oldukça kolay olan çok az hata ve o zamandan beri ilgili değişiklikler gerektirmeyen çok net bir tasarımdı.
Şimdiye kadar, büyük resmin büyülü bir şekilde süreçte ortaya çıkması umuduyla küçük artışlarla kod yazmaya başlamaktan önce yapmak istediğim şeyin genel bir resmini elde etmeyi çok daha etkili buldum. En iyi çabamla, küçük artış geliştirme yaklaşımı beni her zaman daha kötü tasarıma götürdü.
Soru : Benzer bir deneyim yaşadı mı? SCRUM'u yanlış mı uyguluyorum ya da küçük artışlarla geliştirmek ve yine de iyi tasarlanmış bir yazılım parçası bulmak istiyorsam nelere dikkat etmeliyim? Yoksa gerçek kodlamaya başlamadan önce bir tasarım kullanıcı hikayesi mi planlamalıyım ? En azından ortalamadan daha karmaşık özellikler için bu iyi bir uygulama mıdır?
DÜZENLE - NOT
İyi tasarımın mutlak bir şey olmadığı ve kendi başına bir değeri olmadığı gerçeğinin farkındayım, ancak bağlama bağlı ve kişinin eldeki problem için yeterince iyi bir tasarıma yönelik olması gerekiyor .
Örneğin, (1) mümkün olan en kısa sürede hazır olması gereken, (2) sadece bir kez kullanılacak, (3) kullanılmayacak basit bir bileşen uygulamak zorunda kalırsam iyi tasarımı önemsemiyorum (çok fazla) sistemin diğer parçaları (YAGNI) tarafından kullanılır.
Bir bileşen (1) birkaç kez kullanıldığında ve bir ürünün birkaç farklı sürümünde (2) zaman içinde bakımı ve uzatılması gerektiğinde iyi bir tasarıma önem veriyorum, (3) buna bağlı olarak çok sayıda başka bileşeni var .
The only well-designed module I could produce recently I obtained by taking a different approach
- Kendi sorunuzu cevapladınız. Yine de bazı ön tasarımlara ihtiyacınız var ; iyi bir tasarımın organik olarak yeniden düzenlemeden büyümesini bekleyemezsiniz. Bu şekilde çalışmaz.