İyi bir yazılım ortaya koymak için en önemli unsurlardan biri,iyi bir ekiptir.
İyi bir proje yöneticisi…
İyi bir analist…
İyi bir yazılım uzmanı…
İyi bir test uzmanı…
İyi bir yazılım mimarı…
İyi bir kullanıcı deneyim profesyoneli (user experience professional)…
Peki iş birimi? Müşteri? Kullanıcı?
Yazılım projesi tamamlanıp proje devreye alındığında yazılımın sahibi kimse,yazılım geliştirilmeye başladığında da yazılımın sahibidir.Bu nedenle en baştan itibaren son kullanıcı, müşteri, alan uzmanı, sponsor gibi işin direkt mutfağında görmeme eğiliminde olduğumuz paydaşları da ekibe mutlaka dahil etmemiz gerek.Fakat bu da yeterli değil.Yazılımın geliştirilmesinden sonra devreye alınması ve canlı ortamda performansını yönetecek olan altyapı ekibi, veritabanı yöneticisi, destek ekibi gibi unsurların da ekip de yer alması yazılımın daha iyi olmasına katkı sağlayacaktır.
Peki, tüm bu insanların ekipte bulunması yeterli mi?
Tabii ki hayır.Ortaya iyi bir yazılım koyabilmek için bütün bu paydaşların ortak bir amaca yönelik,iyi bir ekip halinde çalışması ve yazılımın amacına hizmet edecek şekilde değer üretmeye odaklı olmaları gerekir.
İyi yazılım, iyi ekip işidir.
İyi yazılım ne değildir?
İyi yazılımı doğru anlayabilmek için ne olduğu kadar ne olmadığına da bakmak gerekiyor.
Bir şeyin iyisini tarif etmek için neyin iyi olduğunu söylemek aslolan şeydir.Fakat bazen o konuda neyin iyi olduğunu tam olarak tarif edemeseniz bile, kafanızda neyin iyi olmadığıyla ilgili bir düşünceniz oluşabilir.O zaman tarifi ortaya koyarken neyin “iyi” olduğunu ortaya koymanın bir yolu olarak neyin “kötü” olduğunun da tanımlanması yarar sağlayabilir.Özellikle uzman olmadığınız bir alandan bahsediyorsak o zaman bu yöntem daha kolaydır.
Örneğin bir yazılım projesinde kullanıcılarınızın ya da müşterinizin size nasıl bir ara yüzün iyi olacağını söylemesini beklememelisiniz.Bu sizin uzmanlık alanınız.Onlar ancak şimdiye kadar kullandıkları yazılımlardan yaşadıkları deneyimleri sizinle paylaşırlar. Ve özellikle de “kötü” olanları istemediklerini belirterek size iletirler.
İyi yazılımı tarif ederken bir taraftan kötü yazılımı da tarif etmenin işimizi kolaylaştıracağını düşünmekteyiz.Bir taraftan direkt iyiyi tarif etmek zaten hedefimizken bir taraftan da ortaya net olarak koyamadığımız birtakım unsurlar için nelerin olmaması gerektiğini tespit ederek buradan iyisini bulmaya çalışmak sağlıklı olacaktır.
Örneğin “iyi yazılım kullanıcı dostu olmalıdır” ifadesini ele alalım.Çok beylik bir sözdür.Herkes söyleyebilir. Ancak “gerçekten ne anlama geldiğini detaylandıralım” desek, kaçımız bunu yapabilir? Ama “sizce kullanıcı dostu bir yazılımda neler olmalı, neler olmamalı?” desek, eminim ki ortaya daha fazla şey koyabilirsiniz.
Gelin iyi yazılımı bulmak için iyi yazılımın ne olmadığını tartışalım. Biz birkaç maddeyle açılışı yapalım;
- Kullanıcı bir işlem için butona bastığında, işlem yapılıyor mu yoksa ekran mı kilitlendi anlayamadığımız yazılım iyi bir yazılım değildir
- İşinizle ilgili bir operasyonu gerçekleştirmek için bir düzineye yakın ekran açmanız gereken yazılım iyi yazılım değildir
- Basit bir hatayı düzeltmek için saatlerce kodunu anlamaya çalışmak zorunda kaldığınız yazılım iyi yazılım değildir
İyi Yazılım
Gelin daha iyi yazılımlar üretmek daha iyi yazılımlar kullanmak için iyi yazılımı tartışalım.
“İyi Yazılım” başlığını literatürde araştırdığınızda karşınıza “Yazılım Kalitesi”, “Yazılım Kalite Modelleri”, “Yazılım Kalite Nitelikleri” gibi kavramlar çıkar. Deming, Feigenbaum, Juran, Ishikawa, Swethart kaliteyle ilgili genel tanımlamalar yaparken McCall, Boehm ise yazılım kalitesi üzerinde çalışma yapan en bilinen isimler olarak karşımıza çıkıyorlar.Sonuçta herkesin söylemeye çalıştığı şeyin özeti şudur:
- Yazılım, kendinden beklenen temel işlevsel gereksinimleri yerine getirmelidir
- Yukarıdakine ek olarak her yazılımın sahip olması gereken (performans, kullanışlılık, taşınabilirlik, vb.) bir takım nitelikler vardır.
Birincisi analiz disiplininde işlevsel gereksinimler (functional requirements) olarak tanımlanırken ikincisi ise işlevsel olmayan gereksinimler (non-functional requirements) olarak ortaya konulmaktadır.
İş iyi yazılımı tanımlamak için yazılım kalitesine ya da diğer adıyla işlevsel olmayan gereksinimlere geldiğinde farklı paydaş gruplarının açısından farklı perspektifler devreye girer.Örneğin bir yazılım uzmanı açısından yazılıma yeni bir modül eklemenin kolaylığı ya da hatalı bir kodu düzeltebilmek için kodun okunabilirliği önemliyken,son kullanıcı açısından uygulamanın kolay kullanılabilirliği ya da hata yapmaya izin vermemesi gibi nitelikleri daha ön plana çıkar.Aynı yazılım kalitesi, o yazılımı canlı ortamda kesintisiz bir biçimde çalıştırmakla sorumlu olan operasyon ekibi için farklı, destek ekibi için farklıdır.
İyi yazılımı tanımlarken üzerinde durulması gereken başka bir boyut da ürün olarak yazılım kalitesini incelemenin ötesinde, o kaliteyi ortaya koyacak olan sürecin de tartışılması gerektiğidir. Ardından takımı konuşmak gerekir.Ve daha birçok şeyi…
Literatür böyle diyedursun, bir de bakalım sektörün içinden yazılım projeleri deneyimleriyle sahadan insanlar neler diyorlar;
- İyi yazılım, kodu gördükten sonra “ne kadar basit düşünülmüş, ben de yazabilirdim” denilendir.
- İyi yazılım,geliştirme yapan tarafın da ürünü kullanan tarafında mutlu olmasıdır
- Geliştirme yapan tarafından bakılırsa, kişisel kahramanlıkların değil, takım olarak geliştirilen yazılımlar iyidir. Basit ve anlaşılır kod önem arz eder.
- Kullanıcı tarafından bakılırsa, istediği sonuca kolay ve basit ulaşımı iyi yazılımların en büyük özelliğidir.Yeni isteklere cevap verebiliyor olması kullanıcı açısından önemlidir.
- İyi bir yazılım, kodun doküman gibi okunabildiği bir yazılımdır.
- Standartları olmayan bir yazılım her ne kadar çalışır gözükse de sonunda silinmeye mahkumdur.
- İyi yazılım, müşterinin yaptığı işe değer katan yazılımdır.
- İçerisinde kötü pratikler ve öğeler barındırmayan yazılım iyi yazılımdır.Tabi ki müşterinin ihtiyacını karşılamayan ve kullanılamayan her müthiş fonksiyon kötüdür.
- Müşteriyi memnun eden her yazılım iyidir.Hangi platformda, hangi metotlarla, hangi dil ile geliştirilmiş olursa olsun.
- İyi yazılım, sürekli değişen ihtiyaçlara cevap verecek şekilde esnek olmalıdır.
- Kullanıcının bakış açısıyla hareket eden ve onun alışkanlıklarını ön planda tutacak şekilde tasarlanan yazılımdır.
- Bir işi sadece bir yerden yapabildiğiniz yazılım iyidir…
- İyi Analiz + İyi Geliştirme + İyi Test = İyi Yazılım
İyi yazılım;
- Nereden baktığınıza
- Yazılımın hangi aşamada olduğuna (fizibilite, geliştirilme, bakım)
- Kalite anlayışınıza
bağlıdır.