İ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ı: 1322