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

Ana sayfa → Ekip Yönetimi

Başka Ekibe Bağımlıysan: Rica Değil, Sözleşme

Perşembe 9 Nisan, 16:40. Risk ekibinin panosunu açtım. Bizim limit endpoint’i 23. sıradaydı. 3 Mart’ta sormuştum, yarım saatte cevap gelmişti: “Tabii, yaparız.” Bizim taraf 11 günde bitmişti. Yayına dört gün vardı.

Özet
  • “Tabii, yaparız” bir taahhüt değil. Ne, ne zaman, kim yazılmadıysa iş karşı ekibin backlog’unda sırasını bekleyen bir rica olarak kalır.
  • Bağımlılığı sprint başında değil, çeyrek başında gör. İlk bağımlılık haritamızda 11 bağımlılığın 4’ünden karşı ekibin haberi yoktu.
  • Kimin önceliği geçerli sorusunun cevabı iki ekipte de değil. Şirketin önceliği geçerli; onu da iki lider birlikte masaya koyar.
  • Eskalasyon tek başına yapılmaz. Ben CTO’ya tek başıma yazdım; ilişkiyi onarmak iki hafta sürdü. Ortak toplantı 20 dakika sürdü.
  • “Biz yaparız” gerçek bir seçenek, ama bedava değil. Onların 2 gün dediği iş bize 4 gün kod, 2 gün inceleme düzeltmesi tuttu.

Sahadan: “tabii, yaparız” ile 23. sıra arası

Halka arz emir ekranını yazıyorduk. Müşteri talep girmeden önce ekranın, risk ekibinin servisinden o müşterinin halka arz limitini okuması gerekiyordu. Endpoint yoktu; risk ekibinin yazması lazımdı. 3 Mart’ta risk ekibinin liderine yazdım. Yarım saatte cevap geldi: “Tabii, yaparız.” Rahatladım ve konuyu kapattım.

Bizim taraf 11 günde bitti. Ekran hazırdı, limit çağrısı sahte bir yanıtla test ediliyordu. Yayın tarihi 13 Nisan’dı. Sonraki dört hafta boyunca risk ekibine bir kez bile sormadım. “Yaparız” demişlerdi.

9 Nisan’da panoya baktığımda iş 23. sıradaydı. Sebep kötü niyet değildi: risk ekibinin 30 Nisan’da bir denetim tarihi vardı ve ekip tamamen ona dönmüştü. Onların önceliği doğruydu. Bizimki de doğruydu. İki doğru öncelik aynı ekibin takvimine sığmıyordu.

Cuma sabahı ilk hatamı yaptım: CTO’ya tek başıma mesaj attım. “Halka arz ekranı risk ekibinden dolayı gecikiyor.” CTO mesajı risk liderine iletti. Risk lideri meseleyi benden değil, CTO’dan duydu. Haklı olarak bunu arkadan vurulmak diye okudu. O ilişkiyi onarmak iki hafta sürdü.

Sonuç: yayın 13 Nisan’dan 4 Mayıs’a kaydı, 21 gün gecikme. İlk halka arz 11 Mayıs’taydı. Dört hafta olarak planlanan pilot bir haftaya sıkıştı.

Asıl hata 9 Nisan’da değil, 3 Mart’taydı. Bir ricayı taahhüt sanmıştım.

Tarihi olmayan bir “yaparız”, nazik bir “belki”dir.

Kimin önceliği geçerli?

Bağımlılık krizlerinin çoğu bu soruda kilitleniyor. Senin ekibin kendi yol haritasını savunuyor, karşı ekip kendininkini. İkisi de haklı ve ikisi de eksik. Çünkü iki ekip lideri de şirketin tamamını görmüyor; sadece kendi dilimini görüyor.

Cevap şu: geçerli olan şirketin önceliği. Ama şirket bir kişi değil. O önceliği iki ekibin ortak yöneticisi belirliyor. Ve o kişi ancak iki seçeneği yan yana gördüğünde karar verebiliyor. Denetim mi, halka arz mı? Bunu risk lideri tek başına seçemez, ben de seçemem. Seçenekleri birlikte yazabiliriz.

