Az Değer Verilen Şeyler
Herkes popüler olanın peşinde. Etrafta kelimeler uçuşuyor, kavramlar savruluyor.
Her dönemin kendine özgü moda kelimeleri, mutlak kabulleri var. Konuşmanın içine serpiştirilmezse bir eksiklik hissediliyor olsa gerek ki, yerli yersiz pat diye yüzünüze çarpıveriyorlar.
Mikro servis mesela, favorilerimden. Ne zaman yeni bir adayla görüşmeye girsek, tek mutlak doğru olarak, monolitik bir bakış açısıyla, bir şekilde lafı geçmeden olmuyor. Bir disiplin olarak yazılım mühendisliğinin temelde, ihtiyaçlar çerçevesinde, içinde bulunulan koşullarda, artıları ve eksileri göz önünde bulundurularak, akla gelen uygulanabilir en optimum çözümle ilerlemeye çalışmak olduğunun idrakinden uzak.
Başka moda kelimeler de var kuşkusuz, bazıları modasını kısmen kaybetmeye başlayıp ayakları zemine basmaya başlasa da… “Big Data”, “Streaming”, “NoSQL”, “Blockchain”, “AI”, “Devops” bunlardan bazıları.
Bir dönemin moda bir kelimesiyse elektrikti. Bugün artık hayatın olağan, sıradan bir parçası. Artık hiç kimse elektrikten büyülü bir şeymişçesine söz etmiyor.
Moda olmaları, önemli olmalarından ileri geliyor elbet. Önemli mevzular. Önemli teknolojiler. Önemli yaklaşımlar.
Bir ürün geliştiriyorsanız, ürünün yol haritasında dikkate almanız, gelecek perspektifi çerçevesinde ürünün bünyesine katmanız gereken şeyler. Teknolojik değişimleri, paradigma değişimlerini yakından takip etmeniz önemli, bulunduğunuz pazarda tercih edilir kalabilmek istiyorsanız.
Doğal olarak da ürünümüze yeni özellikler eklemeyi önemsiyoruz. Yeni teknolojileri bünyemize katmayı önemsiyoruz. Ürünü modernize etmeyi ve sürekli bir dönüşümün içinde olmayı önemsiyoruz.
Fakat bu hengamenin içinde hak ettiği değeri görmeyen şeyler de oluyor. Bazen ürünün fonksiyonel özelliklerine aşırı odaklanıyoruz, fonksiyonel olmayan özellikleri ise es geçiyoruz, hak ettiği önemi vermiyoruz. Verimsiz süreçleri iyileştirmeyi az önemsiyoruz, dokümantasyonu az önemsiyoruz.
Mesela hata yönetimini ve uygulama loglama altyapısını iyileştirmek yeterince önemli bir şey gibi görünmeyebiliyor. Hata tespiti peşinde onlarca saat harcamak zorunda kalabiliyoruz.
Mesela geleneksel kurulumlardan bulut uyumlu konteynır sistemlerine geçmemişsek, kurulumlar günlerce sürebiliyor. Geçiş sonrasında ise günler mertebesindeki kurulum ve güncelleme süreleri, dakikalar mertebesine inebiliyor.
Mesela otomasyon testleri, başlangıçtaki bir yatırım karşılığında yeni eklenen özelliklerin uç senaryolarda düzgün çalıştığından emin olmamızı sağlıyor. Değişiklik yapma cesareti veriyor. Değişiklik sonrası bir şeyleri bozmadığımızdan emin olabiliyoruz. Ürüne entegre ettiğimiz dış servis çağrılarında oluşabilecek farklı hata ve başarı senaryolarına test yazıp uygulamanın düzgün çalıştığından emin olabiliyoruz. Gözden kaçan şeyleri minimize etme imkanımız oluyor. Uç senaryoları düşünme farkındalığımız artıyor. Kaliteli iş yapma imkanımız oluyor. Geliştirme süreci basitleşiyor. Eğer otomasyon testlerimiz yoksa, kalite düşüyor, maliyetler artıyor, değişiklik cesareti azalıyor, verimlilik azalıyor.
Mesela yetersiz dokümanlar sebebiyle, müşterinin sorduğu bir sorunun cevabını saatlerce arayabiliyoruz. Sürüm notlarımız yetersizse ve sistematik değilse hangi özellik hangi versiyonda geldi, konfigürasyonu nasıl yapılıyor belli olmayabiliyor, ortalık karışabiliyor, bir şeyler unutulabiliyor, fark edinceye kadar saatler harcayabiliyoruz.
Dokümanlarımız ve eğitimlerimiz eksikse, yeni gelen birinin oryantasyon süreci yavaş olabiliyor. Bilgiler tekelleşebiliyor, sadece kişilere bağımlı kalabiliyoruz. Ekibimiz ölçeklenebilir olmuyor.
Bütün bunları dikey kesen bir konu da yazılım geliştirme süreçleri. Süreçleri iyileştirmezsek, sistematik işleyen bir mühendislik kültürü inşa etmezsek, eksikleri gözlemleyip iyileştirmeler yapmazsak verimsizlik, karmaşa, hatalar, gereksiz harcanan saatler ve sürtüşmeler kaçınılmaz oluyor.
Mesela bir değişiklik talebi için, iş analizini tamamlayıp müşteriden onay almadan geliştiriciye verirsek mükerrer geliştirme eforlarının önüne geçmek mümkün olmayabiliyor.
Mesela işi yaparken paralelinde dokümanını eklemezsek bir daha oraya dönme fırsatı bulamayabiliyorsunuz yoğun çalışma temposunda. Sıcak bilgi kayboluyor. Dokümanlarımız eksik kalıyor. Sonrasında samanlıkta iğne arıyoruz, koddaki veya dosya sisteminde bir yerlerde kalan bilgiyi tekrar beyne yüklemek için saatlerimiz gidiyor.
Mesela koddaki statik kod kalitesi ve güvenlik taramalarını kendi iç süreçlerimizde yapmıyorsak, müşteri tarama yapıp bize dönebiliyor, süreçler uzayabiliyor.
Standartları ve süreçleri oturttuktan sonra, gözlemlemeye devam etmezsek, farkında olmadan standartlardan sapmalar olabiliyor, standart sistematik işleyişten kopmamak için radarları açık tutup herkesin aynı sayfada olduğundan emin olmamız gerekiyor.
Sözün kısası, yazılım sistemlerini bütüncül bir bakış açısıyla ele almak gerekiyor. Az değer verdiğimiz fonksiyonel olmayan özelliklere, standartlara ve süreçlere gereken önemi vermemiz gerekiyor. Çünkü kalite ve verimlilik buralarda yatıyor.