ANTI-PATTERNS

Lava Flow Programming Anti-Pattern Nedir?

Onur Dayıbaşı
Architectural Patterns
3 min readJun 10, 2021

--

Hangi ürün olursa olsun, geliştirilen ürünün analiz, tasarım, geliştirme veya test süreçleri hiçbir zaman tam olmaz. Hatta ekip yapacakları ürün hakkında yeterli deneyime sahip değilse ürünün içerisine gereğinden fazla özellik, gereğinden fazla kod eklemiş olabilir. Bazı kodları sırf denemek için eklemiş ama yeterli temizliği yapmadan canlıya çıkmış olabilir.

Bu süreç zaman içerisinde kod geri dönülemez sorun yumağına sanki bir kartopu gibi dönüşerek işin içinden çıkılamaz hale gelebilir. Çünkü canlıda ki her kodun ekstra bakım yükü olacaktır.

Kodunuzun düzgün ve neden bu şekilde çalıştığını belirten

  • bir tasarım, analiz dokümanı yoksa,
  • kod bir takım örüntüler, yazılım geliştirme prensipleri (SOLID, DRY, YAGNI) vb… uzak geliştiriyor ise.
  • Doğru modüler yapılar kurulmamış ise,
  • Mantıklı ve doğru Soyutlama ve Kapsama yapılmıyor ise,
  • Kaliteli testler kodun çalışma akışlarını korumuyor ise,
  • Çalışan kişiler çok sık ve kısa zaman aralıkları ile değişmiş ise,
  • kod müşteri tarafından kullanılmıyor ve sürekli bir doğrulamadan geçmiyor ise

kod bir zaman sonra ekibin nasıl çalıştığını bilmediği, dokunmaktan korktukları bir hal alır.

Özellikle ekip içerisinde geliştiricilerin değişmesi sırasında hep bir know-how ve bilgi eksikliği olacaktır.

Peki bu durum nasıl sorunlara yol açar ?

Programlama seviyesinde problemler;

Bir API/Model geliştirdiniz. Bu API/Model kullanan başka servisler geliştirildi.

Yeni sürümlerle birlikte eskiden olan bazı parametre ve değerlerin gereksiz olduğuna karar verdiniz bunları silmek istediniz çünkü ek yük getiriyor. Öncelikle silmek istediğiniz alanları kullanan başka projeler olmuş mu? Bunları kullanarak geliştirme yapmışlar mı ?

Burda devreye eski sürümlere uyumluluk devreye girer. Bu yüzden geçmişte yapılan geliştirmeler ve koddaki özellikleri ekip üyelerinin çok iyi bilmesi ve neden oraya eklendiğinin, nasıl değiştirecekleri konusunda bir planlarının olması önemlidir.

Veri seviyesinde problemler;

Geliştirdiğiniz üründe fazladan veri oluşturdunuz veya fazladan veri girişi yaptırdınız. Bu durumda sisteminizde 1000 lerce kullanıcı için ekstradan

  • bellekte ve diskte alan tutacak
  • network daha fazla veri gönderecek
  • ve bu verinin işlenmesi, güvenliği
  • vb.. konularda fazladan enerji harcayacaksınız.

Birde bu hatalı geliştirmelerin üzerine daha fazla programlama ve veri inşaa edildi.

Bu durum dan nasıl kurtulacaksınız ? Sileceğiniz verinin etkisi olan yazılımlarda bunu yönetmeniz gerekmektedir. Bu verinin etkisini ve oluşturabileceği müşteri rahatsızlıklarını , konuşarak, bilgilendirme yaparak çözmeye çalışmalısınız.

Teknolojik gelişmeler legacy(eski) yapı ile çelişebilir.

Gerçekte (PoC) Proof Of Concept çalışmaları, veya başka bir alanda deney projeler ile altyapılar yapmak hep savunduğum bir yöntemdir. Burada önemli olan bu deneysel çalışmaları nasıl gerçek ürünün içerisine taşıyacağımızdır.

Yöntem nasıl olmalıdır ?

  • Öncelikle analizin iyi yapılmış, ürün kapsamının ve beklentilerin iyi anlaşılmış olması gerekmektedir.
  • Kütüphane seçimi yapılacaksa, bu kütüphane geliştirilmeye devam ediyor mu ? Açık kaynaklı mı? Kütüphane ile ilgili çıkan hatalar fixleniyor mu, ne kadar büyük bir komünite tarafından destekleniyor. İhtiyaçlarınızı karşılamadığı durumda değiştirebilir misiniz?
  • Ürün geliştirmede kullandığını teknoloji/kütüphaneler ne kadar hakimsiniz, yeri geldiğinide üzerinde kendi projenize özel geliştirmeler yapabiliyor musunuz ?
  • Yeri geldiğinde bu kütüphaneleri alternatifleri ile değiştirebilecek planlamalar yaptınız mı ?

Eğer geliştirme ekibi teknoloji/kütüphane konusunda bu analiz çalışmalarını iyi dokümante etmeyip, sonraki geliştiricilere iyi bir şekilde anlatmadıysa, yeni gelenler sürekli olarak bu teknolojiler niye seçildi. Yenilerine geçelim. Yenileri daha başarılı diyerek hemen üst yönetimi ikna çalışmalarına başlayacaklardır. 😃

Özetle;

Lav Akışı ile programlama, canlı için hazır olmayan kodun canlıya gerekli düzeltmeleri yapmadan çıkması, yeterli dokümantasyonu olmaması. Kodun ilgili kısımlarının nasıl çalıştığı know-how (bilgi birikimi) zaman içerisinde ekip tecrübesinden silinmesi, ekibin koda dokunmaktan korkar hale gelmesi. Kodun içerisindeki bir takım yanlışlıkları, hataları görüp bunlara müdahale edemez duruma gelmek.

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--