YAGNI (You Aren’t Gonna Need It)

Eğer bugün ihtiyacın yoksa gelecekte lazım olur diye (belki de hiç lazım olmayacak/kullanılmayacak bir işe) efor harcatmama prensibi diyebiliriz 🙂

Genellikle yazılım ürünleri geliştirirken bazen kendimize hakim olamayıp ya da ana odağımızı kaybederek, ürüne gelecekte şu lazım olur diye bugünden bazı geliştirmeler yaparız. Bu prensip bize yalnızca bugünün ihtiyaçları için geliştirme yapmamızı şart koşar.

Bu sayede belki de ürünün gelecekte hiç ihtiyacı olmayan bir geliştirme yapmamızın (özellik eklememizin) önüne geçer ve kısıtlı zaman ve insan gücü kaynağımızı verimsiz şekilde değerlendirmemizi engellemiş olur.

Bu konu önemli olduğundan örnek bir senaryo ile pekiştirmek istiyorum;

Örneğin; kullanıcılarınızın arkadaş listesini ad-soyad/telefon ve doğum tarihi bilgileriyle tutacak bir yazılım ürünümüz (uygulamamız) olsun. Bu uygulamaya; kullanıcılar arkadaşlarının en sevdiği renk bilgisinide kaydetmek isteyebilir düşüncesi ile aslında bugün zorunlu niteliğe sahip olmayan bir geliştirme yapmamalıyız. Farzedelim ki biz gittik bu özelliği geliştirdik, ürüne ekledik ve aradan 1 yıl geçti… Kodlarda gezinirken “en sevdiği renk” bilgisinin tutulduğunu fakat hiçbir kullanıcı tarafından bunun kullanılmadığını gördüğümüzde tadımız kaçar, canımız sıkılır 🙂 Hatta bazen bu şekilde gereksiz yaptığımız geliştirmeler bize ayak bağı bile olabilir.

İşte tam böyle bir anda kendinizi; o günün şartlarında zorunlu olmayan bir özelliği geliştirmenin zaman ve iş gücü kaybına istinaden yaşattığı pişmanlığı hissederken bulabilirsiniz.

Peki geliştirilebilir kod yazma noktasında bu prensip nasıl değerlendirilmeli?

Eğer gelecekte geliştirmeye engel olabilecek bir konu var ise, bu konu o anda en doğru şekilde ele alınmalıdır. Aksi takdirde gelecekte çok daha büyük eforlar ortaya çıkartabilir.

Örneğin; bir kütüphane kullanacağız ve bu kütüphane gelecekte belki lazım olabileceğini öngördüğümüz bir özelliğe sahip değil. Bu durumda gelecekte öngördüğümüz özelliği geliştirmek istediğimizde kullandığımız bu kütüphane nedeniyle bloklanabiliriz. Bu nedenle mimari ya da teknoloji yığını (tech-stack) tercihleri gelecekteki olası ihtiyaçlar dikkate alınarak yapılmalıdır. Yani tercih edeceğimiz çözüm/araç geliştirmeye açık olmalıdır ki bizim projemizi geliştirmemizin önünde bir engel olmasın. Aksi takdirde başka bir kütüphaneye geçmemiz gerekebilir ve bunun bize; eski kütüphanenin kullanıldığı yerleri yenisi ile değiştirme, bağlı testleri güncelleme, uyumluluk sorunlarını çözme gibi ciddi efor isteyen yükleri olacaktır..

Yani sevgili geliştirici ya da geliştirici adayı arkadaşım; bugün geliştirme yaparken yalnızca günün ihtiyaçlarını dikkate almalı ve bu sınırlarda geliştirme yapmalısın. Nasılsa kodu yazan sensin, eğer gelecekte lazım olursa o zaman eklersin 🙂 Nasıl kulağa daha mantıklı geliyor değil mi?

Hiçbir zaman çalışmayacak kodlar/kullanılmayacak özellikler geliştirmemeniz dileğiyle…