tohum
← Blog’a dön

Aşama 1: Paydaş ve Sistem Gereksinimleri

Önce işin temeli!

Önceki bölüm için tıklayın: Aşama 0

Pekâlâ, parlak IoT ürün fikrinizin tutulmaya değer olduğuna karar verdiniz. Sırada ne var? Hemen cihaz yapmaya ve firmware kodlamaya atlamak için sabırsızlanıyor olabilirsiniz, ama dizginleri çekin. Başarılı her projenin en birinci adımı gereksinimleri toplamaktır. Yeni bir devreye enerji vermek ya da şık kod yazmak kadar heyecan verici gelmeyebilir, ama bize güvenin – gereksinimler bundan sonraki her şeyin temelidir. Aşama 1’i, maceraya yelken açmadan önce hazine haritasını çizmek gibi düşünün. Bu adımı atlamak, haritasız bir sefere çıkmak gibidir – maceralı olur belki, ama sonu muhtemelen kötü biter. 😅

Aşama 1: Paydaş ve Sistem Gereksinimleri’nde tüm kilit oyunculardan girdi toplar ve neyi neden inşa ettiğimizin net bir tanımını ortaya koyarız. Ürünün tam olarak ne yapması gerektiğini, hangi koşulları karşılaması gerektiğini ve uyması gereken tüm kısıtları tanımlayacağız. Bu aşamaya zaman yatırarak kendinizi ileride sayısız baş ağrısından kurtarırsınız. Yolun devamındaki her tasarım kararı, her kod satırı ve koşacağımız her test, bu ilk gereksinimlere kadar izlenebilecek. Onlar, sonraki tüm çabalara yön veren projenizin Kutup Yıldızı’dır. Sağlam gereksinimler olmadan tasarıma dalarsanız, yanlış şeyi inşa etme ya da kritik bir şeyi kaçırma riskini alırsınız. Ve kabul edelim, kimse aylarca çalıştıktan sonra önemli bir özelliğin gözden kaçtığını ya da bir varsayımın yanlış olduğunu fark etmek istemez.

Bu bölümde, paydaş ve sistem gereksinimlerini yakalamanın ne anlama geldiğini adım adım açacağız. Bu aşamanın neden bu kadar önemli olduğunu, ne tür gereksinimleri düşünmeniz gerektiğini ve bunları nasıl net biçimde belgeleyeceğinizi anlatacağız. Gereksinimleri erkenden sağlama almanın IoT projenizi nasıl var edip yıkabileceğini gösteren bazı örnekler (ve ibret hikâyeleri) de paylaşacağız. Dalmaya hazır mısınız? Hadi gereksinimleri daha en baştan doğru yapalım!

Gereksinim Tam Olarak Nedir?

Peki “gereksinim” derken neyi kastediyoruz? En yalın haliyle gereksinimler, ürününüzün ne yapması gerektiğinin ve bunu hangi koşullar altında yapması gerektiğinin ayrıntılı bir tanımıdır. Projenizin kural kitabı ya da kontrol listesi gibidirler; IoT cihazınızdan beklenen her şeyi, siz onu daha inşa etmeden kayda geçirirler. IoT ürününüz bir hikâye olsaydı, gereksinimler onun olay örgüsü taslağı olurdu – tüm kilit unsurların tanımlı olmasını, hikâyenin sonunda anlamlı çıkmasını sağlarlar.

Gereksinimler, her biri ürününüzün farklı bir yönünü kapsayan birkaç çeşitte gelir. Ana kategoriler şunlardır:

Bu kategorilerin her birine birazdan ayrıntısıyla gireceğiz. Şimdilik şunu aklınızda tutun: iyi bir gereksinim net, spesifik ve test edilebilirdir. “Cihaz müthiş olmalı” demek yetmez – bu, mühendislik ekibinize hiçbir şey kazandırmaz. Bunun yerine “Cihaz, sıcaklığı 0°C ile 50°C arasında ±0,5°C doğrulukla ölçmelidir” gibi somut ifadeler gerekir. Ne kadar spesifik olduğuna dikkat ettiniz mi? Okuyan herkes tam olarak ne beklendiğini bilir ve ileride cihazın bu kriteri karşılayıp karşılamadığını gerçekten test edebilirsiniz. Gereksinim yazarken hedeflediğimiz netlik seviyesi işte bu.

