Sertaç Yıldırım saha notları

Ana sayfa → Bölüm 16

WIP Limiti: Kısıtlama Değil, Akış Ayarı

Salı, 7 Ekim 2025, 10:05. Daily’de tahtayı sağdan sola yürüyorduk ve yürüyecek pek bir şey yoktu: “Bitti” sütununda 2 kart, devam, review ve test sütunlarında toplam 9 kart. Altı kişiydik, sprint’in 7. günüydü. Herkes meşguldü ve hiçbir şey bitmiyordu.

Özet
  • Meşguliyet ilerleme değildir. Altı kişi dokuz iş açınca herkes çalışıyordu ama işler birbirini bekliyordu. Sprint 11 kartla başladı, 8’iyle bitti.
  • Little’s Law sahada tek bölme işlemi. Açık iş / günde biten iş = ortalama bekleme. 9 / 0,8 = 11 gün; iki haftalık sprint’ten uzun.
  • Limiti sütuna değil, akışa koy. İlk denemede yalnızca “Devam ediyor”a 5 koydum; kartlar review sütununa taşındı ve orada bekledi. Hiçbir şey değişmedi.
  • Fazla sıkı limit işi yer altına iter. 3’lük limitte beş iş tahtaya hiç girmedi. Tahta temiz göründü, gerçek WIP yine 8’di.
  • Limit dolunca yeni iş başlatılmaz, başkasının işi bitirilir. Review, test, eşli çalışma, engel kaldırma. 4’lük limitle cycle time 11 günden 4,5 güne indi.

WIP limiti ne işe yarıyor?

WIP, work in progress: başlanmış ama bitmemiş iş. WIP limiti, ekibin aynı anda açık tutabileceği iş sayısına konan üst sınır. Agile Olmak yazısında çoğu ekibin Kanban’dan WIP limitini ödünç aldığını tek cümleyle geçmiştim. Bu yazı o tek cümlenin sahadaki hâli.

Kâğıt üzerinde basit bir kural gibi duruyor: “Aynı anda en fazla dört iş.” İlk duyduğunda insanın aklına gelen şey de kısıtlama oluyor: “Boşta kalırsam ne yapacağım?” Bu soru yanlış yerden bakıyor. WIP limiti insanları değil, işleri yönetir. Amacı herkesi meşgul tutmak değil, başlanan işin bitmesini sağlamak.

Bizim tahtadaki 9 kartın hiçbiri tembellik yüzünden açık değildi. Ahmet ödeme ekranındaki işini review’a atmış, beklerken yeni bir kart çekmişti. Mehmet’in kartı müşterinin test ortamını bekliyordu, o da yeni bir kart çekmişti. Ayşe iki review isteğine bakmak yerine kendi işine devam ediyordu, çünkü onun da bitmesi gereken bir işi vardı. Herkes mantıklı davranıyordu ve toplamda ortaya mantıksız bir tablo çıkıyordu.

Herkesin meşgul olduğu bir ekipte işler genellikle birbirini bekliyordur.

Little’s Law: önce formülsüz

Bir bankada tek gişe var. Gişe günde 8 kişiyi alabiliyor. İçeride 40 kişi bekliyor. Kapıdan yeni giren biri kaç gün bekler? 40 / 8 = 5 gün. Gişe memurunun ne kadar çalışkan olduğunun bir önemi yok. Bekleme süresini içerideki kalabalık ve gişenin hızı belirliyor.

Yazılım ekibi de aynı şekilde çalışır. Tahtadaki açık kartlar içerideki kalabalıktır, ekibin günde bitirdiği iş gişenin hızıdır. Yeni başlanan bir kart, önündeki açık işler bitene kadar ekibin dikkatini onlarla paylaşır. Kalabalık büyüdükçe her kart daha uzun yaşar.

Sonra formüllü