Bunu 3 Mart’ta bilseydim, sorum “yapar mısınız?” olmazdı. “Bu çeyrekteki işleriniz arasında bu nereye giriyor?” olurdu. İlk soruya herkes “evet” der. İkinci soru gerçek bir sıra getirir.

Bağımlılığı erken görmek: harita

Olaydan sonra ilk yaptığımız şey, bir sonraki çeyreğin epic’lerini tek tek açıp “bu iş başka bir ekibin bir şey yapmasını gerektiriyor mu?” diye sormak oldu. Tek sayfalık bir tablo çıktı:

Bagimlilik haritasi (ceyrek basi)
EPIC                  BAGIMLI OLDUGU EKIP   NE LAZIM            KARSI EKIP BILIYOR MU?
------------------------------------------------------------------------------------
Halka arz v2          Risk                  Limit guncelleme    EVET  (tarih yok)
Viop emir ekrani      Piyasa verisi         Yeni fiyat akisi    HAYIR
Musteri bildirimleri  Platform              Kuyruk kotasi       EVET  (tarih var)
Hesap kapama          Muhasebe              Mutabakat raporu    HAYIR
...

OZET : 17 epic, 11 bagimlilik, 4 tanesinden karsi ekibin haberi yok.
KURAL: "HAYIR" satiri o hafta icinde karsi ekiple konusulur.
       "tarih yok" satiri, tarih yazilana kadar risk sayilir.

O dört “HAYIR” beni en çok korkutan satırlardı. Karşı ekip işi bilmiyorsa, bizim planımız onların planında yoktu. Çeyreğin ortasında “bir de şu lazım” diye gidecektik ve tekrar 23. sırayı görecektik.

Harita karmaşık bir araç değil. Bir tablo, çeyrek başında bir saat. Önemli olan soru: bu işi kim bitirir? Cevap “biz” değilse, satır tabloya girer. Epic’leri bölerken bu soruyu refinement sırasında sormak da işe yarıyor. Ama çeyrek başındaki tur olmadan, bağımlılık yine sprint ortasında ortaya çıkıyor.

Rica değil, sözleşme: ne, ne zaman, kim

“Sözleşme” kelimesi ağır duruyor, biliyorum. Hukuki bir şey kastetmiyorum. Kastettiğim şu: iki ekibin de okuyabileceği, üç satırı olan bir kayıt. Ve bu kayıt ikisini de bağlıyor, yalnızca karşı tarafı değil.

Rica
  • “Şu endpoint’i yapabilir misiniz?”
  • “Tabii, yaparız.”
  • Tarih yok, sahip yok, kabul kriteri yok.
  • Takip: “bir sorayım” mesajları.

Karşı ekip evet der, çünkü hayır demenin bedeli o an daha yüksek.

Sözleşme
  • Ne: endpoint, istek ve yanıt örneğiyle.
  • Ne zaman: tarih. “Önümüzdeki sprint” değil.
  • Kim: karşı ekipte adı yazılı bir sahip.
  • B planı: tarih kaçarsa ne olacağı ve ne zaman.

Karşı ekip hayır da diyebilir. Erken gelen hayır, geç gelen evetten iyidir.

Olaydan sonra bu kaydı dört kurala bağladık. Hepsi tek bir sayfada, iki ekibin de panosunda duruyor:

Bagimlilik sozlesmesi
NE        : [endpoint + istek/yanit ornegi + kabul kriteri]
NE ZAMAN  : [tarih - "onumuzdeki sprint" degil]
KIM       : [karsi ekipte ismi yazili sahip]

KURAL 1 - B plani tarihi : Asil tarihten once, yazili bir gun.
          O gun is baslamadiysa B plani kendiliginden devreye girer.
KURAL 2 - Inceleme suresi: Biz karsi ekibin koduna PR acarsak
          ilk inceleme en fazla 2 is gunu icinde yapilir.
KURAL 3 - 48 saat        : Iki lider 48 saatte anlasamazsa
          konu ORTAK eskalasyona gider. Tek basina degil.
KURAL 4 - Sali kontrolu  : Her Sali 5 dakika. Tek soru:
          "Tarih hala gecerli mi?" Cevap hayirsa kural 1.

Birinci kural en önemlisi. Bizim olayımızda B planı vardı, ama tarihi yoktu. Bu yüzden 9 Nisan’a kadar kimse onu hatırlamadı. B planının tarihi olunca, karar vermek bir tartışma değil, takvim meselesi oluyor.

