Bazen bir proje üzerinde çalışıyorsunuz ve aniden bir şey beklenmedik bir şekilde ortaya çıkıyor, işlerde büyük bir anahtar atıyor ve karmaşıklığı bir hayli artırıyor.
Örneğin, diğer çeşitli makinelerde SOAP servisleriyle konuşan bir uygulama üzerinde çalışıyordum. İyi çalışan bir prototip çırptım, sonra düzenli bir ön uç geliştirmeye devam ettim ve genellikle her şeyi güzel ve oldukça basit ve takip etmesi kolay bir şekilde çalıştırıyorum. Daha geniş bir ağda test etmeye başlayana ve aniden sayfaların bağlantıların gecikmesi ve uzak makinelerde hesaplamalar yapmak için gereken süre sabun hizmetlerine zaman aşımına uğramasıyla sonuçlanan zaman aşımına uğrayana kadar harika çalıştı. İstekleri kendi iş parçacıklarına döndürmek ve döndürülen verileri önbelleğe almak için mimariyi değiştirmemiz gerektiği ortaya çıktı.
Bu senaryonun detayları çok önemli değil - aslında oldukça öngörülebilir olduğu için harika bir örnek değil ve bu tür bir ortam için bu tür birçok uygulama yazan insanlar bunu tahmin etmiş olabilir - ancak kişi basit bir öncül ve model ile başlayabilir ve birdenbire projenin gelişimine karmaşıklığın artmasına neden olabilir.
İhtiyaçları ortaya çıkan - genellikle spesifikasyon değişikliğinden ziyade çevresel faktörlerin bir sonucu olarak - daha sonra geliştirme sürecinde veya test sonucunda ortaya çıkan bu tür fonksiyonel değişikliklerle başa çıkmak için hangi stratejileriniz var? Nasıl / prematüre optimizasyon / YAGNI kaçınarak çözüm tasarlarken risklerini overengineering arasında denge yok olması mümkün ancak mutlaka değil karşı azaltır muhtemel etkili olarak olması muhtemeldir fakat için değil anonim hazırlık yapar daha basit ve daha kolay çözüm geliştirirken aksine sorunlar olası her ihtimal?
Düzenleme: Crazy Eddie'nin cevabı "emmek ve yeni karmaşıklığı uygulamak için en ucuz yolu bulmak" içerir. Bu bana soruda örtük olan bir şey hakkında düşündürdü ama ben özel olarak dile getirmedim.
Bir kez o çarpma vurmak ve gerekli değişiklikleri dahil. Projeyi planlamaya olabildiğince yakın tutacak ancak sürdürülebilirliği etkileyebilecek bir şey mi yapıyorsunuz yoksa mimarinize geri dönüyor ve daha sürdürülebilir olabilecek ancak geliştirme sırasında her şeyi geri itecek daha ayrıntılı bir düzeyde mi yeniden çalışıyorsunuz?