Sahipsiz Güzeller

2000 yılından sonra teknolojinin, programlama dillerinin ve kütüphanelerin ilerlemesi baş döndürücü. Programlamaya 90’lı yılların sonunda başlayan birisi olarak teknolojinin bu denli gelişmesi ve yeni uygulama geliştirme ortamlarının bu kadar ilerlemesi beni hala şaşırtır. Henüz piyasada bu kadar çeşitliliğin olmadığı zamanlarda yani uzun zaman önce yazılmış, bu kadar olgunlaşmış kütüphaneler yokken yazılıp muhteşem olan ve hala takır takır çalışan uygulamalar için modernizasyon projelerine artık sıklıkla rastlar olduk. Batılı medeniyetlerde yaygın olarak kullanılan “çalışıyorsa dokunma!” anlayışına rağmen özellikle zaman içinde üreticilerin geriye dönük desteğinin kesilmesi veya kısıtlanması, teknolojiler için ciddi problemlere sebep olabiliyor. Bütün teknolojiler Java ortamı kadar geriye uyumlu (backward compatible) olamıyor. Hem zor, hem de yoğun bir emek/sermaye gereksinimi istiyor. Gelin bu tarz uygulamaların bakımlarını bizim için daha da zorlaştıran sebeplere beraber göz atalım.

Sahipsizlik

Uygulamaların sahiplikleri genellikle kurumlara ait oluyor. Kurumları da insanlar ayakta tuttuğuna göre aslında uygulamalara destek veren belirli kişilerin bulunması gerekiyor. Kurumların personelleri de gerek bilişim sektöründeki insan kaynağı hareketliliği, gerekse uygulamaların çeşitli yöntemlerle başka bir firmadan alınması sonucu zaman içinde kurumlardan uzaklaşmaları sebebiyle artık orada olmuyorlar. Uygulamanın kodlarına ve çalışma prensiplerine hakim insan sayısı zaman geçtikçe azalıyor. Hatta bir seferinde programlama dilini geliştiren ekipteki bazı insanların emeklilik/vefat gibi yaşa dayalı sebeplerden dolayı artık ortalarda olmadığına şahit olmuştum. Başlarda herkesin kullanmak ve öğrenmek istediği bu uygulamalar zamanla destek eksikliği nedeniyle herkesin uzak durmak isteyeceği uygulamalar haline geliyor. Birden bire sahipsiz kalıyor. Süre gelen durum sonunda eski uygulama yalnızca birkaç kişinin sadece ayakta tutmak için gerekli aksiyonları bildiği bir “cıs” haline geliyor.

Bu görselin Alt özniteliği boş. Dosya adı: abandoned-building-1024x683.jpg

Bizzat yaşadığım bir olaydan örnek vereyim; geçmişte çalıştığım uluslararası büyüklükteki bir  firmada tek işlevi donanım ve işletim sistemi bilgisi toplayarak kullanıcı güvenliğine yardımcı olmak olan bir uygulama üzerinde minicik bir değişiklik yapma ihtiyacı oldu. Geliştirme ortamını kurmak bir dert, test etmek bir dert nihayetinde deploy etmesi (test, pre-prod ve prod ortamlarına ) ise apayrı bir macera olmuştu benim için. Ortada döküman yok, yazılım dilini bilen kalmamış, kurulum aşamalarını bilen yok, başka departmana geçmiş eskiden beri kurum içinde çalışan birilerinden, hatırladıkları kadarıyla edinebildiğimiz bilgi ile o minnacık değişikliği yapmak büyük efor gerektirmişti. Sonrasında bu sistemle ilgili minnacık da olsa yeni talep kabul etmeme kararı aldığımızı hatırlıyorum çünkü attığımız taş, ürküttüğümüz kuşa değmemişti.

Sahipsiz kalınması tek sorunumuz mu? Aslında sahipsizliği oluşturan diğer alt sebepler bulunuyor. Buyurun bir sonraki sebebimize geçelim.

Bağımlılık

Eski uygulamalar, geliştirildikleri dönemdeki ekosistemde var olan sistemler ile entegre olarak o dönemki işletim sistemi ve donanımlara göre geliştirildiğinden bir noktadan sonra ekosistemin değişmesi sonucu yeni sisteme uyumsuzluk problemleri baş göstermeye başlıyor. Hala Windows 2000 üzerinde çalışan ancak Windows’un daha güncel versiyonlarında çalışmayan uygulamalar, bağımlılık sorununun en güzel örneklerinden sayılabilir. Ayrıca bizim de rastladığımız benzer durumlar oluşuyor. Pek de seyrek bir durum değil. Kuruluşlar bu eski ekosistemleri de idame ettirecek personel taşımak zorunda olmanın yanı sıra bu tarz büyük güvenlik zaafiyeti ile de yaşamak zorunda kalıyor. Güvenlik her zaman öncelik olduğu için, alt yapı hizmetlerine her zaman bir bütçe ayrılıyor. Ne yazık ki bu uygulamaların yenilenmesi için uzunca bir süre geçmesi gerekiyor.