Dördüncü kural en ucuzu. Salı kontrolü bir toplantı değil; iki lider arasında tek bir mesaj ya da koridorda beş dakika. Soru hep aynı: “Tarih hâlâ geçerli mi?” 9 Nisan’dan önce bu soruyu dört Salı üst üste sorabilirdim. Birinde cevap “denetim geldi, kayabilir” olurdu ve elimde üç hafta daha olurdu.

Karşı ekip sensen

Aynı kurallar ters yönde de işliyor. Başka bir ekip senden bir şey istediğinde en kolay cevap “tabii, yaparız”. O an kimseyi kırmıyorsun. Ama o cümleyle, bir tarih vermeden bir tarih almış oluyorsun. Karşı ekip kendi planını senin cümlene göre kuruyor.

Olaydan sonra kendi ekibim için de aynı kuralı koydum. Başka bir ekipten gelen isteğe “evet” demeden önce iki şeye bakıyoruz: bu çeyreğin işleri arasında nereye giriyor ve hangi işi geriye itiyor. Cevabımız “evet, şu tarihte” ya da “bu çeyrek hayır, şu sebeple” oluyor. İkincisini söylemek zor. Ama karşı ekibe B planını kurmak için beş hafta veriyor.

Eskalasyon: tek başına değil, birlikte

Cuma günü CTO’ya attığım mesaj teknik olarak doğruydu. İş gerçekten risk ekibi yüzünden gecikiyordu. Ama mesajın okunuşu şuydu: “Bu ekip beni yavaşlatıyor, onları düzelt.” Risk lideri bunu savunmaya geçerek karşıladı. Haklıydı da: ona kendi durumunu anlatma şansı vermemiştim. Kendi denetim tarihini benim mesajımın içinde değil, CTO’nun sorusunun cevabı olarak anlatmak zorunda kaldı.

Salı 14 Nisan’da düzeltmeye çalıştım. Risk lideriyle oturup üç seçeneği tek sayfaya birlikte yazdık. Sonra ikimiz birlikte CTO’nun yanına gittik:

SeçenekNe olurBedeli
A — bekleRisk ekibi denetimden sonra yazarDenetim 30 Nisan’da bitiyor; 11 Mayıs’taki ilk halka arzdan önce pilot kalmaz
B — biz yazalımBiz risk ekibinin koduna PR açarız, onlar incelerBizim tarafta birkaç gün; onlarda inceleme saati
C — geçici çözümLimiti kendi tarafımızda tutarızLimitin iki kaynağı olur; denetimde tam da sorulacak şey

Toplantı 20 dakika sürdü. B seçildi. Kimse “kim haklıydı” diye sormadı, çünkü masadaki soru o değildi. Aynı sonuca Cuma günü de varabilirdik. Tek başıma yazmasaydım, iki haftalık bir soğukluğa da gerek kalmazdı.

Tek başına eskalasyon bir şikâyettir. Ortak eskalasyon bir karardır.

Buradan çıkan kural 48 saat kuralı oldu. İki lider bir konuyu 48 saatte çözemezse konu yukarı gider. Ama birlikte gider: seçenekler tek sayfada, iki imzayla. Çözülmeyen bir anlaşmazlığı bastırmak yerine yüzeye çıkarmanın ne demek olduğunu çatışma yazısında anlatmıştım. Ekipler arasında da aynı şey geçerli. Tek fark, masada iki ekibin olması.

“Biz yaparız”: başka ekibin koduna PR

B seçeneği kâğıt üzerinde kolay görünüyordu. Kod bizim, sadece depo onların. Pratikte o kadar kolay değildi. PR’ı 22 Nisan’da açtık, 28 Nisan’da merge edildi. Toplam maliyet: 4 gün kod, 2 gün inceleme düzeltmesi. Risk ekibi aynı işi 2 gün olarak tahmin etmişti.

Üç katın sebebi açıktı. Onların test altyapısını bilmiyorduk. Limit hesaplamasındaki iki kenar durumu ancak incelemede öğrendik. Loglama kuralları bizimkinden farklıydı. Bunlar onlar için bilinen şeylerdi, bizim için keşifti.

