Tag: çevik

  • Teknik pratikler

    Teknik pratikler

    Teknik borç, teknik kirlilik adına ne derseniz deyin biliyoruz ki biriktikçe işimizi zorlaştıracaklar. Bunu hepimiz yaşadık; yeni bir projede başlarda her şey çok kolay ve çok hızlı ilerledi ama öyle bir an geldi ki değişikliğin adını bile duymak istemez olduk ve sistemlerimizin yeniden yazılması gerektiğini telaffuz etmeye başladık.

    Bir geliştirme yapmak zamanla daha zor olacaksa; değişikliği bağrımıza bastığımız, çevik yöntemler ne kadar makul? Her detayı etraflıca düşünmek, bin düşünüp bir söylemek daha mantıklı değil mi? Çevik öncesi dönemde tam da bunu yapmaya çalışıyorduk; isterleri detaylıca inceliyor, sayfalarca dökümanlar üretiyor, detaylı sistem tasarımları yapıyor, geliştirmeye ancak o zaman başlıyorduk. O dönemlerin sorunlarını burada listelemeye gerek yok sanırım.

    Çevik yöntemler ancak değişikliklerin maliyeti artmayıp sabit kaldığında ya da zamanla azaldığında sürdürülebilir olacaklar. Bu da sistemlerimizin iç kalitesini yüksek tutmakla; teknik pratikleri yerinde ve zamanında uygulamakla mümkün.

    Bu teknik pratiklerin bazılarını farklı kaynaklardan derlemeye çalıştım:

    • Yalın ve kademeli tasarım (Simple and evolutionary design)
    • Düşük bağımlılığa sahip bir mimari (Loosely coupled architecture)
    • Kod iyileştirme çalışmaları (Refactoring)
    • Kod standartları
    • Yalın ve temiz kod (Clean code)
    • Eşli programlama (Pair programming)
    • Test yönlendirmeli geliştirme (TDD)
    • Sürekli entegrasyon (CI)
    • Güvenlik gibi kaygıları öne almak (Shift left)
    • Sürüm kontrol sistemleri (Version control)
    • DevOps pratikleri
    • Doğru ve yeterli test otomasyonu

    Teknik pratiklerin yeterli olgunlukta olmadığı bir ortamda çeviklik ancak sözde kalacaktır. Çevik yöntemlerin başarılı olabilmesi için süreçler kadar teknik pratiklere de önem vermeli; bunları öğrenmek, uygulamak ve içselleştirmek için gerekli koşulları oluşturmaya özen göstermeliyiz.

    Kaynaklar

  • İskelet sistem

    İskelet sistem

    Yeni bir proje üzerinde çalışıyorsunuz; fonksiyonel olan, olmayan isterleri ve kısıtları incelediniz, sonunda nasıl bir mimari kullanmak istediğinize karar verdiniz. Sistemin ana bileşenlerini ve etkileşimlerini belirlediniz. Sıra geldi geliştirmenin başlamasına.

    İlk odağımız, sistemin ana bileşenlerinin birbirleri ile etkileştiği uçtan uca işleyen bir iskeleti ortaya koymak olmalı. Alistair Cockburn buna walking skeleton [1] diyor. Yapmak istediğimiz şey bileşenleri ve etkileşimlerini net bir şekilde ortaya koymak ama olabilecek en asgari geliştirmeyi yapmak. Bileşenlerin tam olması değil bir arada ve etkileşimde olması önemli. Bunlara ek olarak; teslimat hatlarını, hedef ortamları, hata işleme ve log altyapılarını da imkan ölçüsünde ayağa kaldırabiliriz.

    İskeleti, geçici bir çözüm olarak değil canlı sistemlerimize gösterdiğimiz özen ile geliştirdiğimiz, sistemin geri kalanını üzerine inşa edeceğimiz bir yapı olarak düşünmeliyiz. Sistemi bu iskeletin üzerine her sprint ilmek ilmek inşa edeceğiz. Sonuçta ulaştığımız sistem bambaşka bir hal alabilir; bu doğal ve beklenen bir durum.

    Bileşenleri parça parça tamamlayıp sonrasında entegre ettiğimiz günler çok geride kaldı. Yeni bir sistemi geliştirmenin ilk adımı olarak; ana bileşenler ve bunların etkileşimleri ile işleyen bir iskelet kurmak; ilerlemeleri uçtan uca gösterebilirken aynı zamanda da sistemi peyderpey geliştirme imkanı sağlayan güçlü bir yöntem.

  • Tamamen duygusal

    Tamamen duygusal

    Değişmeyen tek şeyin değişimin kendisi olduğu bir sektörde çalışıyoruz. İsterler ve kısıtlar değişiyor, kullandığımız kütüphaneler, diller, platformlar değişiyor. Bu ortamda ürettiğimiz yazılımların eskimemesi mümkün değil. Zamanla tıkır tıkır işleyen makinelerimiz paslanıyor, pırıl pırıl ortamımız tozlanıyor, etrafta bıraktığımız çöpler birikiyor.

    Müdahale etmediğimiz her an işimiz daha da zorlaşıyor. Öngöremediğimiz hatalar çıkıyor. Hareket alanımız kısıtlanıyor. Yeni geliştirmeler yaparken, çıkan hataları düzeltirken zorlanıyor, vakit kaybediyoruz.

    Vakit nakittir demiş atalarımız – kaliteye de tamamen duygusal sebeplerle ihtiyacımız var. Bugün yaptığımız irili ufaklı yatırımlar gelecekteki işlerimizi kolaylaştıracak, maliyetlerimizi düşürecek.

    Teknik borçlanmayı ve kirlenmeyi tamamen önlemek mümkün değil gibi; yapabileceğimiz şey onu kontrol altında tutmak. Bunun yolu takımlarımızın yetkinliklerini geliştirmek, onlara yeterli alan açmaktan geçiyor. Ancak bu şekilde daha az borç kullanan ve düzenli temizlik disiplinine sahip bir ekip oluşturabiliriz. Bu da nihayetinde işleri kolaylaştırıp hızlandıracak.


    Bu yazı Martin Fowler’ın benzer bir yazısından ilham ile yazılmıştır