Ana Sayfa / Saha Notları

Metodoloji

Spike: Çevik Projelerde Belirsizliği Zaman Kutusuna Almak

Tahmin edilemeyen bir işi tahmin etmeye çalışmak yerine, önce bilinmeyeni öğrenmek için süresi sınırlı bir araştırma yapmak. Agile/Scrum ekiplerinde spike nedir, nasıl yazılır, ERP projelerinde nerede işe yarar ve nerede yanlış kullanılır.

Seviye
Orta
Okuma
~6 dk

Sprint planlamasında sık yaşanan bir an vardır: ekip bir işe puan vermeye çalışır, biri "3" der, biri "13" der, üçüncüsü "bilmiyorum, IFS'in API'si bunu destekliyor mu ki?" diye sorar. Toplantı yirmi dakika uzar, sonunda orta bir sayı yazılır. O sayı bir tahmin değil, tahmin kılığına girmiş bir belirsizliktir.

Spike, bu durumun çevik yöntemlerdeki cevabıdır: tahmin edilemeyen işi tahmin etmeye zorlamak yerine, önce onu tahmin edilebilir yapacak bilgiyi toplamak için süresi baştan sınırlanmış bir çalışma yapılır.

Spike nedir?

Terim Extreme Programming (XP) kökenlidir; spike solution, bir problemin içinden hızlıca bir çivi geçirip öbür tarafta ne olduğunu görmek anlamında kullanılır. Scrum Rehberi'nde spike diye bir kavram geçmez, ama Scrum ekipleri bunu backlog'daki özel bir iş türü olarak yaygın biçimde kullanır.

Bir spike'ı sıradan bir kullanıcı hikâyesinden ayıran üç şey vardır:

Kullanıcı hikâyesi Spike
Çıktısı Çalışan, kullanıcıya değer veren yazılım Bilgi: bir karar, bir tahmin, bir bulgu
Süresi Tahmine göre Baştan sabit (zaman kutusu)
Bittiğinde Canlıya gidebilir Kodu genellikle atılır; canlıya gitmez

Kısacası spike bir soruyu cevaplar. Yazılım üretmez; yazılımın nasıl üretileceğine karar verdirir.

İki tür spike

  • Teknik spike. Bir teknik belirsizliği giderir: entegrasyon mümkün mü, performans yeterli mi, bu kütüphane işimizi görür mü, mimari seçeneklerden hangisi uygun?
  • Fonksiyonel spike. Bir iş belirsizliğini giderir: kullanıcı bu akışı nasıl bekliyor, iş kuralı hangi durumda istisna üretiyor, ekran tek adımda mı yoksa sihirbaz olarak mı çalışmalı? Genellikle hızlı bir prototip ya da kullanıcıyla kısa bir oturumla yapılır.

İyi bir spike'ın anatomisi

Kötü yazılmış spike: "IFS entegrasyonunu araştır." Bu bir iş değil, bir konu başlığıdır; ne zaman biteceği belli değildir.

İyi yazılmış spike dört parçadan oluşur:

Soru         : IFS REST API üzerinden müşteri siparişi satırı
               oluşturup aynı çağrıda rezervasyon yapabiliyor muyuz?
Zaman kutusu : 2 gün
Çıktı        : Evet/Hayır + çalışan örnek çağrı + kısıtların listesi
Sonraki adım : Cevaba göre "Sipariş aktarımı" hikâyesi yeniden tahmin edilecek
  • Tek bir soru. Cevabı evet/hayır ya da bir sayı olabilecek kadar dar. Soru iki taneyse spike da iki tanedir.
  • Zaman kutusu. Genellikle birkaç saat ile birkaç gün arası, tek sprint içinde. Süre dolduğunda spike biter — cevap bulunmuş olsun ya da olmasın. Bulunamadıysa bu da bir bulgudur.
  • Tanımlı çıktı. Ne teslim edilecek? Bir karar notu, bir ölçüm sonucu, çalışan bir deneme kodu, bir tahmin.
  • Sonraki adım. Spike'ın sonucu hangi hikâyeyi, hangi kararı besleyecek? Bağlandığı bir iş yoksa o spike muhtemelen gereksizdir.

Bu dört parça, aslında CTQ notunda anlattığımız mantığın küçük ölçekli hâlidir: "araştıralım" isteğini ölçülebilir bir kabul kriterine çevirmek.

ERP projelerinden örnekler

