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

Ana sayfa → Ekip Yönetimi

Takvim: Doluluk Değil, Odak Bloğu

Salı 17:20, sprint ortası. Ekipteki kıdemli bir mühendis takvimini ekrana açtı: “Bu hafta iki saat üst üste boş olduğum tek yer Cuma 14:00.” Kişi başı toplantı süresine baktım: haftada 11 saat. Fazla değildi. Sonra toplantıların arasına baktım.

Özet
  • Toplantı saati yanlış ölçü. Aynı 11 saat, dağılımına göre haftada iki kesintisiz blok da bırakır, yedi blok da.
  • Ölçülecek şey iki saatlik bloklar. Kişi başı, haftada, içinde hiçbir toplantı olmayan en az iki saat.
  • Toplantıyı silmek değil, taşımak. İptal ettiğimde saat düştü, blok 2’den yalnızca 3’e çıktı. Toplantıları öğleden sonraya topladığımda 7’ye çıktı.
  • Toplantı bütçesi bir tavan. Yeni tekrarlayan toplantı ancak eskisi silinirse girer.
  • Kesintiyi tek kişiye topla. Haftalık kalkan rotasyonu, beş kişinin sabahını bir kişinin haftası pahasına kurtarıyor.
  • Sabahı bölen çoğu zaman yöneticinin kendisi. Benim takvimimde ekibin sabahına düşen 9 toplantı vardı.

Doluluk neden yanlış ölçü

Bir mühendisin günü 7 saatlik bir çekirdekten oluşuyor: 09:30–17:30, arada öğle. Haftada 35 saat. Bunun 11 saati toplantıysa kâğıt üzerinde 24 saat çalışma kalıyor. Kulağa makul geliyor.

Ama o 24 saat tek parça değil. 10:00’da 30 dakikalık bir toplantı, 11:30’da bir tane daha. Aradaki bir saat “boş” görünüyor. Gerçekte o bir saatin ilk 15 dakikası önceki toplantının mesajlarına, son 15 dakikası sonrakine hazırlığa gidiyor. Kalan yarım saatte bir ödeme akışının hatasını ayıklamaya başlamıyorsun. Mail okuyorsun.

Bizim işte bu fark daha da büyük. Bir emir iletim servisindeki yarış durumunu ayıklamak, kafanda üç servisin durumunu aynı anda tutmayı gerektiriyor. O durumu kurmak 30–40 dakika sürüyor. Bir toplantı onu sıfırlıyor.

Yarım saatlik boşluk boş zaman değildir. Bir sonraki toplantının bekleme salonudur.

Sahadan: saati kıstım, blok gelmedi

O Salı akşamı ilk tepkim klasikti: toplantıları azaltmak. Ekibe bir mesaj attım, her tekrarlayan toplantıyı tek tek sorguladık. 14 tekrarlayan toplantının 5’ini sildik, 2’sini birleştirdik. İki hafta sonra kişi başı toplantı süresi 11 saatten 7,5 saate inmişti. Sonucu gururla retrospektife getirdim.

Sonra ekipten biri sordu: “Peki kaç tane iki saatlik blok kazandık?” Saymadım demek zorunda kaldım. O akşam altı kişinin takvimini dışa aktarıp saydım. Kişi başı haftalık medyan 2’den 3’e çıkmıştı. Toplantıların üçte birini silmiş, odak zamanına neredeyse hiç dokunmamıştım.

Sebep, kalan toplantıların yeriydi. Grooming Salı 10:00’daydı. Operasyon ekibiyle haftalık senkron Çarşamba 11:30’daydı. Silinen toplantılar genelde öğleden sonrakilerdi, çünkü en sıkıcıları onlardı. Sabahın ortasındaki toplantılar yerinde kaldı. Ve en kötüsü: altı bire birin dördünü ben sabah 10:00’a koymuştum, her biri farklı güne.

Yanlış soruyu sormuştum. “Kaç saat toplantı var?” değil, “toplantılar nerede ve arada ne kalıyor?” sorusu gerekiyordu.

Toplantıların toplamı değil, arası ölçülür.

Maker ve manager takvimi

Paul Graham’ın 2009’daki yazısından beri bilinen bir ayrım var, ama ben onu kendi takvimimde görene kadar anlamamışım. İki farklı gün türü var:

