İstek mi İhtiyaç mı Yoksa Problem mi? – I
Bir yazılım projesi için en riskli durumlardan birisi de, o projeye girdi sağlayacak kullanıcıların, “işte istediğimiz an geldi, ne istiyorsak yaptıralım” şeklinde bir fikre sahip olmalarıdır. Dünyada hiç bir kimse, istediği her şeyi elde edemiyor, öbür dünyada bu söz konusu olabilir ama bu dünyada daha gerçekçi olmalıyız. Hayallerimiz ile gerçeklik arasındaki bu durum her şeyde geçerli olduğu gibi yazılım için de geçerlidir.
Yazılım zor zenaat, bu çok açık. Bu günlükte bu konuda pek çok yazı yayınlandı. Yazılımla ilgili pek çok şey, onun “zor” olmasına sebep oluyor. Örneğin onun kavramsal olan yapısı, algoritmik yapılarının karmaşıklığı, vs. Bu yazıda yazılımın karmaşıklığının en temel sebeplerinden birisi olan kullanıcı isteklerinden bahsedeceğim.
Yazılım, onu kullanacak olanlar için geliştirilir. Kullanıcılar, yazılım ile işlerini sadece daha hızlı yapmakla kalmaz aynı zamanda daha etkin bir şekilde yaparlar. Bu anlamda yazılım sistemleri çoğu defa iş yapış şeklimizi değiştiriler ya da değiştirmeleri beklenir. Gerçi bu ülkede özellikle devlet kurumlarında eski ve köhne anlayışla uygulanmakta olan pek çok alışkanlığın yazılımlara da taşındığını, bundan dolayı da yazılımların bilgisayarları sadece hızlı ve geniş hafızalı birer daktiloya dönüştürdüğüne çok sık şahit oluyoruz.
Neyse, konumuza dönersek, şunu rahatlıkla iddia edebiliriz ki yazılımlar, kullanıcılarının istekleri için geliştirilmezler. (Tabi yazılımlar derken burada iş yazılımlarını kastediyoruz, oyun ve eğlence sektörüne yönelik yazılımları ayrı bir kategoride değerlendirmek lazım.) Yazılımların bu kadar karmaşık olmasının, bu kadar sık değişmesinin, nihayetinde yazılım şirketleri ile BT bölümlerinin aşırı iş yoğunluğu altında ezilmesinin en temel sebebi, kullanıcıların, işlerini doğru ve etkin bir şekilde yapabilmek için neye ihtiyaçları olduğunu bilmemeleridir. İşine sistematik olarak bakamayan, onun hakkında düşünmek için, yaptığı işi daha basit, kolay ve etkin olarak nasıl yapacağını kurgulamaya, örneğin müşteriye verilecek hizmetin kalitesini arttırmayı düşünmeye vakit ayır(a)mayan kullanıcıların, proje başladığında, o projeye ihtiyaçlarıyla ilgili sağlıklı girdiler üretebilmesi de imkansızdır. Çoğu zaman yeni bir proje, kullanıcıların normal operasyonel iş yüklerinden bir şey eksiltmeden onlara fazladan yük getirdiğinden kullanıcılar tarafından angarya olarak bile görülebilmektedir. Dolayısıyla ne normal gündelik çalışmasında ne de proje esnasında, proje sorumluluklarının bir parçası olarak işini bir yazılım sistemiyle nasıl daha basit ve etkin hale getireceğine odaklanmayan kullanıcının, “ihtiyaçların nelerdir?” sorusuna verecekleri tek cevap, akıllarına ilk gelen ve çoğunlukla ihtiyaç bile olmayan isteklerdir. Bir de buna, “bu bizim için çok büyük bir fırsattır, ne istiyorsanız söyleyin” diye takıma moral ve motivasyon 🙂 aşılayan iş yöneticileri eklenirse varın bakın siz eğlenceye 🙂 Böyle projeler insanı bitirir ama kendileri bitmezler.
Yazılımların ve yazılım projelerinin en büyük risklerinden birisi kullanıcı ihtiyaçlarına değil de kullanıcı isteklerine odaklı olmasıdır. Dolayısıyla “kullanıcı istekleri” kavramı da yazılım ihtiyaçları açısından ele alındığında son derece sakıncalı bir kavramdır. Bu anlamda ben yazılım ihtiyaçları yerine “isterler” denmesine son derece karşıyım. Nedir isterler? Herkes her şeyi ister! Ama yazılımlar istekleri yerine getirmek için değil ihtiyaçları gidermek için geliştirilirler. İnsanların iş ihtiyaçlarına odaklanmadan isteklerine odaklanmaları, yani isteklerini ifade etmeden önce onların ne kadar ihtiyaçlarını gideren istekler olduklarını, ihtiyaçlarıyla ne kadar örtüştüğünü düşünmeleri gereklidir. Aksi taktirde isteklerini yerine getirmesine rağmen ihtiyaçlarını karşılamayan yazılımları kullanmak zorunda kalmaları kaçınılmazdır.
Bu duruma yazılımı geliştirenler açısından bakıldığında ise en iyi tarafından yazılımların bütçe ve zaman açısından planlananın dışına ciddi oranlarda sarkması sonucu ortaya çıkmaktadır. Daha kötüsü ise bitmeyen, iptal edilen projelerdir. Hayata geçse bile böyle projelerde geliştirilen şey, çoğu zaman incik-cıncık özelliklerle bezenmiş dolayısıyla da iç tutarlılığı (integrity) olmayan, nihayetinde kullanışsız, üzerine tonla emek harcanmış pek çok özelliği kullanılmayan ama buna karşın en temel ihtiyaçlarla ilgili hala eksikleri olan yazılımlardır.
Bu blogda sıklıkla kendisinden alıntı yaptığım F. Brooks “No Silver Bullet” isimli makalesinde yazılımın doğasından bahsederken “uyumluluk” (confirmity) bahsinde bakın ne diyor:
“Uyumluluk: Karmaşıklıkla karşılaşma noktasında yazılımcılar yalnız değillerdir. Fizikçiler “temel” parçaçık seviyesindeki son derece karmaşık nesnelerle uğraşırlar. Fakat bir fizikçi, kuarklarda olsun, birleşik alan teorilerinde olsun hepsi için genel geçer prensiplerin bulunacagına dair sağlam bir inançla çalışır. Einstein, doğanın basitleştirilmiş açıklamalarının olması gerektiğini çünkü Tanrı’nın kaprisli ya da rastgele davranmayacağını ileri sürmüştü.
Böyle bir inanç, bir yazılım mühendisini kesinlikle rahatlatmaz. Çünkü üstesinden gelmek zorunda olduğu karmaşıklığın büyük çoğunluğu rastgele karmaşıklıktır ki pek çok insani kurum ya da sistem tarafından mantıksızca oluşturulmuştur ve yazılım mühendisinin arayüzleri bu yapılarla uyum içinde çalışmalıdır. Yazılım mühendisinin geliştirdiği bu arayüzler, arayüzden arayüze, zamandan zamana değişir ama bu durumun sebebi ihtiyaçlar değildir, sadece Tanrı yerine farklı kişiler tarafından tasarlanmış olmalarıdır.
Pek çok durumda yazılım uyumlu olmalıdır çünkü sahneye en son gelen odur. Diğer pek çok durumda da, yazılımın uyum yeteneğinin yüksek olduğu düşünüldüğü için uyumlu olmak zorundadır. Fakat bütün bu durumlarda karmaşıklığın büyük çoğunluğu, diğer arayüzlere uyumdan kaynaklanmaktadır ki böyle bir karmaşıklık sadece yazılımın tekrardan tasarlanmasıyla basitleştirilemez.”
Bu yüzden iş yöneticileri hem kendilerine hem de birlikte çalıştıkları kullanıcılara, istekleri üzerinden değil de ihtiyaçları üzerinden hareket etmeleri için zaman ve fırsat tanımalılar, kendilerinin ve çalışanlarının farkındalıklarının bu yönde gelişmesine yardımcı olmalılardır. Aksi taktirde yazılımcılara boşuna saydırmaya devam ederiz.
Toplam görüntülenme sayısı: 1340
hakan
03 Mart 2014 @ 10:51
Bir yazılımcı olarak yıllar yılı kendi yaptıkları işte neye ihtiyaçları olduğunu bilmeyen insanlar yüzünden çok angaryadan çalışmak zorunda kaldım 🙂 iş analistleri ile çok tartıştım. İş analisti gelip de kullanıcı şunu da istiyor dediğinde ona, “sen ona sor uzay mekiği de yapalım mı diye mümkünse yapın diyecektir” diye derdimi çok anlatmaya çalıştım. Ancak yine de yeni bir projeye girersem aynı süreçleri yaşamaya devam edeceğimi düşünüyorum..
En kötüsü de sanki biz yazılım yapmayı bilmiyor muşuz gibi işin sonunda sistemde aksaklıklar çıkınca iş tarafı, “yazılımcılar bu işi beceremedi” deyip işin içinden çıkıyorlar, Bir de IT yöneticileri durumu iyi anlatamıyorsa o zaman en kötüsü yaşanır, tek suçlu olabilirsiniz..Çünkü zaten durumu (projedeki başarıyı/başarısızlığı) değerlendiren üst düzey yöneticilerin de yazılım projeleri geliştirmekten haberleri yok! Tüm bunları düşününce yazınızdaki tespitlerin çok isabetli olduğunu düşünüyorum.. Ve diyorum ki maalesef “Gümüş kurşun yok” 🙁
Akin
03 Mart 2014 @ 11:31
Evet Hakan bey dedikleriniz dogru. Malesef sizin soylediklerinizi ben de defalarca yasadigim icin ve hala da sik sik gordugumden, olabildigince uygun ve akademik bir dille anlatmaya calistim. Bu konuda yazmaya devam, siz de yazin bence, ya da benimle payalsin tecrubelerinizi ve toplumumuza duyuralim. Ne dersiniz?
hakan
03 Mart 2014 @ 13:41
Evet Akın bey bunları yazmayı ben de zaman zaman düşündüm. Ancak başka sebepler de olmakla birlikte ben bu konularda yazabilecek kadar kendimi yetkin göremiyorum. Sizi okuduğum zamanlarda da bu konuda haklı olduğuma kanaat getiriyorum. O sebeple siz yazdıkça ancak bu şekilde yorumlarla görüşlerimi belirtebiliyorum.
Akin
03 Mart 2014 @ 14:34
Eyvallah, boyle devam edelim o zaman. Ben yazayim siz yorumlarinizla katkida bulunun, hem destek hem de elestiri olarak.