Yine eskilere dönecek olursak, bir projemizde ancak windowsun eski bir versiyonuna kadar desteklenebildiğinden bu versiyona hapsolmuş bir sistem aklıma geliyor. Kuruluş içindeki bütün sistemler, en güncel işletim sistemleri üzerinde, aylık güvenlik yamaları ile yaşarken bu sistem artık geriye dönük desteğin bile kalmadığı bir işletim sistemi üzerinde, deyim yerindeyse Allah’a emanet olarak yaşamını sürdürüyordu. Uygulamanın en küçük parçasının kodunu okurken bile uygulamanın IDE’si asılı kalıyor, IDE’yi birkaç kez kapatıp açmanın problemi gidermediği durumlarda ise sunucuyu fiziksel olarak kapatıp açmamız gerekiyordu. Uygulama IDE’si ve kodlarını yeni versiyon işletim sistemleri ve sanal makineler üzerinde çalıştırmaya çalışsak da iyi bir sonuç alamamıştık. Tek dileğimizin uygulamanın yeniden yazılarak en azından bu eziyetten kurtulmak olduğunu anımsıyorum. 

Bugün kıdemli yazılımcı arkadaşlarımızın hemen hepsi bu veya buna benzer sorunlarla günlük olarak karşılaşıyor. Sosyal medya üzerinden kıdemli yazılımcının bir tanımını okumuştum, “Kıdemli yazılımcılar kimsenin çalışmak istemediği sistemlerde çalışmayı pek de önemsemeyenlerdir” diyordu. Kendi uğraştığım ve aşağıda belirttiğim destek kapsamında hizmet verdiğim projeler aklıma geldi. Çok beğendiğim bir tanım oldu.

Bakım ve Destek

Zamanla gelişen iş gereksinimlerinin, bu eski sistemlere yansıtılması da ayrı bir külfet olarak karşımıza çıkıyor. Yukarıda bahsettiğimiz sahipsizliğin de etkisiyle bu sistemler üzerine yeni bir bileşen ekleme, mevcut bileşenlerin değişen iş gereksinimlerine göre güncellenmesi ve artık kullanılmayan bileşenlerin kaldırılması gibi standart bakım ve destek işlemlerinin idamesi neredeyse imkansız hale geliyor. Yazılımcı gözüyle bakıldığı zaman bir daha hayatı boyunca kullanmayacağını bildiği bir teknolojiyi, ekosistemi öğrenme çekimserliği ve sahiplenme duygularında aksaklık meydana geliyor. Her şeye rağmen suya dalıp anlamaya ve öğrenmeye başlandığında ise, temel prensiplerin aynı, sadece kullanılan aletlerin farklı olduğunu görmeye başlıyoruz. Aslında temellerin o kadar da çok değişmediğini düşünüyoruz. Bunu tecrübe kazanmanın süreci olarak da isimlendirebiliriz. Zaman zaman katıldığım mülakatlarda adayların nispeten eski diyebileceğimiz teknolojilere bile burun kıvırdığını, daha eski teknolojilerin ise adını duymanın bile mülakatı olumsuz etkilediğini gözlemliyorum. Kariyer yolculuğu ile ilgili tavsiyem sorulduğunda ise çoğu zaman kendimi genç mezun mühendislere güncel teknolojilere odaklanmalarını nispeten eski kalan teknolojilere ise daha az zaman ayırmalarını söylerken buluyorum.  

Peki ne yapmak lazım?

Bütün bu olumsuzluklar ve deneyimler göz önüne alındığında; her ne kadar tıkır tıkır çalışıyor olsalar da bu tarz uygulamaların iyi planlanmış modernizasyon projeleri ile yeniden sahiplendirilmeleri gerekiyor. Sahiplendirilirken de güncel kalmalarını sağlayacak ekip ve dokümantasyonunun hazırlanması, bu hazırlığın ise en az uygulamanın geliştirilmesi kadar önem atfedilerek gerçekleştirilmesi büyük önem taşıyor.

Amerikan bankalarının bazıları sistemlerini 30 yıldan fazla bir süredir geliştiriyor. Cobol kullanarak geliştirdikleri sistemlerini güncel tutabilmek için geliştirici bulamadıkları için kendi eğitim programlarını oluşturup yüksek maaşlar karşılığı yeni mezunları Cobol geliştiricisi olarak motive etmeye çalışıyor. Bu yaklaşım da etkin bir yöntem olabilir. Ülkemizde de Cobol veya Assebmly kullanarak uygulama geliştiren firmalar var, fakat kaynak sıkıntısı yaşadıkları aşikar.

Modernizasyon projeleri kısa vadede parasal karşılığı olmayan bir efor gibi görünse de, uzun vadeli bakıldığında bütün paydaşlar için en zahmetsiz ve huzurlu yolun bu olacağı kanaatindeyim. ID3 olarak çeşitli ortamlarda ve programlama dillerinde de modernizasyon projelerinde görev alıyor ve iş ortaklarımızın üstündeki yükü sırtlamalarına yardımcı oluyoruz.

Comments (1)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir