28 Haziran 2014 Cumartesi

Çevik Yöntemlerde İş Analizi

Çevik (agile) yöntemleri çoğumuz duymuşuzdur.  BT'de yaygın olan çevik yöntemler (ilgili makale: Çevik Yöntemleri Uygulayabilmek) ile ilgili hemen aklımıza hızlı şekilde kodlama gelir. Hep yazılım tarafındaki katkısı ve hızı düşünülür. Aslında çevik yöntemlere bu hızı kazandıran özelliklerden birisi hiç şüphesiz çevik iş analizidir. Peki çevik yöntemler içinde iş analizi nasıl yapılır? Bu sorunun yanıtını arayacağız.

Çevik manifestoda karmaşık dokümantasyon, uzun süreçler, müşteri ile sözleşme pazarlıkları ve katı planlar kabul görmüyor. Bunun yerine çalışan yazılım, etkileşim, müşteri ile işbirliği ve değişime ayak uydurabilme ön plana çıkarılıyor. Bunun karşılığını iş analizinde bulmak mümkün. Birçok dokümandan oluşan kimi zaman yüzlerce sayfayı bulan ve çoğu zaman da okunmayan dokümanlar yerine "Kullanıcı Hikayesi" (User Story) kavramı öne çıkıyor. Kullanıcı hikayesi ise müşteri veya kullanıcı için değerli olan özellik veya kabiliyet olarak özetlenebilir. Her bir özelliği/kabiliyeti ayrı ayrı olmak üzere kartlara yazarak bunların hem planlamada, hem detayları hatırlamada hem de test aşamasında kullanılması sağlanır.


Örnekler:
  • Kullanıcı şifre ve kullanıcı adı ile sisteme giriş yapar.
  • Kullanıcı x ekranından y verisini girer.
  • Kullanıcı z verisini bilgisayarına kaydeder.
  • ...
Teknik gereksinimler, altyapı ihtiyaçları gibi müşteriye anlamlı olmayan konular kullanıcı hikayelerinde yer almaz. "Uygulama Java'da yazılır." veya "Spring çatısı kullanılır" gibi bilgiler müşteri için anlamlı değildir.

Bir diğer konu da çok genel ve yüzeysel kullanıcı hikayelerinin yanıltıcı olabileceğidir, örneğin "Kullanıcı sisteme girip işlem yapabilir" gibi. Burada kullanıcının ne tür işlemler yapacağı, neleri yapamayacağı gibi konular havada kalmaktadır. Müşteri için anlamlı olan tüm kabiliyetlerin, teker teker yazılması en ideal yoldur. Yazılanların mümkün olduğu kadar atomik olması, planlamayı ve test işlerini kolaylaştıracaktır. Kullanıcı hikayesinin bağımsız, tahmin edilebilir ve test edilebilir olması da hem planlamayı hem de testi kolaylaştıracaktır. Eğer uygulamayı kullanacak birden fazla tipte kullanıcı varsa bu kullanıcılara göre tasniflenerek kullanıcı hikayesi yazılması en sağlıklısı olacaktır.

Kullanıcı hikayesini, müşteri veya müşteri adına ekipte yer alan iş analisti yazabilir. Yazılanların önceliklendirilmesi de yine müşteri veya onun temsilcisi tarafından yapılır. Her bir kullanıcı hikayesinin maliyeti (story points) işin büyüklüğü ve karmaşıklığı da dikkate alınarak yazılımcılar tarafından belirlenir. Sürüm ve iterasyon aşamalarında bu maliyetler, öncelikler ve yazılım hızı (iterasyon başına düşen ortalama story points) dikkate alınarak planlama yapılır. İterasyona giren kullanıcı hikayelerine dokunulmaz, dışında kalanlarla ilgili müşteri öncelik değiştirebilir veya yenilerini ekleyebilir.

İterasyon boyunca çalışılan kullanıcı hikayeleri için kabul testleri (acceptance testing) senaryoları kartların arkalarına yazılabilir. Bu şekilde istenen neydi, nasıl test edilecek bilgileri tek yerde toplanır. Tabi test için çeşitli araçlar kullanılan kurumlarda araca da girişi yapılabilir.

İterasyonla testi tamamlanıp kullanıma sunulan maddeler iş listesinden (çevik yöntemlerde ingilizcesi burndown chart, türkçe bilişim sözlüklerinde tam karşılığı bulunmuyor) düşülür. Proje boyunda yeni talepler de gelebileceği düşünüldüğünde genel trendi azalan ancak zaman zaman da yeni taleplerle artan bir grafik ortaya çıkar.

Sonuç olarak çevik yöntemlerde iş analizi önemini korur. Buradaki amaç uzun dokümanlar yerine ihtiyaçları basit, anlaşılır, kodlanabilir ve test edilebilir kullanıcı hikayelerine dönüştürmek ve bunları etkin şekilde kullanabilmektir.

6 Haziran 2014 Cuma

Çevik Yöntemleri Uygulayabilmek

Son yıllarda özellikle BT sektöründe çokça duyulan ve popüler olan terimlerden biri de çevik (agile) yöntemler. Çıkışı 1950'lere dayanan bu yaklaşım 1960'larda 1-2 haftalık iterasyonlar ve kısmi çözümlerle hızlı  sonuçlar alınması şeklinde uygulanıyor.  1980'lerde Scrum ortaya çıkıyor. Burada da rugby oyunundaki toplu hücum toplu savunmadan esinlenilerek toplucu tüm işin yapılması temel felsefeyi oluşturuyor. 1990'lara gelindiğinde XP (extreme programming, ilgili makale: XP Nedir?), DSDM (Dynamic Systems Development Method) ortaya çıkarak çeşitli yerlerde kullanılmaya başlıyor. 2001'e gelindiğinde ünlü Çevik Manifesto yayınlanıyor, özetle:
  • Süreçler ve araçlardan ziyade bireyler ve etkileşimlere
  • Kapsamlı dökümantasyondan ziyade çalışan yazılıma
  • Sözleşme ve pazarlıklarından ziyade müşteri ile işbirliğine
  • Bir plana bağlı kalmaktan ziyade değişime karşılık vermeye
önem verilmesi olarak belirtiliyor. Scrum, XP, DSDM, FDD (Feature Driven Development), Crystal, LSD (Lean Software Development) ve diğer çevik yöntemler detayda bazı farklılıklar gösterseler de genel olarak yukarıdaki manifestoya uygun yaklaşımlardır.  

Temel itibariyle tüm projelerde çevik yöntemler uygulanabilir. Yukarıdaki manifestoyu baz alarak yaklaştığınız sürece tüm projeleri çevik tipte ele alabilirsiniz. Projeleri birkaç haftalık iterasyonlar olarak küçük parçalara bölerek yönetirseniz ve iterasyon sürelerini sabit tutarsanız (time-boxing) çevik yaklaşımın temel prensiplerini kullanabilirsiniz. Peki nasıl uygulayabiliriz? Aklınıza gelen bazı temel engelleri ve bunlara çevik dünyanın verdiği yanıtları alttaki şekilde özetleyebiliriz:
Çevik yöntemlerde dokümantasyonu nasıl yaparım? İterasyonlar içinde teslimatlar arasında dokümanları da tanımlayabiliriz. Dokümantasyonda aşırıya kaçmamak asgari yeter seviyede (barely sufficient) yapmak çevik yöntemlerin tercihidir. İstenirse dokümantasyon için ayrıca bir iterasyon (hand-off) ayrılabilir.
Kalite süreçlerini nasıl işletirim? Kalite süreçlerinde istenenleri, iterasyonlar içinde iş maddesi veya iterasyon sonunda kabul kriteri olarak planladığımızda kalite ekibiniz de memnun olacaktır.
Şirketimiz çağlayan modeli ile çalışılmasını tercih ediyor, ne yapabilirim? Çağlayan modelinde istenen çıktıları verdiğimiz sürece ekip içinde çevik yöntemlerle ilerlememize engel bir durum yoktur. Mümkün olduğu kadar müşterimizi işin içine katarak işbirliğini artırdığımızda çevik yaklaşımın meyvelerini yiyebiliriz.
Çevik yöntemlerde direkt kodlama yapabilir miyim? Çevik yöntemler kovboy kodlaması (cowboy coding) değildir. İşleri esnek bir plan dahilinde önceliklendirerek  yürütmemiz beklenmektedir. 
Çevik yöntemde kapsam, bütçe, zaman nasıl dengelenir? Sabit bütçe ve zaman olduğu varsayılarak kapsam serbest bırakılır. Müşterinin kapsamı yönetmesine izin verilir. Müşteri de kapsamı değiştirebildiği için mutlu olur. Çağlayan modelinde proje esnasında gelen değişiklik isteklerinin (change request) yerini ürün iş listesi (product back-log) alır.
Çevik yaklaşımda kapsam kontrolü nasıl yapılır? Ürün iş listesi ve bunun önceliklendirilmesi ile kapsam yönetilir. Burada kritik konu müşterinin fikrinin değiştirip iş listesinde henüz iterasyonu ve yazılım süreci başlamamış maddelerin önceliğini ve içeriği değiştirebilmesidir.  Eğer yeni madde ilave edilecekse karşılığında bir maddeyi çıkarmasını isteriz. Müşteri de vazgeçebileceği bir şey bulup bizi bu yükten kurtarır.
Ürün nasıl son haline getirilir? Ürünü toparlamak ve gerekli yerlerini düzenlemek için özel bir iterasyon (hardening, refactoring) planlayabiliriz.
Çevik yöntemlerde proje yöneticisi var mıdır? Elbette vardır, yöntemlere bağlı olarak adı değişebilir, örneğin Scrum Master, XP Koçu gibi. Klasik proje yönetiminden en büyük farkı ekibin işini kolaylaştırmak amacıyla ekibin önündeki engelleri ve bürokrasiyi kaldırmaya çalışır, ekibe yöneticilik yerine liderlik yapar. Sorun veya risk olan noktalarda devreye girer. Seçilen çevik yöntemin doğru uygulanmasını sağlar.

Çevik yaklaşımlardan maksimum fayda elde edilebilmesi için kurum olarak bu yöntemlerin benimsenmesi, üst yönetimin bu yolda tam destek sunması oldukça önemlidir. Müşterinin çalışmalara aktif katılımı da sonucu etkileyecektir.

Tüm projeler gibi çevik yaklaşımla yönetilen projeler de başarılı olmayı hedeflerler. Çevik yöntemlerde başarılı olabilmek için bol uygulama ve tecrübe çok önemlidir. Uygulama sayısı arttıkça hız kazanılması, eksikliklerin giderilmesi mümkün olur. Başarıyı etkileyen konular genel olarak diğer projelerle benzerlik gösterir (ilgili makale:Proje Başarı Kriterleri ve Proje İhtiyaç Analizi). Çevik yaklaşımın kendine özgü başarı anahtarları da vardır (ilgili makale: Çevik Yazılım Projelerinde Başarının Anahtarları Nelerdir?). 

1 Haziran 2014 Pazar

Liderlikte Enerji

Herkesin enerji hakkında az çok bilgisi vardır. Hatta aklımıza hemen elektrik, doğal gaz, benzin gibi kavramlar da gelir. "Temiz enerji" ve "doğa dostu enerji" ise son yıllarda çokça duyduğumuz kelimeler, bunları da rüzgar tribünleri, güneş panelleri ile özdeşleştirmiş durumdayız. Fizikteki enerji tanımı cismin/sistemin iş yapabilme yeteneği olarak verilirvardan yok yoktan var edilemez, dönüşür; çeşitli şekillerde bulunabilir; kinetik enerji, potansiyel enerji ise temel formlarıdır. Fizikteki bu tanımları kullanarak insandaki enerjiyi inceleyeceğiz. Liderlik elbette çok boyutlu bir kavram (ilgili makaleler: Takım Formasyonu ve LiderlikMükemmeliyetçilik ve Liderlikİnsan Nasıl Yönetilir?Başarılı bir CEO olur muydunuz?), bu yazıda sadece enerji açısından ele alacağız.

İnsandaki enerjiyi anlamak için süper kahramanlardan başlamakta fayda görüyorum. Enerji deyince aklıma ilk gelen atom karınca, yardım için oradan oraya koşturur, yorulmak nedir bilmez. Superman bile atom karıncanın yanında tembel kalır. En azından Clark Kent olunca dinlenme imkanı bulur :) Süper kahramanların enerjilerini nereden bulduklarını ise net değildir. Peki biz sıradan insanlara ne enerji verir?
  • Yiyecekler 
  • Renkler
  • Müzik
  • Kelimeler
  • Düşünce ve duygular
Yiyecekler fiziksel enerjimizi sağlarlar, hepimizin bildiği ATP molekülü de bu süreçte anahtardır. Renkler ise duyguları harekete geçirerek enerji verir veya alır. Dinlediğiniz müzik eğer hoşunuza giden bir ritm içeriyorsa enerjinizi artıracaktır, beğenmediğimiz bir parça ise enerjimizi düşürecektir. Okuduğunuz, duyduğunuz ve söylediğiniz tüm kelimeler enerji içerir. İnsanların birbirlerine enerji aktarmalarını sağlar. Düşünce ve duygular da insanın enerji seviyesini ve enerjinin pozitif mi negatif olduğuna katkı yapacaktır. Hatta enerjimizi başka insanlara bazen kelimelerle, bazen bakışlarımızla bazen de duruşumuzla istesek de istemesek de aktarırız.