Manager takvimi
  • Gün 30 dakikalık dilimlerden oluşur
  • Bir toplantı eklemek bir dilime mal olur
  • Toplantılar arası geçiş ucuz
  • “Yarım saat bulurum” her zaman doğru

Benim takvimim. Haftada 26 toplantı ve bu normal.

Maker takvimi
  • Gün yarım gün ölçeğinde çalışır
  • Bir toplantı öncesini ve sonrasını da yer
  • Geçişin maliyeti 30–40 dakika
  • “Yarım saat” neredeyse hiçbir şey

Ekibin takvimi. Birkaç kesintisiz sabah her şeyi değiştirir.

Sorun iki takvimin var olması değil. Sorun, manager takvimindeki birinin maker takvimindeki birine kendi ölçeğiyle toplantı koyması. Ben “sadece 30 dakika” diyordum. Karşı taraf için o 30 dakika sabahın tamamıydı.

Nasıl kurduk

1. Sabahlar toplantısız, öğleden sonralar toplu

Pazartesi–Perşembe 09:30–12:30 arası ekibe toplantı konmuyor. Daily 09:15’te, çekirdekten önce bitiyor. Bütün tekrarlayan toplantılar 13:30–16:30 arasına sıkıştırıldı. 16:30 sonrası yine boş. Cuma sabahı sprint törenlerine ve grooming’e ayrıldı.

Ekip haftası (sablon)
          PZT       SAL       CAR       PER       CUM
09:15     daily     daily     daily     daily     daily
09:30  +---------+---------+---------+---------+ sprint torenleri
       |  ODAK   |  ODAK   |  ODAK   |  ODAK   | / grooming
12:30  +---------+---------+---------+---------+
12:30     ogle arasi
13:30     toplanti penceresi (tekrarlayanlarin hepsi burada)
16:30     serbest: ne toplanti ne zorunlu kanal

# ODAK = toplanti yok, kanal okunmaz, yalnizca kalkan kesilebilir
# Istisna tek: canli sistemde olay. Onu kimse "toplanti" saymiyor.

İlk itiraz operasyondan geldi: onların senkronu sabah olmak zorundaydı, çünkü açılış seansından sonraki ilk saatin sorunlarını konuşuyorlardı. Çözüm: o toplantıya ekipten kimse gitmiyor, ben gidiyorum ve çıkan işi 12:30’da kanala yazıyorum. Kural ekibin sabahını koruyor, benim sabahımı değil.

2. Toplantı bütçesi

Silinen toplantılar geri geliyor. Üç hafta içinde iki yeni tekrarlayan toplantı takvime girmişti, ikisi de iyi niyetle. Bu yüzden hayır listesi mantığını takvime uyguladık: bir tavan ve bir değişim kuralı.

Toplanti butcesi (muhendis basina, haftalik)
daily                  5 x 15 dk   = 1 sa 15 dk
grooming               haftalik    = 1 sa
sprint torenleri       2 haftada 3 sa = 1 sa 30 dk
bire bir               haftalik    = 30 dk
-------------------------------------------------
toplam tekrarlayan                 = 4 sa 15 dk
tavan                              = 6 sa

KURAL 1 : Yeni tekrarlayan toplanti ancak biri silinirse girer.
KURAL 2 : Tekrarlayanlarin hepsi 13:30-16:30 penceresinde.
KURAL 3 : Tavan asilirsa bir sonraki retronun ilk maddesi.
KURAL 4 : Tek seferlik toplanti butceye girmez ama
          sabaha konamaz.

Tavanın 6 saat olması bilimsel değil. Önemli olan tavanın var olması: yeni bir toplantı önerildiğinde konuşma “bu faydalı mı?” sorusundan “bunun yerine hangisini siliyoruz?” sorusuna dönüyor. Her toplantı faydalıdır. Ama her toplantı bir şeyin yerine gelir.

3. Kesintiyi tek kişiye toplamak

Toplantısız sabah, kanal mesajları durmazsa işe yaramıyor. Operasyon ve destek ekibinden günde onlarca soru geliyordu: “Bu emir neden reddedildi?”, “Bu müşterinin ekstresi neden eksik?” Herkes herkese soruyordu.