Belirsizlik Spike sorusu Zaman kutusu
Entegrasyon E-fatura entegratörünün API'si toplu gönderimi ve durum sorgulamayı destekliyor mu? 1 gün
Performans 2 milyon satırlık stok hareketi üzerinde aylık rapor 3 saniyenin altına iner mi? 2 gün
Veri kalitesi Eski sistemdeki cari kartların yüzde kaçı vergi numarasıyla eşleşiyor? 1 gün
Teknoloji SOLIDWORKS API ile montajdaki her parçanın malzeme ve kütle bilgisi okunabiliyor mu? 2 gün
Kullanıcı akışı Depo personeli sayımı el terminalinde tek ekranda yapabilir mi, yoksa iki adım mı gerekir? yarım gün + saha denemesi

Performans spike'larında ilk bakılacak yerleri Oracle performans kontrol listemizde topladık; iki günlük bir spike'ın ilk yarım günü genellikle o listeyle geçer.

Scrum akışında spike

  1. Backlog'a girer. Bir hikâye tahmin edilemediğinde ya da iyileştirme sırasında belirsizlik ortaya çıktığında Product Owner ve ekip spike'ı ayrı bir iş olarak ekler.
  2. Sprint planlamasında zaman kutusu alır. Puan verilip verilmeyeceği ekipten ekibe değişir: bazı ekipler spike'a puan vermez ve kapasiteden düşer, bazıları zaman kutusuna denk gelen puanı yazar. Önemli olan tutarlılıktır; hız (velocity) hesabında spike'ların nasıl sayıldığı ekipçe bilinmelidir.
  3. Sprint içinde yapılır. Zaman kutusu dolduğunda durulur. "Biraz daha bakalım" diye uzatmak, spike'ı spike olmaktan çıkarır.
  4. Sprint Review'da bulgu gösterilir. Çıktı bir yazılım olmadığı için gösterilen şey karardır: "Evet yapılabiliyor, şu kısıtla" ya da "Hayır, alternatif şu."
  5. Sonuç backlog'a döner. Asıl hikâye yeniden tahmin edilir, bölünür ya da tamamen vazgeçilir.

Nerede tökezleniyor?

  1. Soru yazılmaz. "Araştır" diye açılan spike'ın bitişi yoktur. Zaman kutusu dolar, ekip "biraz daha anladık" der ama hiçbir karar çıkmaz.
  2. Zaman kutusu esner. İki günlük spike bir sprinte yayılır. Belirsizliği azaltmak için açılan iş, belirsizliğin kendisine dönüşür.
  3. Deneme kodu canlıya gider. Hızlı ve kirli yazılmış prototip "zaten çalışıyor" denerek ürüne alınır. Spike kodu öğrenmek için yazılır; üretim kalitesinde değildir ve öyle kalmalıdır.
  4. Her belirsizlik spike'a çevrilir. Sprint'in yarısı spike olursa ekip değer üretmiyor, sürekli hazırlık yapıyor demektir. Küçük belirsizlikler hikâyenin içinde çözülür; spike yalnızca tahmini gerçekten imkânsız kılan belirsizlik içindir.
  5. Sonuç yazılmaz. Bulgu bir kişinin kafasında kalır. Üç ay sonra aynı soru yeniden sorulur ve aynı spike yeniden açılır.

DMADV ve spike

İki yaklaşım farklı dünyalardan gelir ama aynı ihtiyaca cevap verir. DMADV'nin Analyze adımında alternatifler karşılaştırılırken, "bu alternatif gerçekten çalışır mı?" sorusu çıktığında cevap çoğu zaman bir spike'tır. Design adımında erken prototip çıkarma alışkanlığı da spike'ın fonksiyonel türüyle örtüşür.

Fark şudur: DMADV bir süreci baştan sona kurmanın haritasıdır, spike ise o haritada tek bir bilinmeyen noktayı aydınlatmanın aracıdır.

Biz nasıl kullanıyoruz

ERP projelerinde spike'ı en çok iki yerde kullanıyoruz: entegrasyonlarda, çünkü karşı sistemin API'sinin belgelerde yazdığı gibi davranıp davranmadığı ancak denenerek anlaşılır; ve özel ekran/uygulama geliştirmede, çünkü kullanıcının iş akışı ancak önüne bir şey konduğunda netleşir.

Entegrasyon belirsizliklerini Entegrasyon Stüdyosu çalışmalarında, ekran ve akış belirsizliklerini özel uygulama geliştirme sürecinde spike ile kapatıyor, sprint planını ERP Proje Yöneticiliği çatısı altında bu bulgulara göre kuruyoruz.