19 Kasım 2023 Pazar

Legacy ve Modern Projelerde Çalışmak

    S.A. Arkadaşlar,

    Birçoklarımızın yaka silktiği ve bu yüzden de iş aramaya başladığı legacy kodlarda çalışmak ile herkesin kovaladığı ve çalışmak istediği modern yapılı (kimine göre mikroservis, kimine göre modüler veya en azından güncel teknoloji ile yazılmış) projelerde çalışmaktan bahsedeceğiz. Belki çok inanmak istemeseniz de iki projede de çalışmanın avantajları olduğunu düşünüyorum. Hazırsak başlayalım.

     Örneklerim genelde dotnet dünyasından olsa da bu diğer diller için de muhtemelen geçerli olacaktır. O yüzden bazen dotnet framework (genelde legacy adıyla da bahsedebiliriz, her zaman böyle olacak diye bir şey yok), dotnet core (bu da dotnet 5 ile birlikte "core" ifadesinden kurtuldu ama karışıklık olmaması için hala kullanıyoruz) olarak da bahsedersek farklı şeylerden bahsetmediğimizi belirtmek isteriz.

    Legacy kodlar içeren projelerden başlayalım. Buralarda çalışmanın birçok zorluğu olduğunu herhalde anlatmaya gerek yok. Uzun uzun sınıflar, birbirine bağımlı yapılar, copy-paste yapılan kodlar,  manual deployment işleri, test ve dokümantasyondan zaten bahsetmiyorum bile. 

    Projenin daha geliştirme aşamasından legacy düşme ihtimali varsa da (teknik borçlar birikmesi, iş kurallarının çok hızlı değişmesi, proje süresinin uzamas vs vs) genelde yıllardır canlıda olan ve bir yerine dokunulmaya korkulan yerler oluyor. Çalışıyorsa dokunma mantığı ile de çalıştığı için oraya dokunacak bir cengaver de genelde çıkmıyor, çıkanı da sistem törpülüyor. Bir yerden sonra neme lazım, ben de bir if koyar geçerim işine dönüyor maalesef.

    Legacy projeler konusunda muhtemelen herkes çok dertlidir, o yüzden yazdıkça insanın aklına farklı tecrübeleri, okudukları ve duydukları geliyor. O yüzden bu olumsuz havaya bir virgül koyup tekrar konumuza dönelim. 

    Bu projelerin birçoğunun canlıda olduğunu söylemiştik. Buralara yeni özellikler koymak mümkün olmakla birlikte var olan sistemlerin çalışması ve hataların giderilmesi üzerine daha çok emek sarf ediliyor. Özellikle sürekli karşılaşılmayan (repro edilmeyen) hataları çözmek çok daha zor oluyor. Bunun için projeye iyi derecede hakim olmak gerekiyor, potansiyel hata çıkabilecek noktayı iyi tespit etmek gerekiyor, belki log yapısını geliştirmek gerekiyor. Tüm bunları olumsuzluk gibi görsek de ben kendi adıma bu tarz zorlu hatalarla uğraşmayı seviyorum, özellikle çözüldü mü de tadından yenilmiyor. Çünkü bu tarz hatalar bazen günlerce yazdığımız kodlardan daha fazla bizi geliştirebiliyor. Başka güzel bir tarafı da bir sistemin nasıl kodlanmaması gerektiğini de bize göstermiş oluyor. Özellikle yeni projelerde çalıştığımızda o projelerdeki sancıları gördükçe daha özenli işler yapmaya gayret ediyoruz, etmeliyiz.

    Modern projelerde çalışmanın birçok avantajı var, zaten bunları eminim herkes az çok biliyordur. Daha temiz kod yazma, şirkete göre değişse de testini ve dokümantasyonunu yazma (açık söyleyeyim bunu yapan az firma gördüm, projenin en başında bile çok acele işler vardır, o yüzden her 3-4 yılda bir projeyi yeniden yazarlar, neyse olumlu yerde olumsuz şeyler yazmayalım:), gerektiğinde arkadaşınla birlikte çalışma (pair), kod incelemeleri (code review), otomatik geçiş süreçleri (CI/CD) gibi bir sürü güzel nokta var. Genelde de projeyi kodlamak eğlenceli olur (sonlara doğru iyi planlama yapılmazsa yine stresli geçer o ayrı bir konu). Bu projelerde hep böyle olumlu şeylerden bahsetsek bile, birçok projede bir yerden sonra benzer işler yapılmaya başlanır (CRUD), ayrıca yaptığınız işlerin görünürlüğü daha düşüktür. Yani o ürün canlıya çıkmadığı sürece her an vazgeçilme ihtimali vardır, bu da insanı hayalkırıklığına iten bir sürece dönüşebilir.

    Kısaca legacy ve modern projelerde çalışmanın zorlu ve güzel taraflarından bahsetmeye çalıştık. Genelde legacy projelerde çalışılmak istenmese de (hak veriyorum) belli dönemlerde çalışmanın da faydalı olabileceğini düşünüyorum (ihalenin size kalmamasına dikkat edin :). Hiçbir şeyin tamamen siyah ve beyaz olmadığına inanan biri olarak, çalıştığımız işlerden keyif almak dileğiyle.

    Abdullah b. Mes‘ûd (ra)’dan nakledildiğine göre: Resûlullah sallallahu aleyhi ve sellem’e bir adam geldi ve: “Ey Allahın Resûlü, bir topluluğu seven fakat onların işlediği amelleri işleyemeyen bir insan hakkında ne buyurursunuz?” dedi. Hz. Peygamber (sav) de ona şöyle cevap verdi: 

“Kişi, sevdiği ile beraberdir”. (Buhârî, Edeb 96; Müslim, Birr 165.)

Hiç yorum yok:

Yorum Gönder