Liderler de ekiplerine enerji aktarır. Ekibin enerjisi sonuca yansır. Bu da yapılan işi, projeyi, uğraşı mutlaka etkiler. Liderdeki negatif enerji ekibe misliyle yansır, hem işe hem de ekip içi ilişkilere olumsuz etkiler. İyi liderlerin ise pozitif enerji yaymaları gerektiği söylenir. Peki liderler ne zaman pozitif enerji verirler?
  • Çalışandaki potansiyeli anlamaya zaman ayırdığında: Bunun için çok iyi bir dinleyici olup (ilgili makale: Konuşma, Dinleme ve Proje Yönetimi) çalışanın hayallerini ve hedeflerini anlamak ve de hangi yöne kabiliyetleri olduğunu gözlemlemek gereklidir. Her insanın bir kabiliyeti, diğer insanlardan daha iyi yapabildiği bir şey vardır. Kimi insan bunun farkındadır, kimisi de farkında değildir. Farkında olmayanların keşfedebilmesi için liderlerin gözlemleri yardımcı olacaktır. İnsana eleştirel gözle yaklaşma, bir kusur bulma en kolayıdır. Kusursuz insan var mıdır dünyada? Maharet potansiyel bulmak ve bunu ortaya çıkarmaktadır.  
  • Potansiyel  enerjiyi kinetik enerjiye çevirmeye destek olduğunda: Potansiyeli anladıktan sonra istek uyandırıp işe, oluşa yönelmesine yardımcı olmak, harekete geçmesine fırsat vermek gereklidir.  
  • Çalışanlara koçluk, mentörlük yaptığında: Doğru budur diyerek insanların kabul etmesini beklemek en kolayı ancak en etkisiz olanıdır.  Bunun yerine çalışanlara ne yapacakları söylemeyip doğruyu bulmaları için kılavuzluk etmek ve gerekli yerlerde iyi sorular sorarak çalışanın kendiliğinden doğruları yakalamasına yardımcı olmak gelişim için iyi bir yaklaşımdır. 
  • Çalışanların başarı ve başarısızlıklarını aynı olgunlukla karşıladığında: Başarısızlıkların da eğer nedenleriyle incelenirse çok iyi birer öğretmen ve de başarıya giden yolda kilometre taşları olduğunun bilinciyle yaklaşmak çalışanlara cesaret verecektir. Esas tehlike başarısız olmak değil başarısızlık korkusuyla hiçbir deneme yapmamaktır. Şu anda kullandığımız hemen hemen bütün araç gereçler onlarca bazen yüzlerce başarısız deneme ve bunlardan öğrenilenler sonucunda ortaya çıkmıştır. Eğer başarısız olmaktan korksaydı tüm insanlar, hala taş devrinde yaşıyor olurduk.
  • Çalışanların katkı sağlamasına fırsat yarattığında: Her şeyi kendi bilip yapmak yerine ekibin de bir şeyler katmasına fırsat vermek, onların da yapılan işi sahiplenmelerini sağlayacaktır. Çorbada tuzu bulunan çorbadan daha çok lezzet alacaktır.
  • Çalışanlarla birlikte öğrenmeye ve uygulamaya başladığında: Ekiple bir şeyler öğrenip bunu da hep birlikte uygulamak ekip ruhunu kuvvetlendirecektir.
  • İlham verme ile değer vermeyi birlikte yapabildiğinde: Birçok kaynakta, liderlikte öne çıkartılan kavram ilham vermek ve etkileyerek peşinden sürüklemektir. Esasen değer vermek de en az ilham vermek kadar önemlidir, hele bu ikisini birlikte yapabiliyorsa işte o zaman gerçek anlamda lider olunabilir. Unutmamak gerekir ki "değer verildiğini hisseden değer katmak için çalışır".

Hepimiz hayatımızın bir parçasında lideriz. İş ortamında kimimiz CEO, Müdür, Proje Yöneticisi, Ekip Yöneticisi. Liderlik sadece iş ortamıyla da sınırlı değil elbette kimimiz spor takımı kaptanı, kimimiz dernek başkanı, kimimiz aile reisi, kimimiz abi/abla, kimimiz anne/baba. Her ne konuda liderlik yaparsak yapalım bizimle birlikte olan insanları dinliyor, anlıyor ve de değer veriyorsak, bizimle birlikte olan insanların tüm gayretiyle yapılana dahil olma, saygı ve de sevgisini kazanma şansına sahip oluruz. Ekip olmak sadece akıl işi değil aynı zamanda gönül işidir. Kalıcı başarıların anahtarı da işte budur.