Haftalık bir kalkan rotasyonu kurduk. O hafta bir kişi kanaldaki bütün soruları alıyor; diğerleri kanalı yalnızca 12:30’da ve 16:30’da okuyor. Haftada ortalama 35 soru geliyor, 28’ini kalkan tek başına kapatıyor. Kalanlar öğleden sonraya sıraya giriyor.

Bunun bir bedeli var ve saklamıyoruz: kalkan haftasında o kişinin blok sayısı 2’ye düşüyor. Sprint planlamasında o kişiyi yarım kapasite sayıyoruz. Beş kişinin sabahı, bir kişinin haftasına değiyor.

4. Yöneticinin kendi takvimi

Bunu en son yazıyorum ama en çok ben değiştirdim. Kendi takvimime baktığımda haftada 26 toplantının 9’unun ekibin sabahına düştüğünü gördüm: bire birler, “iki dakika konuşalım” diye açtığım görüşmeler, bir mimari soruyu sabah sormak için kurduğum kısa toplantılar.

Bire birlerin hepsini öğleden sonraya aldım. “İki dakika” görüşmeleri yazılı soruya çevirdim: öğleden sonra cevap gelsin yeter. Acil olan tek şey canlıdaki olay; onun dışında sabah 10:00’da cevaplanması gereken hiçbir sorum yokmuş.

Bir yan etkisi de oldu: kendi takvimimde de bir blok açıldı. Ekibin sabahına toplantı koymayınca benim sabahlarım da boşaldı. Perşembe sabahını kendime ayırdım: yazılı kararlar, yol haritası, uzun cevap isteyen mesajlar. Yönetici de bazen maker takvimine ihtiyaç duyuyor; sadece bunu kendisi fark etmiyor, çünkü dolu takvim ona iş yapıyormuş gibi hissettiriyor.

Takvimi dolu yönetici, ekibin takvimini de kendi ölçeğiyle doldurur.

Blokları saymak

Blok sayısı ölçülmezse iki ay içinde eski hâline dönüyor. Takvim dışa aktarımından her kişi için günlük blokları sayan küçük bir betik yazdık. Tanım bilerek basit:

Blok sayaci (Python)
from datetime import time, timedelta, datetime, date

CEKIRDEK = (time(9, 30), time(17, 30))
OGLE = (time(12, 30), time(13, 30))
ESIK = timedelta(hours=2)   # 2 saatten kisa bosluk blok sayilmaz

def fark(a, b):
    # iki saat arasindaki sure
    return datetime.combine(date.min, b) - datetime.combine(date.min, a)

def gunluk_blok(toplantilar):
    # ogle arasi da bir toplanti gibi blogu boler
    dolu = sorted(toplantilar + [OGLE])
    bas, sayi = CEKIRDEK[0], 0
    for t_bas, t_bit in dolu:
        if fark(bas, t_bas) >= ESIK:
            sayi += 1
        bas = max(bas, t_bit)
    if fark(bas, CEKIRDEK[1]) >= ESIK:
        sayi += 1
    return sayi   # gunde en fazla 2, haftada en fazla 10

Betik mükemmel değil. Takvimde olmayan kesintiyi, yani kanaldaki mesajı görmüyor. Ama takvimdeki kesintiyi görüyor ve bu, düzeltebileceğimiz kısmın çoğu.

Altı haftanın sonunda tablo şöyleydi:

Başlangıç1. deneme: iptal2. deneme: taşıma
Toplantı saati / kişi / hafta117,58
2+ saatlik blok / kişi / hafta (medyan)237
Toplantısız sabah / hafta014
Sprint sonunda yarım kalan story (3 sprint ort.)43,51,5

İki şeye dikkat. Birincisi, ikinci denemede toplantı saati arttı: 7,5’ten 8’e. Bazı konuşmalar öğleden sonraya sıkışınca ayrı toplantıya dönüştü. Blok sayısı yine de iki katından fazla arttı. İkincisi, yarım kalan story sayısındaki düşüşün hepsini takvime yazmıyorum; aynı dönemde sprint kapsamını da küçülttük. Emin olduğum tek satır blok satırı.

Nasıl bozuluyor