Fonksiyonel Gereksinimler

Fonksiyonel gereksinimler, IoT ürününüzün belirli özelliklerini, işlevlerini ve davranışlarını tanımlar. Başka bir deyişle sistemin ne yapması gerektiğini açıkça yazarlar. Biri “Cihazınız ne yapıyor?” diye sorduğunda, cevap fonksiyonel gereksinimlerin bir özeti olacaktır. Bu gereksinimler tamamen cihazınızın kullanıcıya ya da diğer sistemlere sunduğu aksiyonlar ve hizmetlerle ilgilidir.

Bir IoT cihazı için fonksiyonel gereksinimler genellikle şunları içerir:

Bunu bir örnekle canlandıralım. Akıllı ev kullanımı için basit bir IoT sıcaklık sensörü yaptığınızı varsayalım. Bazı fonksiyonel gereksinimler şöyle olabilir:

Bunların her biri, sistemin yaptığı bir şeyi tanımlayan birer fonksiyonel gereksinim. İfade biçimlerine dikkat edin: genellikle “Cihaz … -malıdır” kalıbıyla başlayıp spesifik bir aksiyon ya da davranışla devam ederler. Bu format, ileride “Evet, cihaz gerçekten de belirtildiği gibi X’i yapıyor” doğrulamasını kolaylaştırır.

İyi fonksiyonel gereksinimler, yetenekler konusunda net bir resim çizer. Mühendislik ekibinin tam olarak hangi özellikleri gerçekleştireceğini bilmesini sağlarlar. Bunları sağlama aldıysanız, donanım ve yazılım tasarımcılarınız bunlara nasıl ulaşacaklarını düşünmeye başlayabilir (ama önce ne yapılacağı gelir; bu gereksinimleri şimdi tanımlamamızın sebebi de bu). Net fonksiyonel gereksinimler olmadan, kullanıcının gerçekten ihtiyaç duyduğu şeyi yapmayan bir ürünle kalabilirsiniz. Örneğin, gösterişli bir IoT hava istasyonu yaptığınızı ve kimse açıkça gereksinim olarak yazmadığı için nem sensörü koymadığınızı sonradan fark ettiğinizi hayal edin – tüh! Fonksiyonel gereksinimleri baştan tanımlamak, olmazsa olmaz tüm özellikleri en başından yakalayarak bu “tüh” anlarının önüne geçer.

Fonksiyonel Olmayan Gereksinimler

Fonksiyonel olmayan gereksinimler, IoT ürününüzün belirli özelliklerinden ziyade niteliklerini, koşullarını ve kısıtlarını belirtir. Ürünün ne kadar iyi performans gösterdiğini, ne kadar dayanıklı olduğunu ve uyması gereken sınırlamaları tanımlarlar. Başka bir deyişle, bir özellik tarif etmeseler bile ürünün genel performansı ve kalitesi için korkulukları ve çıtaları koyarlar. Fonksiyonel olmayan gereksinimler, göz alıcı özellikler kadar kritiktir – cihazınızın gerçek dünyada güvenli, güvenilir ve kullanışlı olmasını sağlarlar.

Bir IoT cihazı için yaygın fonksiyonel olmayan başlıklar şunlardır:

Uzun bir liste, ama fonksiyonel olmayan gereksinimleri ürününüzün taşıması gereken kalite nitelikleri olarak düşünün. Pazarlama broşüründe ilk gösterdiğiniz şey olmayabilirler, ama onları görmezden gelirseniz ürününüz daha az göze çarpan biçimlerde başarısız olabilir. Veriyi kusursuz raporlayan (fonksiyonel!) harika bir sensör hayal edin, ama pili bir günde bitiyor – kullanıcılar hüsrana uğrar. Belki cihazınız laboratuvarda harika çalışıyor, ama güvenlik baştan içine inşa edilmediği için ilk hacker’da devre dışı kalıyor. Bu örnekler, eksik fonksiyonel olmayan gereksinimlerin projenizi nasıl baltalayabileceğini gösteriyor.

Bu nitelikleri baştan tanımlayarak, nihai ürünün yalnızca özellik zengini değil, aynı zamanda sağlam, kullanıcı dostu ve yaşayabilir olmasını güvence altına alırsınız. Fonksiyonel olmayan gereksinimler birçok tasarım kararına yön verir: bileşen seçimlerini, (güvenilirlik ve güvenlik için) yazılım mimarisini, (dayanıklılık ve boyut için) mekanik tasarımı, hatta ürünü nasıl test edeceğinizi bile etkilerler. “Sahne arkasında” kalıyor olabilirler, ama paydaş beklentilerini karşılamak ve gerçek dünya kurulumlarında başarılı olmak için kesinlikle vazgeçilmezdirler.

Arayüz Gereksinimleri

Arayüz gereksinimleri, ürününüzün dış dünyayla — hem fiziksel hem mantıksal olarak — nasıl bağlanıp etkileşeceğini tanımlar. Arayüzleri, cihazınızla diğer her şey arasındaki temas noktaları olarak düşünün: diğer donanımlar, güç kaynakları, muhafazalar, kullanıcılar ve yazılım sistemleri. Bu kategori, IoT cihazınızın hedeflendiği ekosisteme uyum sağlamasını ve orada düzgün iletişim kurmasını güvence altına alır.

Arayüz gereksinimlerinin kapsadığı bazı başlıklar şunlar:

Arayüz gereksinimlerini sağlama alarak, projenizin tüm parçalarının birbirine nasıl geçeceğini netleştirirsiniz. Endüstriyel bir makineye takılması gereken bir sensör tasarladığınızı düşünün – mekanik bir arayüz gereksinimi, boyutu ve vida deliği düzenini belirterek sensörün o makineye gerçekten oturmasını sağlar. Ya da diyelim cihazınız pille çalışıyor – elektriksel bir arayüz gereksinimi, kullanıcının onu kolayca şarj edebilmesi için standart bir konektör koymanızı güvence altına alabilir. Bir arayüz gereksinimini atlamak, ileride tuhaf durumlara yol açabilir. (Doğru portu ya da adaptörü olmadığı için kimsenin bağlanamadığı gayet iyi bir cihaz gördünüz mü hiç? Sizin ürününüz o olmasın!)

Özetle, arayüz gereksinimleri IoT cihazınızın ortamıyla ve kullanıcılarıyla iyi geçinmesini sağlar. Cihazınızı daha büyük sisteme bağlarlar – o sistem ister bir akıllı ev, ister endüstriyel bir kurulum, ister sadece elinde telefon olan bir kullanıcı olsun. Bunları gözden kaçırmak, uyumlu ve kullanıcı dostu bir ürünle entegrasyon sırasında baş ağrıtan bir ürün arasındaki fark olabilir.

Paydaşları Erkenden Dahil Etmek

Peki tüm bu gereksinimler aslında nereden geliyor? Havadan düşmüyorlar – onları paydaşlarınızdan topluyorsunuz. Paydaşlar, ürünün başarısında payı olan tüm kişi ya da gruplardır. Son kullanıcılar ya da müşteriler gibi bariz olanların yanı sıra şirketinizin pazarlama ekibi, satış ekibi, farklı disiplinlerden mühendisler (donanım, yazılım, firmware), proje yöneticileri, hatta regülasyon ya da uyumluluk uzmanları da buna dahildir. Bu insanların her birinin kendi ihtiyaçları ve kaygıları vardır ve gereksinimler tüm bu kritik bakış açılarını yakalamalıdır.

Paydaşlarınızı belirleyin ve bu erken aşamada onları aktif biçimde işe dahil edin. Nedeni şu: paydaşlar, ürün için “başarının” neye benzediğini çözmenize yardım eder. Pazarlama ekibi, “50 doların altında olmalı ve tek şarjla bir yıl gitmeli, çünkü müşterilerimizin beklentisi bu” diyebilir. Son kullanıcılar (ya da temsili bir kullanıcı personası) cihazın kurulumunun süper kolay olmasına ve asgari bakım gerektirmesine ihtiyaç duyabilir. Yazılım ekibi, cihazı bir cloud platformuyla entegre etmeyi planladıkları için sağlam bir API ihtiyacının altını çizebilir. Güvenlik uzmanı, şifreleme ve kimlik doğrulama gereksinimlerinde ısrar edecektir. Bir uyumluluk sorumlusu, FCC radyo emisyon standartlarını ya da elektrik güvenliği standartlarını karşılamanız gerektiğini hatırlatabilir. Tüm bu girdiler gereksinimlere dönüşür.

Bu ihtiyaçları şimdi yüzeye çıkarmak, sonradan çıkarmaktan çok daha iyidir. Her paydaş grubuyla beyin fırtınası oturumları, atölyeler ya da basitçe görüşmeler yaparak ürünün ne yapması ve hangi koşulları karşılaması gerektiğinin kapsamlı bir listesini oluşturabilirsiniz. Bunu bir fanusun içinde yapmayın – paydaş girdisi olmadan yazılmış bir gereksinim hedefi ıskalayabilir. Örneğin, müşteri destek ekibine danışmayı unutursanız, “Cihaz, fabrika ayarlarına dönmek için bir reset mekanizması sağlamalıdır” gibi (sorun giderme için önemli) bir gereksinimi gözden kaçırabilirsiniz. Ya da üretim ekibini yok sayarsanız, seri üretimi fazla pahalı ya da zor bir tasarım tarif edebilirsiniz.

Paydaşları erken dahil etmek aynı zamanda sahiplenme yaratır. Herkes kendi kaygılarının gereksinimlerde karşılandığını gördüğünde projeyi destekleme olasılığı artar ve ileride daha az tatsız sürpriz çıkar. Üstelik paydaşların deneyimlerinden gelen içgörüleri vardır – bundan şimdi yararlanmak, sizi yolun devamındaki sancılı değişikliklerden kurtarabilir.

Tüm bu girdileri topladıkça, az önce konuştuğumuz fonksiyonel, fonksiyonel olmayan ve arayüz gereksinimlerinin resmi şekillenmeye başlayacak. Bu aşama özünde havalı bir fikirle net tanımlanmış bir ürün arasındaki köprüyü kurmaktır. Puslu dilekleri (“Ucuz olsun! Güvenli olsun! X’i ve Y’yi yapsın!”) alır, mühendislerin üzerinde çalışabileceği kesin gereksinimlere dönüştürürsünüz. Bunu da doğru insanlarla konuşarak ve doğru soruları sorarak yaparsınız.

Unutmayın, gereksinim toplama bir takım sporudur. Tüm kilit oyuncuları (kelimenin gerçek ya da mecazi anlamıyla) aynı odaya toplayın ve bu cihazın herkesi mutlu etmek için ne yapması gerektiğini enine boyuna tartışın. Şimdi ne kadar çok bakış açısı katarsanız, sonra o kadar az kör noktanız olur.

Gereksinimleri Belgelemek ve Takip Etmek

Tüm bu gereksinimleri paydaşlarınızdan topladıktan sonra, sıradaki adım onları net biçimde yazıya dökmek ve düzenlemektir. Gereksinimleri iyi yapılandırılmış bir formda yakalamak kritiktir, çünkü herkesin aynı sayfada olmasını ve hiçbir şeyin kaybolmamasını sağlar. Pratikte ekipler gereksinimleri belgelemek için farklı yöntemler kullanır:

Hangi formatı seçerseniz seçin, her gereksinimin belirsizlikten uzak ve test edilebilir olduğundan emin olun. İyi bir pratik, “optimal”, “kullanıcı dostu” ya da “yeterli” gibi belirsiz kelimeleri sayısallaştırmadan kullanmaktan kaçınmaktır. Bunun yerine somut sayılar ya da net kriterler kullanın. Örneğin “pil ömrü uzun olmalı” demek yerine “pil ömrü, saatlik veri yüklemeleriyle tek şarjda en az 12 ay olmalıdır” deyin. Bu, tasarımcılara net bir hedef verir ve tahmin yürütmeye yer bırakmaz.

Bir diğer faydalı alışkanlık: her gereksinimi, ileride onu nasıl doğrulayacağınızla etiketleyin. Bu, ürünün o gereksinimi karşıladığını nasıl kanıtlayacağınızı baştan düşünmek demektir. Yaygın doğrulama yöntemleri şunlardır:

Doğrulama yöntemini baştan etiketleyerek (bazı ekipler gereksinim dokümanına “Doğrulama Yöntemi” diye bir sütun bile ekler), her gereksinimin sonradan kanıtlanabilecek biçimde ifade edilmesini güvence altına alırsınız. Bu sizi, test aşamasında birinin “Durun, bu belirsiz hedefe ulaştığımızı nasıl kontrol edeceğiz?” diye sorduğu o korkunç senaryodan da kurtarır.