John Little’ın 1961’de ispatladığı ilişki şu: kararlı bir sistemde ortalama bekleme süresi, ortalama açık iş sayısının birim zamanda biten iş sayısına bölümüdür. Bizim rakamlarımızla:

Little’s Law — bizim tahta
# Ortalama cycle time = ortalama acik is (WIP) / gunde biten is (throughput)

# Ekim basi (Sprint 9), limit yok
# 10 is gununde 8 kart bitti -> gunde 0,8 kart
9 acik kart / 0,8 kart/gun = 11,25 gun

# Kasim sonu (Sprint 13), akis limiti 4
# 10 is gununde 9 kart bitti -> gunde 0,9 kart
4 acik kart / 0,9 kart/gun =  4,4 gun

# Olculen ("Devam"dan "Bitti"ye, ortalama)
# once: 10,8 gun    sonra: 4,5 gun   -> formul kabaca tutuyor

İlk satırın söylediği şey beni rahatsız etti: yeni başlayan bir kart ortalama 11 günde bitiyordu. Sprint 10 iş günüydü. Yani sprint’in ilk günü başlanan ortalama bir kart bile sprint içinde bitmiyordu. “Neden hep taşıyoruz?” sorusunun cevabı tahmin kalitesinde değil, bu bölme işlemindeydi.

Formülün iki kolu var: throughput’u artırmak ya da WIP’i düşürmek. Throughput’u artırmak zor ve yavaş; insan eklemek, araç değiştirmek, beceri geliştirmek gerekiyor. WIP’i düşürmek ise yarın sabah yapılabilir. Üstelik WIP düşünce throughput da genelde artar, çünkü bağlam değiştirme ve bekleme azalır. Bizde 0,8’den 0,9’a çıktı; küçük ama doğru yönde.

Bir uyarı: Little’s Law ortalamalar hakkında konuşur. Tek bir kartın ne zaman biteceğini söylemez. Bir de kararlı sistem ister: sprint ortasında iş sayısı hızla büyüyorsa ya da ekip yarıya iniyorsa rakamlar kayar. Bizim ölçtüğümüz 10,8 gün ile formülün verdiği 11,25 gün arasındaki fark da bundan.

Nasıl olmalı?

1. Limiti akışın tamamına koy

Bir kart “Devam ediyor”dan çıkıp “Review”a girdiğinde bitmiş olmaz. Review’da ve testte bekleyen kart da açık iştir. Limit yalnızca bir sütuna konursa iş bir sonraki sütuna kayar ve orada birikir. Bizim limitimiz “Devam + Review + Test” toplamına konuyor.

2. Bloke kartı gizleme, ayrı say

Dış bir bağımlılığı bekleyen kart gerçekten bekliyor olabilir. Onu limitten tamamen düşürürsen herkes kartını “bloke” işaretlemeyi öğrenir. Bizim kuralımız: bloke kart limite sayılır, ama bloke olduğu gün daily’de adı ve engeli konuşulur. İki günden uzun bloke kalan kartın engelini kaldırmak o günün ilk işidir.

3. Limit dolunca: sağa bak

Bu, kuralın asıl kısmı. Limit doluysa ve elin boşaldıysa yeni kart çekmezsin. Tahtaya sağdan bakarsın, tıpkı Daily Standup yazısındaki yürüyüş gibi:

  • Test sütununda bekleyen var mı? Test senaryosunu birlikte koşarsın.
  • Review bekleyen PR var mı? Onu incelersin.
  • Takılmış bir kart var mı? Sahibine eş olursun.
  • Bloke kart var mı? Engeli kaldırmak için telefonu sen açarsın.

Bunların hiçbiri yoksa ve limit yine de doluysa, limit fazla sıkıdır. Bu durumda sessizce yeni kart açmazsın; bir sonraki retroda sayıyı konuşursun.

Limit dolduğunda soru “ne başlatayım?” değil, “neyi bitirmeye yardım edeyim?”dir.

4. Kart küçük olmalı