Kural kurmak kolay, iki ay tutmak zor. Yedinci haftada medyan 7’den 5’e düştü. Sebeplere baktığımda üç tanesi öne çıktı:

  • Tek seferlik toplantının kopyası. Biri Perşembe sabahı “bir kerelik” toplantı açtı, sonraki hafta aynı daveti kopyaladı. Üç hafta sonra fiilen tekrarlayan bir toplantıydı ve bütçede görünmüyordu.
  • Başka ekiplerin davetleri. Kural bizim ekibin içindeydi. Risk ve operasyon ekipleri bilmiyordu; sabah 10:00 davetleri gelmeye devam etti. Takvimde “sabah penceresi” açıklamasını herkese açık yaptık, reddetmeyi de ben üstlendim.
  • Yoğun hafta. Çeyrek sonu raporlama haftasında herkes “bu hafta istisna” dedi. İstisna iki hafta sürdü. Kural ancak yoğun haftada da tutulursa kural oluyor.

Üçünün ortak noktası şu: hiçbiri kötü niyet değil. Takvim, kimse karşı koymazsa kendiliğinden dolan bir şey. Bu yüzden blok sayısını her retrospektifte ekrana açıyoruz; düşüş varsa ilk madde oluyor.

Ne izlemeli?

NeNeden
Kişi başı haftalık 2+ saatlik blok (medyan)Asıl ölçü; bizde 5’in altı alarm
En düşük bloklu kişiMedyan iyiyken bir kişi 1 blokta kalabilir; genelde en kıdemli olan
Tekrarlayan toplantı saati / bütçeTavana yaklaşıyorsa silinecek toplantı konuşması erken başlar
Sabaha konan toplantı sayısı (kim koydu?)Çoğu zaman cevap “ben”
Kalkana gelen soru sayısıArtıyorsa sorun takvimde değil, dokümantasyonda

Bende işe yaramayanlar

  • Toplantısız Çarşamba. İlk denemem tek bir tam gündü. Toplantılar Salı ve Perşembe’ye yığıldı, Çarşamba da iki günün birikmiş mesajlarını okuyarak geçti. Blok sayısı 2’den 3’e çıktı, o kadar. Dört kısa sabah, bir uzun günden iyi çalıştı.
  • Takvime “Odak” diye sahte toplantı koymak. Herkes kendi takvimine koydu, kimse saygı göstermedi. Sahte toplantı taşınabilir görünüyor; üstüne toplantı konuldu, sahibi de kabul etti. Kural ekip kuralı olunca işe yaradı, kişisel tercih olarak kaldığında yaramadı.
  • Slack durumunu “odakta” yapmak. Durum görünüyordu, soru yine geliyordu. Soran kişinin gidecek bir yeri yoksa durum mesajı bir şey değiştirmiyor. Kalkan rotasyonu o yeri verdi.

Kontrol listesi

Takvim odak bırakıyor mu?
  • Ekipte kişi başı haftada kaç tane iki saatlik blok kaldığını biliyor muyum?
  • Sabah penceresine bu hafta kaç toplantı kondu, kaçını ben koydum?
  • Tekrarlayan toplantılar tek bir pencerede mi, güne dağılmış mı?
  • Toplantı bütçesinin tavanı yazılı mı, en son ne zaman aşıldı?
  • Son eklenen tekrarlayan toplantı hangi toplantının yerine geldi?
  • Bu hafta kalkan kim ve sprint kapasitesinde yarım sayıldı mı?
  • En düşük bloklu kişi kim, sebebi ne?
  • Bire birlerim ekibin sabahına mı düşüyor?

Sonuç

O Salı akşamı kıdemli mühendisin söylediği cümle bir toplantı şikâyeti değildi. Bir ölçüydü: “iki saat üst üste boş olduğum tek yer.” Ben onu toplantı saati olarak duydum ve iki hafta boyunca yanlış şeyi düzelttim.

Bugün toplantı saatimiz 11’den 8’e inmiş durumda, ama asıl değişen o değil. Aynı hafta içinde herkesin dört kesintisiz sabahı var ve bunu her hafta sayıyoruz. Toplantıları azaltmak amaç değildi; bir yan etkiydi.

Test şu: ekibindeki en kıdemli kişi, bu hafta iki saat üst üste nerede boş olduğunu takvimine bakmadan söyleyebiliyor mu? Söyleyemiyorsa takvim dolu değil, parçalanmış demektir.