Monte Carlo’da Poker Oynamak

Hayri Kılıç
KoçSistem
Published in
3 min readSep 14, 2023
Photo by Pranjall Kumar on Unsplash

Backlog maddelerini tahminleme (estimating) ya da büyüklük verme (sizing) Agile takımlar tarafından sıklıkla gerçekleştirilen bir uygulamadır. Birlikte çalıştığım takımlar, bu etkinliği biraz da süreci oyunlaştırmak amacıyla “Planning Poker” tekniğini kullanarak gerçekleştirirler.

“Sprint” ya da “Iterasyon” sonunda tamamlanmış olan maddelerin genel toplamına (büyüklük toplamı) bakarız. Bu değeri Scrum uygulayıcıları “Velocity” olarak adlandırır; adet bazında bir ölçüm yapılıyorsa özellikle Kanban uygulayıcıları bunu “Throughput” olarak ifade eder.

Gelecek üzerine yapılan bütün tahminlemeler geçmiş data üzerinden gerçekleştirilir. Bu açıdan düşünecek olursak Scrum ya da Kanban ile özdeşleşmiş birçok metrik özünde gelecek tahminlemeleri yapmak üzere kullanılır.

Örnek vermek gerekirse, 100 SP (Story Point) büyüklüğünde bir Backlog’muz olsun. Eğer tempomuzu (pace) bilirsek, bu büyüklükteki bir Backlog’u ne kadar sürede eritebileceğimizi tahminleyebiliriz. Velocity’imiz yaklaşık 20 SP’e karşılık geliyorsa, bu büyüklükteki bir Backlog “yaklaşık 5 Sprint içinde tamamlanabilir” deriz. Fakat, burada bir soru daha olmalı: hangi güven seviyesinde (confidence level) 5 Sprint içinde tamamlanabilir?

Bir takımın yaptığı tahminde birkaç Sprint’lik sapma olursa belki o takım tarafından göz ardı edilebilir. Fakat, özellikle zaman faktörü açısından önem arzeden proje ya da teslimatlarda işte bu sapma olasılığının da hesaba katılması ve kabul edilebilir güven seviyesine göre tahminlemelerde bulunmak gerekir.

Monte Carlo simülasyonu bu durumlar için kullanabileceğimiz bir teknik olarak karşımıza çıkıyor. Yapmak istediğimiz, belirsiz bir durum için olasılıkları hesaplamak ve belli bir güven seviyesinde bir değere ulaşıp, bu değer üzerinden tahminlemelerimizi gerçekleştirmek.

Aşağıdaki örnek üzerinden ilerleyelim. Bu tablo ilgili takımın Sprint sonlarındaki Velocity değerini gösteriyor.

Velocity
SP1 10
SP2 12
SP3 15
SP4 16
SP5 16
SP6 20
SP7 18
SP8 17
SP9 20
SP10 15
SP11 14
SP12 17
SP13 18
SP14 17
SP15 15

Ortalamayı dikkate alırsak eğer, 16 SP takımın genel ortalaması olarak karşımıza çıkıyor. Bir önceki örnekte bahsettiğimiz 100 SP’lik bir Backlog bu hesaba göre 7 Sprint’te tamamlanır. Bu tahminlemedeki güven seviyesi 64.20% olarak hesaplanır. Yani yaklaşık 35%’lık bir yanılma payımız olur.

Elimizde sadece 15 Sprint’in datası bulunmakta. Şöyle 500 Sprint sonucumuz olsaydı eğer, bunun üzerinden daha tutarlı bir tahminlemede bulunabilirdik. Bu aşamada Monte Carlo Simülasyonundan yardım alacağız. Sanki 500 Sprint koşmuşuz gibi bir simülasyon gerçekleştirip oluşan sonucu daha tutarlı bir tahminleme için kullanacağız.

Monte Carlo Simülasyonu Örneği

Biraz istatistik ve Excel yardımıyla bunun kolay bir şekilde yapılabildiğini görüyorsunuz. İlk simülasyon (1st Simulation) için 15 Sprint’lik datanın ortalama ve sapma değerini kullanıyoruz ve aşağıdaki Excel fonksiyonuyla değerimizi oluşturuyoruz.

=NORM.INV(RAND();$E$6;$E$8)

Daha sonra bu değeri yanda oluşturduğumuz 500 satıra uyarlayarak bir simülasyon meydana getiriyoruz (500 trials). Aşağıdaki formül yardımıyla da olasılığı (probability) hesaplıyoruz.

=COUNTIF(Velocity_Range;">12")/500

Eğer 90% güven seviyesinde bir tahmine ihtiyaç duysaydık, bu simülasyona göre 13 SP bu seviyeyi sağladığını görürdük. Yine aynı örnek üzerinden hesap edelim : 100/13 = 8 Sprint (virgülden kurtarıp sayıyı yuvarlıyoruz) içinde tüm Backlog maddeleri 90% güven seviyesinde tamamlanır. Yani burada yanılma payımız 10% gibi bir olasılıkla gerçekleşir.

Bu yazıda Monte Carlo simülasyonunu kullanarak tahminlemelerimizi nasıl iyileştirebileceğimizi gördük. Agile takımlar geçmiş datayı etkili kullanarak daha tutarlı sonuçlar elde edebilir, iş planlarını buna göre yapabilirler.

--

--