Category: Uncategorized

  • 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

  • Araç gereç

    Araç gereç

    A fool with a tool is still a fool

    (Araç gereci olan bir ahmak; hala bir ahmaktır.)

    — Grady Booch

    Çeviklik, yalınlık, mikro servisler, bulut bilişim, makine öğrenmesi, büyük dil modelleri, OOP, TDD, DDD ve daha niceleri. Bizi kurtaracak bütün sorunlarımızı çözeceklerdi ama öyle olmadı. Elimizdeki araç gereç sayısı arttı ama bir arpa boyu yol alamadık. Bu sözün daha da sevdiğim bir versiyonunda [1] dendiği gibi bırakın yol almayı daha da batağa düştük.

    A fool with a tool is an amplified fool

    (Araç gereci olan bir ahmak; katmerlenmiş bir ahmaktır.)

    — Karl Wiegers

    Uzman olmak; doğru aleti doğru yerde doğru şekilde kullanmak demek. Siz siz olun kullandığınız araçların ne amaçla üretildiğini, hangi problemi çözdüğünü ve nasıl etkili bir şekilde kullanılabileceğini iyi öğrenin.

  • İ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.