Son olarak, gereksinim dokümanınızı ya da listenizi güncel tutmayı unutmayın. Proje ilerledikçe bazı gereksinimleri rafine edebilir ya da yenilerini ekleyebilirsiniz (gerçi baştan titiz bir iş çıkardıysanız umarız çok fazla değişiklik olmaz!). Düzenli ve sürüm kontrollü bir liste tutmak (basit bir tablo ya da yaşayan bir doküman bile olur), herkesin üzerinde anlaşılmış güncel gereksinimlerin ne olduğunu izlemesine yardımcı olur. Ayrıca yeni ekip üyelerinin, ürünün ne yapması gerektiğini anlamak için gereksinimleri okuyarak hızla adapte olmasını sağlar.

Özetle, gereksinimleri yapışkan notlara karalayıp hayırlısını beklemeyin. Onları net, yapılandırılmış bir biçimde yazıya dökün – ister resmî bir doküman olsun, ister iyi bakılan bir backlog. Şimdiki netlik, sonraki kafa karışıklığını önler. Ve her gereksinimi nasıl doğrulayacağınızı planlayarak, yolun devamındaki test ve validasyon aşamasının daha pürüzsüz geçmesinin zeminini döşersiniz.

Aşama 1’i Toparlarken

Geliştirmenin bir sonraki aşamasına yelken açmadan önce, bu gereksinim aşamasının neden bu kadar kritik olduğunu bir kez daha vurgulayalım. Bir gereksinim hakkında sonradan fikir değiştirmek, ev inşa edildikten sonra fazladan bir yatak odası eklemeye karar vermek gibidir – mümkündür, ama sancılı ve pahalı olacaktır. IoT ürünleri dünyasında “sancılı ve pahalı”, bir sensörü unuttuğunuz için devre kartının komple yeniden tasarlanması ya da belirli bir kullanım senaryosunu baştan hesaba katmadığınız için büyük bir firmware revizyonu anlamına gelebilir. Proje gecikmeleri, bütçe aşımları ya da en kötü ihtimalle kullanıcılarını ve paydaşlarını tatmin edemeyen bir ürün demek olabilir.

Net paydaş ve sistem gereksinimlerini yakalamak için şimdi emek yatırarak, özünde projeniz için bir plan ve yol haritası inşa ediyorsunuz. Bu gereksinimler, işin içindeki herkes için referans noktası haline gelir:

İleride anlaşmazlıklar ya da yeni fikirler ortaya çıktığında, gereksinim dokümanı ekibi hizada tutan Kutup Yıldızınızdır. Biri geliştirmenin ortasında kapsamı şişirecek bir özellik önerdiğinde, dönüp şunu sorabilirsiniz: “Bu, üzerinde anlaştığımız gereksinimlere göre kapsamda mı? Değilse, eklemek için neyden vazgeçiyoruz?” Bu, kapsamı ve beklentileri yönetmeye yardımcı olur.

O yüzden Aşama 1’i doğru yapmak için zaman ayırın. Paydaşları dahil edin, tüm işlevleri ve kısıtları enine boyuna düşünün, her şeyi net biçimde yazıya dökün ve hepsinin mantıklı olduğunu bir kez daha kontrol edin. Bir konsept ya da spesifikasyon üzerinde iterasyon yapmak, fiziksel bir cihaz ya da kod tabanı üzerinde yapmaktan çok daha ucuz ve kolaydır. Bu aşamayı iyi yaparsanız, sonraki tüm aşamalarda başarı için zemini hazırlamış olursunuz.

Elinizde sağlam bir paydaş ve sistem gereksinimleri setiyle ilerlemeye hazırsınız. Önünüzde işin eğlenceli kısmı var – tüm o iyi tanımlanmış gereksinimleri karşılayan bir şeyi tasarlayıp inşa etmek! Ama bunu yaparken bu hazine haritasını (gereksinimlerinizi) yanınızda taşıyacak, her zaman rotada kaldığınızdan emin olacaksınız. Önce işin temeli – ve artık onu doğru yaptınız.