Dört kartlık limit, kartlar bir haftalıksa işe yaramaz; ekip bütün sprint’i dört kartla geçirir. Bizim tahtadaki kartlar story; çoğu iki üç günlük iş ve her biri Epic, Story, Task yazısındaki gibi bir günü geçmeyen task’lara bölünüyor. Küçük kart akar, büyük kart tıkar.

Yapılacaklar
  • Limiti devam, review ve test sütunlarının toplamına koy
  • Kişi sayısının biraz altıyla başla, iki sprint sonra ölçüye göre ayarla
  • Limit dolunca sağdan başlayıp başkasının işine yardım et
  • Bloke kartları limite say, engelini her gün konuş
  • Tahtaya girmeyen işi de say; gerçek WIP odur
Yapılmayacaklar
  • Limiti tek sütuna koyup işi bir sonraki sütuna itmek
  • Limit dolunca “küçük bir şey” diye kartsız iş açmak
  • Limiti kişi başına koymak (“herkes bir iş”)
  • Boşta kalan kişiyi tembel saymak
  • Limiti bir kere koyup bir daha hiç bakmamak

Sahadan: üç denemede dört

7 Ekim, Sprint 9’un yedinci günüydü. Ertesi gün Sprint Hedefi yazısındaki 40 dakikalık tartışmayı yaşadık. Sprint 11 kartla başlamış (dokuzu yeni, ikisi bir önceki sprint’ten taşan), 8 kartla bitmişti. Retroda “tahminlerimiz kötü” cümlesi yine geldi. Bu sefer tahmine değil, açık iş sayısına baktık. Sonraki dört sprint’te üç farklı limit denedik.

Birinci deneme: “Devam ediyor”a 5

Hata benimdi. Limiti yalnızca “Devam ediyor” sütununa koydum ve sayıyı “geliştirici başına bir iş” diye 5 seçtim. Beş geliştirici, bir QA; mantıklı göründü. Sprint sonunda tablo değişmemişti. Kartlar “Devam”dan hızla çıkıyordu, çünkü limit oradaydı. Ama “Review” sütununda 4 kart birikmişti. Toplam açık iş yine 9 civarıydı. Sorunu bir sütundan diğerine taşımıştım.

İkinci deneme: akışa 3

Bu sefer limiti üç sütunun toplamına koydum ve cesur olmak için 3 seçtim. Tahta ilk kez temiz göründü. Sprint sonunda cycle time 3,3 güne inmişti. Kutlamaya hazırlanırken retroda Ahmet şunu söyledi: “Limit doluyken müşteriden iki acil iş geldi, ben tahtaya koymadan yaptım.” Mehmet ve Ayşe’nin de benzer hikâyeleri vardı. Saydık: beş iş tahtaya hiç girmemişti.

Yani tahtadaki WIP 3’tü, gerçek WIP 8. Limit o kadar sıkıydı ki insanlar kuralı çiğnemek yerine görünmez olmayı seçmişti. Bu, limitin yok olmasından daha kötüydü: artık rakamlar yalan söylüyordu. Ayrıca iki kart müşterinin test ortamını beklerken üç kişi yarım gün boş kalmıştı ve yardım edebilecekleri bir kart da yoktu.

Üçüncü deneme: akışa 4, tek kural

Limiti 4’e çıkardık ve tek bir kural ekledik: tahtada olmayan iş yapılmaz. Acil bir iş geldiyse kartı açılır, limit bir kişilik aşılır ve bu daily’de söylenir. Gizli iş sıfıra indi, çünkü artık saklamanın bir getirisi yoktu.

DönemLimitOrt. açık işBiten kartOrt. cycle timeTahtaya girmeyen iş
29 Eylül–10 EkimYok9810,8 günBilinmiyor
13–24 Ekim“Devam”a 59810,9 günBilinmiyor
27 Ekim–7 KasımAkışa 33 (gerçekte 8)73,3 gün5
10–21 KasımAkışa 4485,1 gün0
24 Kasım–5 AralıkAkışa 4494,5 gün0

