INVEST Kriterleri: İyi User Story ile Çöpü Ayıran 6 Kural (Gerçek Örneklerle)
Özet
- Büyük İş Yoktur: “13 SP’den büyük iş olmasın” kuralının asıl sebebi, o kadar büyük bir işin olmamasıdır. Sadece yeterince kafa yorulup bölünmemiştir.
- Her Parça Test Edilebilir Olmalı: Bir ekrandaki tek bir combobox’ın doldurulması bile kendi başına bir iş (to-do) ve test edilebilir bir parçadır.
- Canlıya Çıkmak Kullanıma Açmak Değildir: Feature toggle kullanarak parçaları canlıya alabilir, sistemi bozmadığınızdan emin olabilir ve riskleri sıfırlayabilirsiniz.
Kullanıcı hikayeleri yazarken teorik tanımların ötesine geçip işin pratiğine inme sırası geldi. INVEST (Independent, Negotiable, Valuable, Estimable, Small, Testable) kriterlerini ezberlemek kolaydır, ancak masaya bir “Ürün Listeleme Sayfası” geldiğinde bunu nasıl böleceğinizi bilmek asıl ustalıktır. Bu yazıda, devasa görünen işleri nasıl küçük, anlamlı ve risksiz parçalara ayıracağımızı somut bir örnek üzerinden inceleyeceğiz.
Agile Serisi — Kopya Kağıdı’nın 9. Bölümü.
Gerçek Hayattan Bir Örnek: Ürün Listeleme Sayfası
Bir ürün listeleme sayfası düşünelim. İçerisinde 8-10 tane parametresi, filtresi olsun. Genellikle yapılan en büyük hata, bunu “Kullanıcı ürünleri filtreleyebilmelidir” gibi devasa ve belirsiz bir hikaye olarak yazmaktır.
İstediğimiz 8 filtre örneği şunlar olsun:
Kategori
Elektronik, Giyim, Kozmetik vb.
Stok Durumu
Stokta var / Stokta yok
Satış Durumu
İndirimdekiler / Kampanyalı ürünler
Fiyat Aralığı
Minimum ve maksimum tutar
Marka
Marka bazlı seçim
Renk/Beden
Ürün özelliğine göre dinamik filtreler
Müşteri Puanı
4 yıldız ve üzeri vb. (Multi-select)
Gönderim Tipi
Aynı gün kargo / Hızlı teslimat
Bunu INVEST kriterlerine göre yazsak nasıl yazardık?
Bu durumda, örneğin sadece Kategori combobox’ının doldurulması tek başına bir “to-do” olur ve kendi içinde test edilebilir. Tüm filtreleri aynı anda yapmaya çalışmak yerine, her bir filtrenin eklenmesini bağımsız (Independent) ve küçük (Small) hikayelere bölebiliriz.
Detaylar Ayrı Birer Hikayedir
Listeleme sonucunda ekrana gelecek veriyi düşünün. 10 tane kolonun 10’unun birden ilk seferde gelmesine gerek yoktur.
Temel Veri
Önce sadece ID, kod ve tanım gelir. Bu kendi başına değer üreten (Valuable) ve test edilebilen bir hikayedir.
Ekstra Bilgiler
Stok bilgisi gerekiyorsa, o ayrı bir madde (story) bile olabilir. Çünkü stok bilgisini getirmek arka planda farklı bir servise gitmeyi, farklı bir veritabanını sorgulamayı gerektirebilir.
İşi bu şekilde böldüğünüzde, takımın tahminleme (Estimable) yapması çok daha kolay ve isabetli olur.
”13 SP’den Büyük İş Olmasın” Kuralının Gerçek Yüzü
Agile dünyasında sıkça duyduğumuz bir diyalog vardır: “13 Story Point’ten büyük iş olmasın.”
Canlıya Çıkmak Ne Demektir?
İşleri küçük parçalara böldüğümüzde akla şu soru gelir: “Sadece ID ve tanım getiren, tek bir filtresi olan sayfayı canlıya mı çıkacağız?”
Evet, çıkacağız. Çünkü canlıya çıkmak demek, canlıda birinin onu hemen son kullanıcı olarak kullanması demek değildir.
Feature Toggle (Özellik Anahtarı) kullanırsınız. Kodu canlı ortama alırsınız ama son kullanıcıya kapalı tutarsınız. Bu size ne sağlar?
- Canlıda mevcut çalışan bir şeyi bozmadığınızdan emin olursunuz.
- Bir parçasını canlı veride kullanır, test eder, anlamlı bir şey elde edersiniz.
- Sonra diğer tasklar da peşinden güvenle gelecektir.
Belki bu raporu veya listeleme sayfasını toplam 3 task ile yapacaksınız. Her bir parçası da hızlıca test olup canlıya çıkacak. Günün sonunda 3 deploy yapmış olacaksınız ve her biri de sorunsuz, stressiz bir şekilde gerçekleşmiş olacak. INVEST kriterlerinin asıl vaadi de tam olarak budur.
INVEST Kontrol Listesi: Hızlı Referans
Bir sonraki sprint planlama oturumunuzdan önce her hikayeyi bu kontrol listesinden geçirin:
| Kriter | Sorulacak Soru | Kırmızı Bayrak |
|---|---|---|
| Independent (Bağımsız) | Bu hikaye başka bir hikayeyi beklemeden inşa edilip deploy edilebilir mi? | ”Önce X hikayesinin bitmesi gerekiyor” |
| Negotiable (Pazarlık Edilebilir) | Takım nasıl uygulayacağını tartışmakta özgür mü? | Tartışmaya yer bırakmayan kısıtlayıcı gereksinimler |
| Valuable (Değerli) | Kullanıcı veya iş için somut bir şey sunuyor mu? | Görünür çıktısı olmayan salt teknik görevler |
| Estimable (Tahmin Edilebilir) | Takım güvenle boyutlandırabilir mi? | ”Çok fazla bilinmeze bağlı” |
| Small (Küçük) | Tek bir sprint içinde tamamlanabilir mi? | 8 SP üzeri her şey ikinci bir bakışı hak eder |
| Testable (Test Edilebilir) | Somut bir kabul testi yazılabilir mi? | ”Gördüğümüzde çalıştığını anlarız” |
Sıkça Sorulan Sorular
Agile'da INVEST ne anlama gelir?
INVEST, her kullanıcı hikayesinin karşılaması gereken altı kalite kriterinin kısaltmasıdır: Independent (Bağımsız), Negotiable (Pazarlık Edilebilir), Valuable (Değerli), Estimable (Tahmin Edilebilir), Small (Küçük) ve Testable (Test Edilebilir). Çerçeve, Bill Wake tarafından takımların net, uygulanabilir ve sprint döngülerine doğal olarak uyan hikayeler yazmasına yardımcı olmak için tanıtılmıştır.
INVEST kriterleri user story'lere nasıl uygulanır?
Büyük özellikleri küçük, bağımsız dilimlere bölün. “Kullanıcı ürünleri filtreleyebilmeli” şeklinde tek bir epik boyutunda hikaye yazmak yerine her filtre için — kategori, fiyat aralığı, marka vb. — ayrı hikayeler oluşturun. Her hikaye kendi başına değer üretmeli, net kabul kriterlerine (DoR/DoD) sahip olmalı ve refinement sırasında tahmin edilebilecek kadar küçük olmalıdır.
INVEST ve SMART kriterleri arasındaki fark nedir?
INVEST, Agile’da kullanıcı hikayeleri için özel olarak tasarlanmıştır; bağımsızlık, pazarlık edilebilirlik ve test edilebilirliğe odaklanır. SMART (Specific, Measurable, Achievable, Relevant, Time-bound) ise OKR’ler veya proje kilometre taşları için daha uygun genel bir hedef belirleme çerçevesidir. Temel fark: INVEST bir hikayenin pazarlık edilebilir (takım nasıl yapılacağını tartışır) olması gerektiğini söylerken, SMART bir hedefin zamana bağlı (sabit bitiş tarihi) olması gerektiğini söyler.
Tahmin edilemeyecek kadar büyük user story'ler ne olur?
Bir hikaye 13 Story Point’i aşıyorsa, genellikle belirsizlikler ve bağımlılıklar ayrıştırılmamıştır — işin kendisi doğası gereği karmaşık değildir. Her biri test edilebilir değer sunan dikey dilimlere bölün. Teknik analiz aşaması, bu ayrıştırmanın sprint başlamadan önce yapılması gereken yerdir.
Tamamlanmamış bir özellik INVEST ile deploy edilebilir mi?
Evet — feature toggle’ların sağladığı tam olarak budur. Küçük hikaye dilimlerini son kullanıcılardan gizli tutarak production’a deploy edersiniz. Bu, canlı ortamda hiçbir şeyin bozulmadığını doğrulamanızı ve gerçek veriyle test etmenizi sağlar. Her dilim deployment riskini azaltır ve sürekli teslimatı destekler.
The Bottom Line
INVEST sadece bir kontrol listesi değil, bir zihniyettir. Her hikaye, ekibin bağımsız olarak inşa edip doğrulayabileceği net, küçük ve değerli bir iş parçası olmalıdır. Hikayeler INVEST testini geçtiğinde planlama kolaylaşır, sprintler daha öngörülebilir hale gelir ve paydaşlar çalışan yazılıma daha hızlı ulaşır.