Yine de doğru seçimdi. A seçeneğinde ilk halka arzı pilotsuz karşılayacaktık; 6 gün bunun yanında ucuzdu. Ama “biz yaparız” demeden önce şu dört şeyi artık soruyoruz:

  • İncelemeye söz var mı? Karşı ekip iki gün içinde bakmayacaksa sorunu taşımışsın, çözmemişsin.
  • Sahiplik kimde kalacak? Merge’den sonra kod onların. Gece alarm çalarsa onlar kalkar. Bunu yazmadan başlama.
  • Tahmini üçle çarptın mı? Başkasının kod tabanında ilk iş, kendi tabanındakinden her zaman daha pahalı.
  • Bir kez mi, sürekli mi? Aynı ekibe her çeyrek PR açıyorsan sorun bağımlılık değil, sınır yanlış çizilmiş demektir.

Son madde önemli. Sınırın nerede çizileceği ayrı bir konu ve onu squad modeli ile reorg yazılarında işlemiştim. Aynı karşı ekibe sürekli bağımlıysan, o ekip bir iç ürün gibi çalışmıyor olabilir. Bu da platform ekibi yazısının konusu.

Ne izlemeli?

NeNeden
Karşı ekibin haberi olmayan bağımlılık sayısıÇeyrek başında sıfıra inmeli; ilk haritada 11’in 4’üydü
Tarihi yazılı olmayan bağımlılık sayısıTarihsiz her satır bir rica; risk olarak sayılır
Çeyrek başına bağımlılık yüzünden kayan epicAsıl sonuç metriği; bizde 5’ten 1’e indi
B planının devreye girme sayısıHiç girmiyorsa ya tarihler çok gevşek ya kural uygulanmıyor
Tek başına yapılan eskalasyon sayısıSıfır olmalı; her biri bir ilişki maliyeti

Bende işe yaramayanlar

  • Haftalık bağımlılık toplantısı. Sekiz lider, 45 dakika, her hafta. Üçüncü haftada yarısı gelmedi. Toplantıdaki satırların çoğu o gün orada olan kişilerle ilgili değildi. Yerine Salı günleri, her bağımlılık çifti için 5 dakikalık kontrol koyduk. Sadece iki lider, tek soru.
  • Bağımlılığı Jira’da link olarak tutmak. “Blocks / is blocked by” linkleri doğruydu ama kimse bakmıyordu. Link bir tarih taşımıyor. Tarih taşımayan kayıt, kimseyi bir şeye bağlamıyor.
  • “Tabii” cevabına güvenmek. Sorun karşı ekipte değildi. Karşı tarafın o an nazik olmasını, bir taahhüt gibi okuyan bendim.

Kontrol listesi

Bağımlılığın sözleşmesi var mı?
  • Bu çeyrekteki her epic için “bunu kim bitirir?” sorusunu sordum mu?
  • Karşı ekip bu bağımlılığı kendi planında görüyor mu?
  • Ne, ne zaman, kim yazılı mı ve iki ekip de aynı kaydı okuyor mu?
  • B planının bir tarihi var mı?
  • Karşı ekibin koduna PR açarsak, inceleme süresi ve sahiplik yazılı mı?
  • Bu hafta Salı kontrolünü yaptım mı?
  • 48 saattir çözülmeyen bir konuyu tek başıma mı taşıyorum?
  • Karşı ekibin liderinden bir şeyi son kez CTO’dan mı duydu, benden mi?

Sonuç

9 Nisan’daki 23. sıra bir sürpriz değildi. 3 Mart’ta yazılmayan bir tarihin beş hafta sonraki faturasıydı. Risk ekibi söz vermemişti; ben bir söz duyduğumu varsaymıştım.

Sonraki çeyrekte değişen şeyler büyük değildi. Tek sayfalık bir harita, üç satırlık bir kayıt, Salı günleri beş dakika. Çeyrek başına kayan epic sayısı 5’ten 1’e indi. O bir tanesini de CTO’dan değil, Salı kontrolünden öğrendik.

Başka bir ekibe bağımlıysan, yapacağın ilk şey rica etmek değil. Tarihi, sahibi ve B planı olan bir cümleyi, iki ekibin de okuyacağı bir yere yazmak. O cümle yoksa elindeki şey bir söz değil, bir umut.