Tablonun en önemli satırı 27 Ekim–7 Kasım. Cycle time en iyi değerindeydi ve dönem en kötü dönemdi. O sprint’te tek başına cycle time’a baksaydım başarı ilan ederdim. Tahtaya girmeyen iş sütununu o retrodan sonra ekledim ve hâlâ ilk baktığım sütun.

Son iki satırdaki 5,1 ve 4,5 gün, Little’s Law’un verdiği 5,0 ve 4,4 gün ile uyumlu. Aradaki fark iki sprint’te de 0,1 gün. Formül tahtaya uymaya başladı, çünkü tahta artık gerçeği gösteriyordu. Bir not: bu ölçümlerde “Bitti” henüz test ortamında doğrulanmış demekti. Aralık’ta Definition of Done’a canlı katmanı girdiğinden beri aynı saat daha geç duruyor; o dönemin sayıları bu tabloyla karşılaştırılmaz.

Nasıl bozuluyor?

BelirtiMuhtemel nedenKarşılığı
Bir sütunda kart birikiyorLimit tek sütundaLimiti akışın toplamına taşı
Tahta temiz, sprint yine taşıyorİş tahtanın dışında yapılıyor“Tahtaya girmeyen iş” sayısını retroda sor
Herkes kartını “bloke” işaretliyorBloke kart limitten düşüyorBloke kartı limite say, engeli her gün konuş
Limit hep doluyor, kimse yardım edemiyorKartlar çok büyük ya da uzmanlık tek kişideKartı böl, eşli çalışmayı planla
Limit hep boşLimit fazla gevşekBir aşağı çek, iki sprint izle

Ne izlemeli?

  • Açık iş sayısı, her gün aynı saatte. Ortalamayı bununla alırsın.
  • Günde biten iş (throughput). Sprint başına değil, gün başına; Little’s Law buna ihtiyaç duyar.
  • Cycle time. Kartın ilk “Devam”a girdiği andan “Bitti”ye kadar.
  • Bloke kalma süresi. İki günü geçen bloke kart sayısı.
  • Tahtaya girmeyen iş. Retroda tek bir soruyla: “Bu sprint kartsız ne yaptın?”

Kontrol listesi

Limiti koymadan ve ayarlamadan önce
  • Limit tek bir sütuna mı, akışın toplamına mı konmuş?
  • Son iki sprint’in ortalama açık iş ve günlük throughput’unu biliyor muyum?
  • Little’s Law’un verdiği süre sprint süresinden kısa mı?
  • Limit dolduğunda boştaki kişinin ne yapacağı yazılı mı?
  • Bloke kartlar limite sayılıyor mu?
  • Bu sprint tahtaya girmeyen iş oldu mu, kaç tane?
  • Limiti en son ne zaman ölçüye göre değiştirdik?

Sonuç

7 Ekim sabahı tahtada 9 kart vardı ve herkes çalışıyordu. Sorun emek değildi; açık iş sayısıydı. Tek bir bölme işlemi, sprint’lerin neden hep taştığını bütün tahmin tartışmalarından daha iyi açıkladı.

İlk iki denemede yanlış yeri ve yanlış sayıyı seçtim. Birincisi sorunu bir sütun sağa itti, ikincisi işi tahtanın dışına sürdü. Doğru limit, ekibin kuralı çiğnemeden uyabileceği en düşük sayıydı.

WIP limiti ekibi yavaşlatmaz. Başlamayı yavaşlatır, bitirmeyi hızlandırır.

Kaynak

Little’s Law: John D. C. Little, “A Proof for the Queuing Formula: L = λW” (Operations Research, 1961). WIP limitinin yazılım ekiplerinde kullanımı için David J. Anderson’ın Kanban kitabı temel referans. Limitin akışın toplamına konması, bloke kart kuralı ve “tahtaya girmeyen iş” ölçüsü kendi sahamdan.